Merge branch 'jk/clean-d-pathspec' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 18 Mar 2014 21:04:59 +0000 (14:04 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 18 Mar 2014 21:04:59 +0000 (14:04 -0700)
"git clean -d pathspec" did not use the given pathspec correctly
and ended up cleaning too much.

* jk/clean-d-pathspec:
clean: simplify dir/not-dir logic
clean: respect pathspecs with "-d"

1  2 
builtin/clean.c
diff --cc builtin/clean.c
index cb02a5330ac58266ec4bd0414414bc6f08b92ed8,4ec4fe2577dedb9e5895d3208a12248b6b82daf8..55029577f8c06c4bd65d8f89aaa24461d82fe6c6
@@@ -944,19 -961,18 +944,17 @@@ int cmd_clean(int argc, const char **ar
                        die_errno("Cannot lstat '%s'", ent->name);
  
                if (pathspec.nr)
 -                      matches = match_pathspec_depth(&pathspec, ent->name,
 -                                                     len, 0, NULL);
 +                      matches = dir_path_match(ent, &pathspec, 0, NULL);
  
-               if (S_ISDIR(st.st_mode)) {
-                       if (remove_directories || (matches == MATCHED_EXACTLY)) {
-                               rel = relative_path(ent->name, prefix, &buf);
-                               string_list_append(&del_list, rel);
-                       }
-               } else {
-                       if (pathspec.nr && !matches)
-                               continue;
-                       rel = relative_path(ent->name, prefix, &buf);
-                       string_list_append(&del_list, rel);
-               }
+               if (pathspec.nr && !matches)
+                       continue;
+               if (S_ISDIR(st.st_mode) && !remove_directories &&
+                   matches != MATCHED_EXACTLY)
+                       continue;
+               rel = relative_path(ent->name, prefix, &buf);
+               string_list_append(&del_list, rel);
        }
  
        if (interactive && del_list.nr > 0)