3
3
# Copyright (c) 2006 Carl D. Worth
6
test_description='Test of git-add, including the -- option.'
6
test_description='Test of git add, including the -- option.'
10
10
test_expect_success \
12
'touch foo && git-add foo'
12
'touch foo && git add foo'
14
14
test_expect_success \
15
15
'Post-check that foo is in the index' \
16
'git-ls-files foo | grep foo'
19
'Test that "git-add -- -q" works' \
20
'touch -- -q && git-add -- -q'
23
'git-add: Test that executable bit is not used if core.filemode=0' \
16
'git ls-files foo | grep foo'
19
'Test that "git add -- -q" works' \
20
'touch -- -q && git add -- -q'
23
'git add: Test that executable bit is not used if core.filemode=0' \
24
24
'git config core.filemode 0 &&
28
case "`git-ls-files --stage xfoo1`" in
28
case "`git ls-files --stage xfoo1`" in
29
29
100644" "*xfoo1) echo ok;;
30
*) echo fail; git-ls-files --stage xfoo1; (exit 1);;
30
*) echo fail; git ls-files --stage xfoo1; (exit 1);;
33
test_expect_success 'git-add: filemode=0 should not get confused by symlink' '
33
test_expect_success 'git add: filemode=0 should not get confused by symlink' '
37
case "`git-ls-files --stage xfoo1`" in
37
case "`git ls-files --stage xfoo1`" in
38
38
120000" "*xfoo1) echo ok;;
39
*) echo fail; git-ls-files --stage xfoo1; (exit 1);;
39
*) echo fail; git ls-files --stage xfoo1; (exit 1);;
43
43
test_expect_success \
44
'git-update-index --add: Test that executable bit is not used...' \
44
'git update-index --add: Test that executable bit is not used...' \
45
45
'git config core.filemode 0 &&
48
git-update-index --add xfoo2 &&
49
case "`git-ls-files --stage xfoo2`" in
48
git update-index --add xfoo2 &&
49
case "`git ls-files --stage xfoo2`" in
50
50
100644" "*xfoo2) echo ok;;
51
*) echo fail; git-ls-files --stage xfoo2; (exit 1);;
51
*) echo fail; git ls-files --stage xfoo2; (exit 1);;
54
test_expect_success 'git-add: filemode=0 should not get confused by symlink' '
54
test_expect_success 'git add: filemode=0 should not get confused by symlink' '
57
57
git update-index --add xfoo2 &&
58
case "`git-ls-files --stage xfoo2`" in
58
case "`git ls-files --stage xfoo2`" in
59
59
120000" "*xfoo2) echo ok;;
60
*) echo fail; git-ls-files --stage xfoo2; (exit 1);;
60
*) echo fail; git ls-files --stage xfoo2; (exit 1);;
64
64
test_expect_success \
65
'git-update-index --add: Test that executable bit is not used...' \
65
'git update-index --add: Test that executable bit is not used...' \
66
66
'git config core.filemode 0 &&
67
67
ln -s xfoo2 xfoo3 &&
68
git-update-index --add xfoo3 &&
69
case "`git-ls-files --stage xfoo3`" in
68
git update-index --add xfoo3 &&
69
case "`git ls-files --stage xfoo3`" in
70
70
120000" "*xfoo3) echo ok;;
71
*) echo fail; git-ls-files --stage xfoo3; (exit 1);;
71
*) echo fail; git ls-files --stage xfoo3; (exit 1);;
74
74
test_expect_success '.gitignore test setup' '
82
82
test_expect_success '.gitignore is honored' '
84
! git-ls-files | grep "\\.ig"
87
test_expect_success 'error out when attempting to add ignored ones without -f' '
89
! git-ls-files | grep "\\.ig"
92
test_expect_success 'error out when attempting to add ignored ones without -f' '
94
! git-ls-files | grep "\\.ig"
97
test_expect_success 'add ignored ones with -f' '
99
git-ls-files --error-unmatch a.ig
102
test_expect_success 'add ignored ones with -f' '
104
git-ls-files --error-unmatch d.ig/d.if d.ig/d.ig
84
! git ls-files | grep "\\.ig"
87
test_expect_success 'error out when attempting to add ignored ones without -f' '
89
! git ls-files | grep "\\.ig"
92
test_expect_success 'error out when attempting to add ignored ones without -f' '
94
! git ls-files | grep "\\.ig"
97
test_expect_success 'add ignored ones with -f' '
99
git ls-files --error-unmatch a.ig
102
test_expect_success 'add ignored ones with -f' '
104
git ls-files --error-unmatch d.ig/d.if d.ig/d.ig
110
110
git add 1/2/a 1/3/b 1/2/c
113
test_expect_success 'git add with filemode=0, symlinks=0, and unmerged entries' '
117
echo "100755 $(git hash-object -w stage$s) $s file"
118
echo "120000 $(printf $s | git hash-object -w -t blob --stdin) $s symlink"
119
done | git update-index --index-info &&
120
git config core.filemode 0 &&
121
git config core.symlinks 0 &&
123
echo new > symlink &&
124
git add file symlink &&
125
git ls-files --stage | grep "^100755 .* 0 file$" &&
126
git ls-files --stage | grep "^120000 .* 0 symlink$"
129
test_expect_success 'git add with filemode=0, symlinks=0 prefers stage 2 over stage 1' '
130
git rm --cached -f file symlink &&
132
echo "100644 $(git hash-object -w stage1) 1 file"
133
echo "100755 $(git hash-object -w stage2) 2 file"
134
echo "100644 $(printf 1 | git hash-object -w -t blob --stdin) 1 symlink"
135
echo "120000 $(printf 2 | git hash-object -w -t blob --stdin) 2 symlink"
136
) | git update-index --index-info &&
137
git config core.filemode 0 &&
138
git config core.symlinks 0 &&
140
echo new > symlink &&
141
git add file symlink &&
142
git ls-files --stage | grep "^100755 .* 0 file$" &&
143
git ls-files --stage | grep "^120000 .* 0 symlink$"
146
test_expect_success 'git add --refresh' '
147
>foo && git add foo && git commit -a -m "commit all" &&
148
test -z "`git diff-index HEAD -- foo`" &&
149
git read-tree HEAD &&
150
case "`git diff-index HEAD -- foo`" in
151
:100644" "*"M foo") echo ok;;
152
*) echo fail; (exit 1);;
154
git add --refresh -- foo &&
155
test -z "`git diff-index HEAD -- foo`"