From: Junio C Hamano Date: Tue, 18 Mar 2014 20:47:57 +0000 (-0700) Subject: Merge branch 'jk/clean-d-pathspec' X-Git-Tag: v2.0.0-rc0~102 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/15520a858f5c3468eaa7f9c844218714d3bc1687?hp=--cc Merge branch 'jk/clean-d-pathspec' "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" --- 15520a858f5c3468eaa7f9c844218714d3bc1687 diff --cc builtin/clean.c index 114d7bf879,4ec4fe2577..cf76b1f412 --- a/builtin/clean.c +++ b/builtin/clean.c @@@ -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)