Merge branch 'en/clean-nested-with-ignored'
"git clean" fixes. * en/clean-nested-with-ignored: dir: special case check for the possibility that pathspec is NULL clean: fix theoretical path corruption clean: rewrap overly long line clean: avoid removing untracked files in a nested git repository clean: disambiguate the definition of -d git-clean.txt: do not claim we will delete files with -n/--dry-run dir: add commentary explaining match_pathspec_item's return value dir: if our pathspec might match files under a dir, recurse into it dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case dir: also check directories for matching pathspecs dir: fix off-by-one error in match_pathspec_item dir: fix typo in comment t7300: add testcases showing failure to clean specified pathspecs
This commit is contained in:
@ -158,7 +158,8 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag,
|
||||
|
||||
*dir_gone = 1;
|
||||
|
||||
if ((force_flag & REMOVE_DIR_KEEP_NESTED_GIT) && is_nonbare_repository_dir(path)) {
|
||||
if ((force_flag & REMOVE_DIR_KEEP_NESTED_GIT) &&
|
||||
is_nonbare_repository_dir(path)) {
|
||||
if (!quiet) {
|
||||
quote_path_relative(path->buf, prefix, "ed);
|
||||
printf(dry_run ? _(msg_would_skip_git_dir) : _(msg_skip_git_dir),
|
||||
@ -946,9 +947,19 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||
|
||||
if (force > 1)
|
||||
rm_flags = 0;
|
||||
else
|
||||
dir.flags |= DIR_SKIP_NESTED_GIT;
|
||||
|
||||
dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
|
||||
|
||||
if (argc) {
|
||||
/*
|
||||
* Remaining args implies pathspecs specified, and we should
|
||||
* recurse within those.
|
||||
*/
|
||||
remove_directories = 1;
|
||||
}
|
||||
|
||||
if (remove_directories)
|
||||
dir.flags |= DIR_SHOW_IGNORED_TOO | DIR_KEEP_UNTRACKED_CONTENTS;
|
||||
|
||||
@ -1007,6 +1018,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||
for_each_string_list_item(item, &del_list) {
|
||||
struct stat st;
|
||||
|
||||
strbuf_reset(&abs_path);
|
||||
if (prefix)
|
||||
strbuf_addstr(&abs_path, prefix);
|
||||
|
||||
@ -1040,7 +1052,6 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||
printf(dry_run ? _(msg_would_remove) : _(msg_remove), qname);
|
||||
}
|
||||
}
|
||||
strbuf_reset(&abs_path);
|
||||
}
|
||||
|
||||
strbuf_release(&abs_path);
|
||||
|
Reference in New Issue
Block a user