From: Junio C Hamano Date: Tue, 18 Mar 2014 21:04:59 +0000 (-0700) Subject: Merge branch 'jk/clean-d-pathspec' into maint X-Git-Tag: v1.9.1~1 X-Git-Url: https://repo.or.cz/w/git.git/commitdiff_plain/9526473f110338d23524ea663eb282a36c7fe4f3 Merge branch 'jk/clean-d-pathspec' into maint "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" --- 9526473f110338d23524ea663eb282a36c7fe4f3 diff --cc builtin/clean.c index cb02a5330a,4ec4fe2577..55029577f8 --- a/builtin/clean.c +++ b/builtin/clean.c @@@ -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)