]>
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' ' |
d47125d4 | 18 | test_commit init && |
19 | echo modified >>init.t && | |
20 | ||
378932d3 | 21 | cat >expected <<-EOF && |
d47125d4 | 22 | 100644 $(git hash-object init.t) 0 init.t |
378932d3 NTND |
23 | 100644 $EMPTY_BLOB 0 sub/added |
24 | 100644 $EMPTY_BLOB 0 sub/addedtoo | |
25 | 100644 $EMPTY_BLOB 0 subsub/added | |
7f71a6ae JN |
26 | EOF |
27 | cat >expected.swt <<-\EOF && | |
28 | H init.t | |
29 | H sub/added | |
d61ebbe8 | 30 | H sub/addedtoo |
ae3cdfe1 | 31 | H subsub/added |
7f71a6ae JN |
32 | EOF |
33 | ||
ae3cdfe1 | 34 | mkdir sub subsub && |
d61ebbe8 NTND |
35 | touch sub/added sub/addedtoo subsub/added && |
36 | git add init.t sub/added sub/addedtoo subsub/added && | |
d6b38f61 NTND |
37 | git commit -m "modified and added" && |
38 | git tag top && | |
39 | git rm sub/added && | |
40 | git commit -m removed && | |
41 | git tag removed && | |
42 | git checkout top && | |
7f71a6ae | 43 | git ls-files --stage >result && |
d6b38f61 NTND |
44 | test_cmp expected result |
45 | ' | |
46 | ||
d6b38f61 | 47 | test_expect_success 'read-tree without .git/info/sparse-checkout' ' |
ea5070c9 | 48 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae | 49 | git ls-files --stage >result && |
d6b38f61 | 50 | test_cmp expected result && |
7f71a6ae | 51 | git ls-files -t >result && |
d6b38f61 NTND |
52 | test_cmp expected.swt result |
53 | ' | |
54 | ||
55 | test_expect_success 'read-tree with .git/info/sparse-checkout but disabled' ' | |
a48fcd83 | 56 | echo >.git/info/sparse-checkout && |
ea5070c9 | 57 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae | 58 | git ls-files -t >result && |
d6b38f61 NTND |
59 | test_cmp expected.swt result && |
60 | test -f init.t && | |
61 | test -f sub/added | |
62 | ' | |
63 | ||
64 | test_expect_success 'read-tree --no-sparse-checkout with empty .git/info/sparse-checkout and enabled' ' | |
65 | git config core.sparsecheckout true && | |
7f71a6ae | 66 | echo >.git/info/sparse-checkout && |
ea5070c9 | 67 | read_tree_u_must_succeed --no-sparse-checkout -m -u HEAD && |
7f71a6ae | 68 | git ls-files -t >result && |
d6b38f61 NTND |
69 | test_cmp expected.swt result && |
70 | test -f init.t && | |
71 | test -f sub/added | |
72 | ' | |
73 | ||
d6b38f61 NTND |
74 | test_expect_success 'read-tree with empty .git/info/sparse-checkout' ' |
75 | git config core.sparsecheckout true && | |
7f71a6ae | 76 | echo >.git/info/sparse-checkout && |
ea5070c9 | 77 | read_tree_u_must_fail -m -u HEAD && |
7f71a6ae | 78 | git ls-files --stage >result && |
d6b38f61 | 79 | test_cmp expected result && |
7f71a6ae | 80 | git ls-files -t >result && |
d6b38f61 | 81 | test_cmp expected.swt result && |
9e1afb16 NTND |
82 | test -f init.t && |
83 | test -f sub/added | |
d6b38f61 NTND |
84 | ' |
85 | ||
d6b38f61 | 86 | test_expect_success 'match directories with trailing slash' ' |
7f71a6ae JN |
87 | cat >expected.swt-noinit <<-\EOF && |
88 | S init.t | |
89 | H sub/added | |
d61ebbe8 | 90 | H sub/addedtoo |
ae3cdfe1 | 91 | S subsub/added |
7f71a6ae JN |
92 | EOF |
93 | ||
d6b38f61 | 94 | echo sub/ > .git/info/sparse-checkout && |
ea5070c9 | 95 | read_tree_u_must_succeed -m -u HEAD && |
d6b38f61 | 96 | git ls-files -t > result && |
7f71a6ae | 97 | test_cmp expected.swt-noinit result && |
d6b38f61 NTND |
98 | test ! -f init.t && |
99 | test -f sub/added | |
100 | ' | |
101 | ||
9037026d | 102 | test_expect_success 'match directories without trailing slash' ' |
d61ebbe8 | 103 | echo sub >.git/info/sparse-checkout && |
ea5070c9 | 104 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae | 105 | git ls-files -t >result && |
9037026d NTND |
106 | test_cmp expected.swt-noinit result && |
107 | test ! -f init.t && | |
108 | test -f sub/added | |
109 | ' | |
110 | ||
28911091 NTND |
111 | test_expect_success 'match directories with negated patterns' ' |
112 | cat >expected.swt-negation <<\EOF && | |
113 | S init.t | |
114 | S sub/added | |
115 | H sub/addedtoo | |
116 | S subsub/added | |
117 | EOF | |
118 | ||
119 | cat >.git/info/sparse-checkout <<\EOF && | |
120 | sub | |
121 | !sub/added | |
122 | EOF | |
123 | git read-tree -m -u HEAD && | |
124 | git ls-files -t >result && | |
125 | test_cmp expected.swt-negation result && | |
126 | test ! -f init.t && | |
127 | test ! -f sub/added && | |
128 | test -f sub/addedtoo | |
129 | ' | |
130 | ||
131 | test_expect_success 'match directories with negated patterns (2)' ' | |
132 | cat >expected.swt-negation2 <<\EOF && | |
133 | H init.t | |
134 | H sub/added | |
135 | S sub/addedtoo | |
136 | H subsub/added | |
137 | EOF | |
138 | ||
139 | cat >.git/info/sparse-checkout <<\EOF && | |
140 | /* | |
141 | !sub | |
142 | sub/added | |
143 | EOF | |
144 | git read-tree -m -u HEAD && | |
145 | git ls-files -t >result && | |
146 | test_cmp expected.swt-negation2 result && | |
147 | test -f init.t && | |
148 | test -f sub/added && | |
149 | test ! -f sub/addedtoo | |
150 | ' | |
151 | ||
9037026d | 152 | test_expect_success 'match directory pattern' ' |
d61ebbe8 | 153 | echo "s?b" >.git/info/sparse-checkout && |
ea5070c9 | 154 | read_tree_u_must_succeed -m -u HEAD && |
9037026d NTND |
155 | git ls-files -t >result && |
156 | test_cmp expected.swt-noinit result && | |
d6b38f61 NTND |
157 | test ! -f init.t && |
158 | test -f sub/added | |
159 | ' | |
160 | ||
d6b38f61 | 161 | test_expect_success 'checkout area changes' ' |
7f71a6ae JN |
162 | cat >expected.swt-nosub <<-\EOF && |
163 | H init.t | |
164 | S sub/added | |
d61ebbe8 | 165 | S sub/addedtoo |
ae3cdfe1 | 166 | S subsub/added |
7f71a6ae JN |
167 | EOF |
168 | ||
169 | echo init.t >.git/info/sparse-checkout && | |
ea5070c9 | 170 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae JN |
171 | git ls-files -t >result && |
172 | test_cmp expected.swt-nosub result && | |
d6b38f61 NTND |
173 | test -f init.t && |
174 | test ! -f sub/added | |
175 | ' | |
176 | ||
177 | test_expect_success 'read-tree updates worktree, absent case' ' | |
7f71a6ae | 178 | echo sub/added >.git/info/sparse-checkout && |
d6b38f61 | 179 | git checkout -f top && |
ea5070c9 | 180 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
181 | test ! -f init.t |
182 | ' | |
183 | ||
184 | test_expect_success 'read-tree updates worktree, dirty case' ' | |
7f71a6ae | 185 | echo sub/added >.git/info/sparse-checkout && |
d6b38f61 | 186 | git checkout -f top && |
7f71a6ae | 187 | echo dirty >init.t && |
ea5070c9 | 188 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
189 | grep -q dirty init.t && |
190 | rm init.t | |
191 | ' | |
192 | ||
193 | test_expect_success 'read-tree removes worktree, dirty case' ' | |
7f71a6ae | 194 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 | 195 | git checkout -f top && |
7f71a6ae | 196 | echo dirty >added && |
ea5070c9 | 197 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
198 | grep -q dirty added |
199 | ' | |
200 | ||
201 | test_expect_success 'read-tree adds to worktree, absent case' ' | |
7f71a6ae | 202 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 | 203 | git checkout -f removed && |
ea5070c9 | 204 | read_tree_u_must_succeed -u -m HEAD^ && |
d6b38f61 NTND |
205 | test ! -f sub/added |
206 | ' | |
207 | ||
74da98f9 | 208 | test_expect_success 'read-tree adds to worktree, dirty case' ' |
7f71a6ae | 209 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 NTND |
210 | git checkout -f removed && |
211 | mkdir sub && | |
7f71a6ae | 212 | echo dirty >sub/added && |
ea5070c9 | 213 | read_tree_u_must_succeed -u -m HEAD^ && |
d6b38f61 NTND |
214 | grep -q dirty sub/added |
215 | ' | |
216 | ||
eec3fc03 NTND |
217 | test_expect_success 'index removal and worktree narrowing at the same time' ' |
218 | >empty && | |
219 | echo init.t >.git/info/sparse-checkout && | |
220 | echo sub/added >>.git/info/sparse-checkout && | |
221 | git checkout -f top && | |
222 | echo init.t >.git/info/sparse-checkout && | |
223 | git checkout removed && | |
224 | git ls-files sub/added >result && | |
225 | test ! -f sub/added && | |
226 | test_cmp empty result | |
227 | ' | |
228 | ||
700e66d6 | 229 | test_expect_success 'read-tree --reset removes outside worktree' ' |
700e66d6 NTND |
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 && | |
d3c6751b | 234 | test_must_be_empty result |
700e66d6 NTND |
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 | |
c2691e2a | 247 | Please move or remove them before you switch branches. |
08ec3b5e | 248 | Aborting |
17d26a4d | 249 | EOF |
e5c1272c | 250 | test_i18ncmp expected actual |
17d26a4d NTND |
251 | ' |
252 | ||
08d595dc NTND |
253 | test_expect_success 'checkout without --ignore-skip-worktree-bits' ' |
254 | echo "*" >.git/info/sparse-checkout && | |
255 | git checkout -f top && | |
256 | test_path_is_file init.t && | |
257 | echo sub >.git/info/sparse-checkout && | |
258 | git checkout && | |
259 | echo modified >> sub/added && | |
260 | git checkout . && | |
261 | test_path_is_missing init.t && | |
262 | git diff --exit-code HEAD | |
263 | ' | |
264 | ||
265 | test_expect_success 'checkout with --ignore-skip-worktree-bits' ' | |
266 | echo "*" >.git/info/sparse-checkout && | |
267 | git checkout -f top && | |
268 | test_path_is_file init.t && | |
269 | echo sub >.git/info/sparse-checkout && | |
270 | git checkout && | |
271 | echo modified >> sub/added && | |
272 | git checkout --ignore-skip-worktree-bits . && | |
273 | test_path_is_file init.t && | |
274 | git diff --exit-code HEAD | |
275 | ' | |
276 | ||
d6b38f61 | 277 | test_done |