1
0
mirror of https://github.com/git/git.git synced 2024-11-20 15:04:26 +01:00
git/t/t3700-add.sh
Junio C Hamano 4d06f8ac43 Fix 'git add' with .gitignore
When '*.ig' is ignored, and you have two files f.ig and d.ig/foo
in the working tree,

	$ git add .

correctly ignored f.ig but failed to ignore d.ig/foo.  This was
caused by a thinko in an earlier commit 4888c534, when we tried
to allow adding otherwise ignored files.

After reverting that commit, this takes a much simpler approach.
When we have an unmatched pathspec that talks about an existing
pathname, we know it is an ignored path the user tried to add,
so we include it in the set of paths directory walker returned.

This does not let you say "git add -f D" on an ignored directory
D and add everything under D.  People can submit a patch to
further allow it if they want to, but I think it is a saner
behaviour to require explicit paths to be spelled out in such a
case.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-12-29 11:01:31 -08:00

88 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2006 Carl D. Worth
#
test_description='Test of git-add, including the -- option.'
. ./test-lib.sh
test_expect_success \
'Test of git-add' \
'touch foo && git-add foo'
test_expect_success \
'Post-check that foo is in the index' \
'git-ls-files foo | grep foo'
test_expect_success \
'Test that "git-add -- -q" works' \
'touch -- -q && git-add -- -q'
test_expect_success \
'git-add: Test that executable bit is not used if core.filemode=0' \
'git repo-config core.filemode 0 &&
echo foo >xfoo1 &&
chmod 755 xfoo1 &&
git-add xfoo1 &&
case "`git-ls-files --stage xfoo1`" in
100644" "*xfoo1) echo ok;;
*) echo fail; git-ls-files --stage xfoo1; (exit 1);;
esac'
test_expect_success \
'git-update-index --add: Test that executable bit is not used...' \
'git repo-config core.filemode 0 &&
echo foo >xfoo2 &&
chmod 755 xfoo2 &&
git-update-index --add xfoo2 &&
case "`git-ls-files --stage xfoo2`" in
100644" "*xfoo2) echo ok;;
*) echo fail; git-ls-files --stage xfoo2; (exit 1);;
esac'
test_expect_success \
'git-update-index --add: Test that executable bit is not used...' \
'git repo-config core.filemode 0 &&
ln -s xfoo2 xfoo3 &&
git-update-index --add xfoo3 &&
case "`git-ls-files --stage xfoo3`" in
120000" "*xfoo3) echo ok;;
*) echo fail; git-ls-files --stage xfoo3; (exit 1);;
esac'
test_expect_success '.gitignore test setup' '
echo "*.ig" >.gitignore &&
mkdir c.if d.ig &&
>a.ig && >b.if &&
>c.if/c.if && >c.if/c.ig &&
>d.ig/d.if && >d.ig/d.ig
'
test_expect_success '.gitignore is honored' '
git-add . &&
! git-ls-files | grep "\\.ig"
'
test_expect_success 'error out when attempting to add ignored ones without -f' '
! git-add a.?? &&
! git-ls-files | grep "\\.ig"
'
test_expect_success 'error out when attempting to add ignored ones without -f' '
! git-add d.?? &&
! git-ls-files | grep "\\.ig"
'
test_expect_success 'add ignored ones with -f' '
git-add -f a.?? &&
git-ls-files --error-unmatch a.ig
'
test_expect_success 'add ignored ones with -f' '
git-add -f d.??/* &&
git-ls-files --error-unmatch d.ig/d.if d.ig/d.ig
'
test_done