Code

git-clean: honor core.excludesfile
authorJunio C Hamano <gitster@pobox.com>
Wed, 14 Nov 2007 09:54:43 +0000 (01:54 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 14 Nov 2007 10:03:29 +0000 (02:03 -0800)
git-clean did not honor core.excludesfile configuration
variable, although some other commands such as git-add and
git-status did.  Fix this inconsistency.

Original report and patch from Shun'ichi Fuji.  Rewritten by me
and bugs and tests are mine.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-clean.sh
t/t7300-clean.sh

index 44917381863e27de6bedc91fa742eb0f8211a492..931d1aa4e4ed6cefb52c2dfe31aa5f059d0b2129 100755 (executable)
@@ -75,15 +75,22 @@ esac
 
 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
index eb0847afe9825f4af46065c2ee38282c44789bfb..0ed4ae282728a1701a8d67ae16572db14f1dee69 100755 (executable)
@@ -177,4 +177,15 @@ test_expect_success 'clean.requireForce and -f' '
 
 '
 
+test_expect_success 'core.excludesfile' '
+
+       echo excludes >excludes &&
+       echo included >included &&
+       git config core.excludesfile excludes &&
+       output=$(git clean -n excludes included 2>&1) &&
+       expr "$output" : ".*included" >/dev/null &&
+       ! expr "$output" : ".*excludes" >/dev/null
+
+'
+
 test_done