git-clean: honor core.excludesfile

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>
This commit is contained in:
Junio C Hamano 2007-11-14 01:54:43 -08:00
parent 7f55cf451c
commit b57321f57b
2 changed files with 19 additions and 1 deletions

View file

@ -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

View file

@ -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