diff options
Diffstat (limited to 'git-clean.sh')
-rwxr-xr-x | git-clean.sh | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/git-clean.sh b/git-clean.sh index 35a5142c56..01c95e9fe8 100755 --- a/git-clean.sh +++ b/git-clean.sh @@ -26,12 +26,13 @@ require_work_tree ignored= ignoredonly= cleandir= -disabled="`git config --bool clean.requireForce`" rmf="rm -f --" rmrf="rm -rf --" rm_refuse="echo Not removing" echo1="echo" +disabled=$(git config --bool clean.requireForce) + while test $# != 0 do case "$1" in @@ -39,10 +40,10 @@ do cleandir=1 ;; -f) - disabled= + disabled=false ;; -n) - disabled= + disabled=false rmf="echo Would remove" rmrf="echo Would remove" rm_refuse="echo Would not remove" @@ -68,9 +69,17 @@ do shift done -if [ "$disabled" = true ]; then +# requireForce used to default to false but now it defaults to true. +# IOW, lack of explicit "clean.requireForce = false" is taken as +# "clean.requireForce = true". +case "$disabled" in +"") + die "clean.requireForce not set and -n or -f not given; refusing to clean" + ;; +"true") die "clean.requireForce set and -n or -f not given; refusing to clean" -fi + ;; +esac if [ "$ignored,$ignoredonly" = "1,1" ]; then die "-x and -X cannot be set together" @@ -78,15 +87,22 @@ fi if [ -z "$ignored" ]; then excl="--exclude-per-directory=.gitignore" + excl_info= excludes_file= if [ -f "$GIT_DIR/info/exclude" ]; then excl_info="--exclude-from=$GIT_DIR/info/exclude" fi + if cfg_excl=$(git config core.excludesfile) && test -f "$cfg_excl" + then + excludes_file="--exclude-from=$cfg_excl" + fi if [ "$ignoredonly" ]; then excl="$excl --ignored" fi fi -git ls-files --others --directory $excl ${excl_info:+"$excl_info"} -- "$@" | +git ls-files --others --directory \ + $excl ${excl_info:+"$excl_info"} ${excludes_file:+"$excludes_file"} \ + -- "$@" | while read -r file; do if [ -d "$file" -a ! -L "$file" ]; then if [ -z "$cleandir" ]; then |