Code

Add clean.requireForce option, and add -f option to git-clean to override it
authorJosh Triplett <josh@freedesktop.org>
Tue, 24 Apr 2007 00:18:16 +0000 (17:18 -0700)
committerJunio C Hamano <junkio@cox.net>
Tue, 24 Apr 2007 05:13:50 +0000 (22:13 -0700)
Add a new configuration option clean.requireForce.  If set, git-clean will
refuse to run, unless forced with the new -f option, or not acting due to -n.

Signed-off-by: Josh Triplett <josh@freedesktop.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/config.txt
Documentation/git-clean.txt
contrib/completion/git-completion.bash
git-clean.sh

index b13ff3a1bbedb70766f08b2e4d9b5048a4903d4d..e0aff5369f3b7ee3059095fc3531779e452e1db1 100644 (file)
@@ -300,6 +300,10 @@ branch.<name>.merge::
        branch.<name>.merge to the desired branch, and use the special setting
        `.` (a period) for branch.<name>.remote.
 
+clean.requireForce::
+       A boolean to make git-clean do nothing unless given -f or -n.  Defaults
+       to false.
+
 color.branch::
        A boolean to enable/disable color in the output of
        gitlink:git-branch[1]. May be set to `true` (or `always`),
index c61afbcdbac49ccbb7ee755e3fdb19d7d77225d0..5aff026eb489a84640ffef6c8deed5b9f89e2b06 100644 (file)
@@ -8,7 +8,7 @@ git-clean - Remove untracked files from the working tree
 SYNOPSIS
 --------
 [verse]
-'git-clean' [-d] [-n] [-q] [-x | -X] [--] <paths>...
+'git-clean' [-d] [-f] [-n] [-q] [-x | -X] [--] <paths>...
 
 DESCRIPTION
 -----------
@@ -25,6 +25,10 @@ OPTIONS
 -d::
        Remove untracked directories in addition to untracked files.
 
+-f::
+       If the git configuration specifies clean.forceRequire as true,
+       git-clean will refuse to run unless given -f or -n.
+
 -n::
        Don't actually remove anything, just show what would be done.
 
index 7c03403484f3a52c9588aa3bfc58dea4f394dabe..46356e8a274a20c4d01f43c60caf98c2e7e1b76a 100755 (executable)
@@ -790,6 +790,7 @@ _git_config ()
                core.legacyHeaders
                core.packedGitWindowSize
                core.packedGitLimit
+               clean.requireForce
                color.branch
                color.branch.current
                color.branch.local
index db177a7886b6407b4c4ad7b778a1ae99471355ac..299309d97169e6d9a52a8175dd0b8f6d54c5b369 100755 (executable)
@@ -3,9 +3,10 @@
 # Copyright (c) 2005-2006 Pavel Roskin
 #
 
-USAGE="[-d] [-n] [-q] [-x | -X] [--] <paths>..."
+USAGE="[-d] [-f] [-n] [-q] [-x | -X] [--] <paths>..."
 LONG_USAGE='Clean untracked files from the working directory
        -d      remove directories as well
+       -f      override clean.requireForce and clean anyway
        -n      don'\''t remove anything, just show what would be done
        -q      be quiet, only report errors
        -x      remove ignored files as well
@@ -19,6 +20,7 @@ require_work_tree
 ignored=
 ignoredonly=
 cleandir=
+disabled="`git-config --bool clean.requireForce`"
 rmf="rm -f --"
 rmrf="rm -rf --"
 rm_refuse="echo Not removing"
@@ -30,7 +32,11 @@ do
        -d)
                cleandir=1
                ;;
+       -f)
+               disabled=
+               ;;
        -n)
+               disabled=
                rmf="echo Would remove"
                rmrf="echo Would remove"
                rm_refuse="echo Would not remove"
@@ -58,6 +64,11 @@ do
        shift
 done
 
+if [ "$disabled" = true ]; then
+       echo "clean.requireForce set and -n or -f not given; refusing to clean"
+       exit 1
+fi
+
 case "$ignored,$ignoredonly" in
        1,1) usage;;
 esac