Merge branch 'jk/clean-d-pathspec'
authorJunio C Hamano <gitster@pobox.com>
Tue, 18 Mar 2014 20:47:57 +0000 (13:47 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 18 Mar 2014 20:47:57 +0000 (13:47 -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 114d7bf879690fb1c1c33f768b86776b6ff60ef8,4ec4fe2577dedb9e5895d3208a12248b6b82daf8..cf76b1f412e5423df42528c928c557764f31ad02
@@@ -945,19 -961,18 +945,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)