]>
Commit | Line | Data |
---|---|---|
d6b38f61 NTND |
1 | #!/bin/sh |
2 | ||
7f71a6ae JN |
3 | test_description='sparse checkout tests |
4 | ||
5 | * (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 | |
11 | A init.t | |
12 | ' | |
d6b38f61 NTND |
13 | |
14 | . ./test-lib.sh | |
ea5070c9 | 15 | . "$TEST_DIRECTORY"/lib-read-tree.sh |
d6b38f61 | 16 | |
d6b38f61 | 17 | test_expect_success 'setup' ' |
7f71a6ae JN |
18 | cat >expected <<-\EOF && |
19 | 100644 77f0ba1734ed79d12881f81b36ee134de6a3327b 0 init.t | |
20 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 sub/added | |
d61ebbe8 | 21 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 sub/addedtoo |
ae3cdfe1 | 22 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 subsub/added |
7f71a6ae JN |
23 | EOF |
24 | cat >expected.swt <<-\EOF && | |
25 | H init.t | |
26 | H sub/added | |
d61ebbe8 | 27 | H sub/addedtoo |
ae3cdfe1 | 28 | H subsub/added |
7f71a6ae JN |
29 | EOF |
30 | ||
d6b38f61 | 31 | test_commit init && |
7f71a6ae | 32 | echo modified >>init.t && |
ae3cdfe1 | 33 | mkdir sub subsub && |
d61ebbe8 NTND |
34 | touch sub/added sub/addedtoo subsub/added && |
35 | git add init.t sub/added sub/addedtoo subsub/added && | |
d6b38f61 NTND |
36 | git commit -m "modified and added" && |
37 | git tag top && | |
38 | git rm sub/added && | |
39 | git commit -m removed && | |
40 | git tag removed && | |
41 | git checkout top && | |
7f71a6ae | 42 | git ls-files --stage >result && |
d6b38f61 NTND |
43 | test_cmp expected result |
44 | ' | |
45 | ||
d6b38f61 | 46 | test_expect_success 'read-tree without .git/info/sparse-checkout' ' |
ea5070c9 | 47 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae | 48 | git ls-files --stage >result && |
d6b38f61 | 49 | test_cmp expected result && |
7f71a6ae | 50 | git ls-files -t >result && |
d6b38f61 NTND |
51 | test_cmp expected.swt result |
52 | ' | |
53 | ||
54 | test_expect_success 'read-tree with .git/info/sparse-checkout but disabled' ' | |
a48fcd83 | 55 | echo >.git/info/sparse-checkout && |
ea5070c9 | 56 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae | 57 | git ls-files -t >result && |
d6b38f61 NTND |
58 | test_cmp expected.swt result && |
59 | test -f init.t && | |
60 | test -f sub/added | |
61 | ' | |
62 | ||
63 | test_expect_success 'read-tree --no-sparse-checkout with empty .git/info/sparse-checkout and enabled' ' | |
64 | git config core.sparsecheckout true && | |
7f71a6ae | 65 | echo >.git/info/sparse-checkout && |
ea5070c9 | 66 | read_tree_u_must_succeed --no-sparse-checkout -m -u HEAD && |
7f71a6ae | 67 | git ls-files -t >result && |
d6b38f61 NTND |
68 | test_cmp expected.swt result && |
69 | test -f init.t && | |
70 | test -f sub/added | |
71 | ' | |
72 | ||
d6b38f61 NTND |
73 | test_expect_success 'read-tree with empty .git/info/sparse-checkout' ' |
74 | git config core.sparsecheckout true && | |
7f71a6ae | 75 | echo >.git/info/sparse-checkout && |
ea5070c9 | 76 | read_tree_u_must_fail -m -u HEAD && |
7f71a6ae | 77 | git ls-files --stage >result && |
d6b38f61 | 78 | test_cmp expected result && |
7f71a6ae | 79 | git ls-files -t >result && |
d6b38f61 | 80 | test_cmp expected.swt result && |
9e1afb16 NTND |
81 | test -f init.t && |
82 | test -f sub/added | |
d6b38f61 NTND |
83 | ' |
84 | ||
d6b38f61 | 85 | test_expect_success 'match directories with trailing slash' ' |
7f71a6ae JN |
86 | cat >expected.swt-noinit <<-\EOF && |
87 | S init.t | |
88 | H sub/added | |
d61ebbe8 | 89 | H sub/addedtoo |
ae3cdfe1 | 90 | S subsub/added |
7f71a6ae JN |
91 | EOF |
92 | ||
d6b38f61 | 93 | echo sub/ > .git/info/sparse-checkout && |
ea5070c9 | 94 | read_tree_u_must_succeed -m -u HEAD && |
d6b38f61 | 95 | git ls-files -t > result && |
7f71a6ae | 96 | test_cmp expected.swt-noinit result && |
d6b38f61 NTND |
97 | test ! -f init.t && |
98 | test -f sub/added | |
99 | ' | |
100 | ||
9037026d | 101 | test_expect_success 'match directories without trailing slash' ' |
d61ebbe8 | 102 | echo sub >.git/info/sparse-checkout && |
ea5070c9 | 103 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae | 104 | git ls-files -t >result && |
9037026d NTND |
105 | test_cmp expected.swt-noinit result && |
106 | test ! -f init.t && | |
107 | test -f sub/added | |
108 | ' | |
109 | ||
28911091 NTND |
110 | test_expect_success 'match directories with negated patterns' ' |
111 | cat >expected.swt-negation <<\EOF && | |
112 | S init.t | |
113 | S sub/added | |
114 | H sub/addedtoo | |
115 | S subsub/added | |
116 | EOF | |
117 | ||
118 | cat >.git/info/sparse-checkout <<\EOF && | |
119 | sub | |
120 | !sub/added | |
121 | EOF | |
122 | git read-tree -m -u HEAD && | |
123 | git ls-files -t >result && | |
124 | test_cmp expected.swt-negation result && | |
125 | test ! -f init.t && | |
126 | test ! -f sub/added && | |
127 | test -f sub/addedtoo | |
128 | ' | |
129 | ||
130 | test_expect_success 'match directories with negated patterns (2)' ' | |
131 | cat >expected.swt-negation2 <<\EOF && | |
132 | H init.t | |
133 | H sub/added | |
134 | S sub/addedtoo | |
135 | H subsub/added | |
136 | EOF | |
137 | ||
138 | cat >.git/info/sparse-checkout <<\EOF && | |
139 | /* | |
140 | !sub | |
141 | sub/added | |
142 | EOF | |
143 | git read-tree -m -u HEAD && | |
144 | git ls-files -t >result && | |
145 | test_cmp expected.swt-negation2 result && | |
146 | test -f init.t && | |
147 | test -f sub/added && | |
148 | test ! -f sub/addedtoo | |
149 | ' | |
150 | ||
9037026d | 151 | test_expect_success 'match directory pattern' ' |
d61ebbe8 | 152 | echo "s?b" >.git/info/sparse-checkout && |
ea5070c9 | 153 | read_tree_u_must_succeed -m -u HEAD && |
9037026d NTND |
154 | git ls-files -t >result && |
155 | test_cmp expected.swt-noinit result && | |
d6b38f61 NTND |
156 | test ! -f init.t && |
157 | test -f sub/added | |
158 | ' | |
159 | ||
d6b38f61 | 160 | test_expect_success 'checkout area changes' ' |
7f71a6ae JN |
161 | cat >expected.swt-nosub <<-\EOF && |
162 | H init.t | |
163 | S sub/added | |
d61ebbe8 | 164 | S sub/addedtoo |
ae3cdfe1 | 165 | S subsub/added |
7f71a6ae JN |
166 | EOF |
167 | ||
168 | echo init.t >.git/info/sparse-checkout && | |
ea5070c9 | 169 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae JN |
170 | git ls-files -t >result && |
171 | test_cmp expected.swt-nosub result && | |
d6b38f61 NTND |
172 | test -f init.t && |
173 | test ! -f sub/added | |
174 | ' | |
175 | ||
176 | test_expect_success 'read-tree updates worktree, absent case' ' | |
7f71a6ae | 177 | echo sub/added >.git/info/sparse-checkout && |
d6b38f61 | 178 | git checkout -f top && |
ea5070c9 | 179 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
180 | test ! -f init.t |
181 | ' | |
182 | ||
183 | test_expect_success 'read-tree updates worktree, dirty case' ' | |
7f71a6ae | 184 | echo sub/added >.git/info/sparse-checkout && |
d6b38f61 | 185 | git checkout -f top && |
7f71a6ae | 186 | echo dirty >init.t && |
ea5070c9 | 187 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
188 | grep -q dirty init.t && |
189 | rm init.t | |
190 | ' | |
191 | ||
192 | test_expect_success 'read-tree removes worktree, dirty case' ' | |
7f71a6ae | 193 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 | 194 | git checkout -f top && |
7f71a6ae | 195 | echo dirty >added && |
ea5070c9 | 196 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
197 | grep -q dirty added |
198 | ' | |
199 | ||
200 | test_expect_success 'read-tree adds to worktree, absent case' ' | |
7f71a6ae | 201 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 | 202 | git checkout -f removed && |
ea5070c9 | 203 | read_tree_u_must_succeed -u -m HEAD^ && |
d6b38f61 NTND |
204 | test ! -f sub/added |
205 | ' | |
206 | ||
74da98f9 | 207 | test_expect_success 'read-tree adds to worktree, dirty case' ' |
7f71a6ae | 208 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 NTND |
209 | git checkout -f removed && |
210 | mkdir sub && | |
7f71a6ae | 211 | echo dirty >sub/added && |
ea5070c9 | 212 | read_tree_u_must_succeed -u -m HEAD^ && |
d6b38f61 NTND |
213 | grep -q dirty sub/added |
214 | ' | |
215 | ||
eec3fc03 NTND |
216 | test_expect_success 'index removal and worktree narrowing at the same time' ' |
217 | >empty && | |
218 | echo init.t >.git/info/sparse-checkout && | |
219 | echo sub/added >>.git/info/sparse-checkout && | |
220 | git checkout -f top && | |
221 | echo init.t >.git/info/sparse-checkout && | |
222 | git checkout removed && | |
223 | git ls-files sub/added >result && | |
224 | test ! -f sub/added && | |
225 | test_cmp empty result | |
226 | ' | |
227 | ||
700e66d6 NTND |
228 | test_expect_success 'read-tree --reset removes outside worktree' ' |
229 | >empty && | |
230 | echo init.t >.git/info/sparse-checkout && | |
231 | git checkout -f top && | |
232 | git reset --hard removed && | |
233 | git ls-files sub/added >result && | |
234 | test_cmp empty result | |
235 | ' | |
236 | ||
17d26a4d NTND |
237 | test_expect_success 'print errors when failed to update worktree' ' |
238 | echo sub >.git/info/sparse-checkout && | |
239 | git checkout -f init && | |
240 | mkdir sub && | |
241 | touch sub/added sub/addedtoo && | |
242 | test_must_fail git checkout top 2>actual && | |
243 | cat >expected <<\EOF && | |
244 | error: The following untracked working tree files would be overwritten by checkout: | |
245 | sub/added | |
246 | sub/addedtoo | |
247 | Please move or remove them before you can switch branches. | |
08ec3b5e | 248 | Aborting |
17d26a4d NTND |
249 | EOF |
250 | test_cmp expected actual | |
251 | ' | |
252 | ||
d6b38f61 | 253 | test_done |