aboutsummaryrefslogtreecommitdiff
path: root/builtin-clean.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-08-16 04:13:13 -0700
committerJunio C Hamano <gitster@pobox.com>2009-08-16 04:13:13 -0700
commit14683af812ee0b19c416223287c6e330dbdc9ffc (patch)
tree8f6aba92fa7a9e1f088129b1ebc4f6082d4c8d31 /builtin-clean.c
parentb21f9e7f860620571667fba33ed511bed59dfb14 (diff)
parenta0f4afbe87ddda7902e36350d163dea146166550 (diff)
downloadgit-14683af812ee0b19c416223287c6e330dbdc9ffc.tar.gz
git-14683af812ee0b19c416223287c6e330dbdc9ffc.tar.xz
Merge branch 'jc/maint-clean-nested-dir-safety'
* jc/maint-clean-nested-dir-safety: clean: require double -f options to nuke nested git repository and work tree
Diffstat (limited to 'builtin-clean.c')
-rw-r--r--builtin-clean.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/builtin-clean.c b/builtin-clean.c
index 2d8c735d4..05c763cbe 100644
--- a/builtin-clean.c
+++ b/builtin-clean.c
@@ -31,6 +31,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
int i;
int show_only = 0, remove_directories = 0, quiet = 0, ignored = 0;
int ignored_only = 0, baselen = 0, config_set = 0, errors = 0;
+ int rm_flags = REMOVE_DIR_KEEP_NESTED_GIT;
struct strbuf directory = STRBUF_INIT;
struct dir_struct dir;
static const char **pathspec;
@@ -69,6 +70,9 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
die("clean.requireForce%s set and -n or -f not given; "
"refusing to clean", config_set ? "" : " not");
+ if (force > 1)
+ rm_flags = 0;
+
dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
if (!ignored)
@@ -131,7 +135,8 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
(matches == MATCHED_EXACTLY)) {
if (!quiet)
printf("Removing %s\n", qname);
- if (remove_dir_recursively(&directory, 0) != 0) {
+ if (remove_dir_recursively(&directory,
+ rm_flags) != 0) {
warning("failed to remove '%s'", qname);
errors++;
}