1#!/bin/sh
23
test_description='sparse checkout tests
45
* (tag: removed, master) removed
6| D sub/added
7* (HEAD, tag: top) modified and added
8| M init.t
9| A sub/added
10* (tag: init) init
11A init.t
12'
1314
. ./test-lib.sh
1516
test_expect_success 'setup' '
17cat >expected <<-\EOF &&
18100644 77f0ba1734ed79d12881f81b36ee134de6a3327b 0 init.t
19100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 sub/added
20EOF
21cat >expected.swt <<-\EOF &&
22H init.t
23H sub/added
24EOF
2526
test_commit init &&
27echo modified >>init.t &&
28mkdir sub &&
29touch sub/added &&
30git add init.t sub/added &&
31git commit -m "modified and added" &&
32git tag top &&
33git rm sub/added &&
34git commit -m removed &&
35git tag removed &&
36git checkout top &&
37git ls-files --stage >result &&
38test_cmp expected result
39'
4041
test_expect_success 'read-tree without .git/info/sparse-checkout' '
42git read-tree -m -u HEAD &&
43git ls-files --stage >result &&
44test_cmp expected result &&
45git ls-files -t >result &&
46test_cmp expected.swt result
47'
4849
test_expect_success 'read-tree with .git/info/sparse-checkout but disabled' '
50echo >.git/info/sparse-checkout
51git read-tree -m -u HEAD &&
52git ls-files -t >result &&
53test_cmp expected.swt result &&
54test -f init.t &&
55test -f sub/added
56'
5758
test_expect_success 'read-tree --no-sparse-checkout with empty .git/info/sparse-checkout and enabled' '
59git config core.sparsecheckout true &&
60echo >.git/info/sparse-checkout &&
61git read-tree --no-sparse-checkout -m -u HEAD &&
62git ls-files -t >result &&
63test_cmp expected.swt result &&
64test -f init.t &&
65test -f sub/added
66'
6768
test_expect_success 'read-tree with empty .git/info/sparse-checkout' '
69git config core.sparsecheckout true &&
70echo >.git/info/sparse-checkout &&
71test_must_fail git read-tree -m -u HEAD &&
72git ls-files --stage >result &&
73test_cmp expected result &&
74git ls-files -t >result &&
75test_cmp expected.swt result &&
76test -f init.t &&
77test -f sub/added
78'
7980
test_expect_success 'match directories with trailing slash' '
81cat >expected.swt-noinit <<-\EOF &&
82S init.t
83H sub/added
84EOF
8586
echo sub/ > .git/info/sparse-checkout &&
87git read-tree -m -u HEAD &&
88git ls-files -t > result &&
89test_cmp expected.swt-noinit result &&
90test ! -f init.t &&
91test -f sub/added
92'
9394
test_expect_failure 'match directories without trailing slash' '
95echo init.t >.git/info/sparse-checkout &&
96echo sub >>.git/info/sparse-checkout &&
97git read-tree -m -u HEAD &&
98git ls-files -t >result &&
99test_cmp expected.swt result &&
100test ! -f init.t &&
101test -f sub/added
102'
103104
test_expect_success 'checkout area changes' '
105cat >expected.swt-nosub <<-\EOF &&
106H init.t
107S sub/added
108EOF
109110
echo init.t >.git/info/sparse-checkout &&
111git read-tree -m -u HEAD &&
112git ls-files -t >result &&
113test_cmp expected.swt-nosub result &&
114test -f init.t &&
115test ! -f sub/added
116'
117118
test_expect_success 'read-tree updates worktree, absent case' '
119echo sub/added >.git/info/sparse-checkout &&
120git checkout -f top &&
121git read-tree -m -u HEAD^ &&
122test ! -f init.t
123'
124125
test_expect_success 'read-tree updates worktree, dirty case' '
126echo sub/added >.git/info/sparse-checkout &&
127git checkout -f top &&
128echo dirty >init.t &&
129git read-tree -m -u HEAD^ &&
130grep -q dirty init.t &&
131rm init.t
132'
133134
test_expect_success 'read-tree removes worktree, dirty case' '
135echo init.t >.git/info/sparse-checkout &&
136git checkout -f top &&
137echo dirty >added &&
138git read-tree -m -u HEAD^ &&
139grep -q dirty added
140'
141142
test_expect_success 'read-tree adds to worktree, absent case' '
143echo init.t >.git/info/sparse-checkout &&
144git checkout -f removed &&
145git read-tree -u -m HEAD^ &&
146test ! -f sub/added
147'
148149
test_expect_success 'read-tree adds to worktree, dirty case' '
150echo init.t >.git/info/sparse-checkout &&
151git checkout -f removed &&
152mkdir sub &&
153echo dirty >sub/added &&
154git read-tree -u -m HEAD^ &&
155grep -q dirty sub/added
156'
157158
test_expect_success 'index removal and worktree narrowing at the same time' '
159>empty &&
160echo init.t >.git/info/sparse-checkout &&
161echo sub/added >>.git/info/sparse-checkout &&
162git checkout -f top &&
163echo init.t >.git/info/sparse-checkout &&
164git checkout removed &&
165git ls-files sub/added >result &&
166test ! -f sub/added &&
167test_cmp empty result
168'
169170
test_expect_success 'read-tree --reset removes outside worktree' '
171>empty &&
172echo init.t >.git/info/sparse-checkout &&
173git checkout -f top &&
174git reset --hard removed &&
175git ls-files sub/added >result &&
176test_cmp empty result
177'
178179
test_done