]>
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 && |
ace224ac | 77 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae | 78 | git ls-files --stage >result && |
d6b38f61 | 79 | test_cmp expected result && |
7f71a6ae | 80 | git ls-files -t >result && |
ace224ac DS |
81 | cat >expected.swt <<-\EOF && |
82 | S init.t | |
83 | S sub/added | |
84 | S sub/addedtoo | |
85 | S subsub/added | |
86 | EOF | |
d6b38f61 | 87 | test_cmp expected.swt result && |
ace224ac DS |
88 | ! test -f init.t && |
89 | ! test -f sub/added | |
d6b38f61 NTND |
90 | ' |
91 | ||
d6b38f61 | 92 | test_expect_success 'match directories with trailing slash' ' |
7f71a6ae JN |
93 | cat >expected.swt-noinit <<-\EOF && |
94 | S init.t | |
95 | H sub/added | |
d61ebbe8 | 96 | H sub/addedtoo |
ae3cdfe1 | 97 | S subsub/added |
7f71a6ae JN |
98 | EOF |
99 | ||
d6b38f61 | 100 | echo sub/ > .git/info/sparse-checkout && |
ea5070c9 | 101 | read_tree_u_must_succeed -m -u HEAD && |
d6b38f61 | 102 | git ls-files -t > result && |
7f71a6ae | 103 | test_cmp expected.swt-noinit result && |
d6b38f61 NTND |
104 | test ! -f init.t && |
105 | test -f sub/added | |
106 | ' | |
107 | ||
9037026d | 108 | test_expect_success 'match directories without trailing slash' ' |
d61ebbe8 | 109 | echo sub >.git/info/sparse-checkout && |
ea5070c9 | 110 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae | 111 | git ls-files -t >result && |
9037026d NTND |
112 | test_cmp expected.swt-noinit result && |
113 | test ! -f init.t && | |
114 | test -f sub/added | |
115 | ' | |
116 | ||
28911091 NTND |
117 | test_expect_success 'match directories with negated patterns' ' |
118 | cat >expected.swt-negation <<\EOF && | |
119 | S init.t | |
120 | S sub/added | |
121 | H sub/addedtoo | |
122 | S subsub/added | |
123 | EOF | |
124 | ||
125 | cat >.git/info/sparse-checkout <<\EOF && | |
126 | sub | |
127 | !sub/added | |
128 | EOF | |
129 | git read-tree -m -u HEAD && | |
130 | git ls-files -t >result && | |
131 | test_cmp expected.swt-negation result && | |
132 | test ! -f init.t && | |
133 | test ! -f sub/added && | |
134 | test -f sub/addedtoo | |
135 | ' | |
136 | ||
137 | test_expect_success 'match directories with negated patterns (2)' ' | |
138 | cat >expected.swt-negation2 <<\EOF && | |
139 | H init.t | |
140 | H sub/added | |
141 | S sub/addedtoo | |
142 | H subsub/added | |
143 | EOF | |
144 | ||
145 | cat >.git/info/sparse-checkout <<\EOF && | |
146 | /* | |
147 | !sub | |
148 | sub/added | |
149 | EOF | |
150 | git read-tree -m -u HEAD && | |
151 | git ls-files -t >result && | |
152 | test_cmp expected.swt-negation2 result && | |
153 | test -f init.t && | |
154 | test -f sub/added && | |
155 | test ! -f sub/addedtoo | |
156 | ' | |
157 | ||
9037026d | 158 | test_expect_success 'match directory pattern' ' |
d61ebbe8 | 159 | echo "s?b" >.git/info/sparse-checkout && |
ea5070c9 | 160 | read_tree_u_must_succeed -m -u HEAD && |
9037026d NTND |
161 | git ls-files -t >result && |
162 | test_cmp expected.swt-noinit result && | |
d6b38f61 NTND |
163 | test ! -f init.t && |
164 | test -f sub/added | |
165 | ' | |
166 | ||
d6b38f61 | 167 | test_expect_success 'checkout area changes' ' |
7f71a6ae JN |
168 | cat >expected.swt-nosub <<-\EOF && |
169 | H init.t | |
170 | S sub/added | |
d61ebbe8 | 171 | S sub/addedtoo |
ae3cdfe1 | 172 | S subsub/added |
7f71a6ae JN |
173 | EOF |
174 | ||
175 | echo init.t >.git/info/sparse-checkout && | |
ea5070c9 | 176 | read_tree_u_must_succeed -m -u HEAD && |
7f71a6ae JN |
177 | git ls-files -t >result && |
178 | test_cmp expected.swt-nosub result && | |
d6b38f61 NTND |
179 | test -f init.t && |
180 | test ! -f sub/added | |
181 | ' | |
182 | ||
183 | test_expect_success 'read-tree updates worktree, absent case' ' | |
7f71a6ae | 184 | echo sub/added >.git/info/sparse-checkout && |
d6b38f61 | 185 | git checkout -f top && |
ea5070c9 | 186 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
187 | test ! -f init.t |
188 | ' | |
189 | ||
190 | test_expect_success 'read-tree updates worktree, dirty case' ' | |
7f71a6ae | 191 | echo sub/added >.git/info/sparse-checkout && |
d6b38f61 | 192 | git checkout -f top && |
7f71a6ae | 193 | echo dirty >init.t && |
ea5070c9 | 194 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
195 | grep -q dirty init.t && |
196 | rm init.t | |
197 | ' | |
198 | ||
199 | test_expect_success 'read-tree removes worktree, dirty case' ' | |
7f71a6ae | 200 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 | 201 | git checkout -f top && |
7f71a6ae | 202 | echo dirty >added && |
ea5070c9 | 203 | read_tree_u_must_succeed -m -u HEAD^ && |
d6b38f61 NTND |
204 | grep -q dirty added |
205 | ' | |
206 | ||
207 | test_expect_success 'read-tree adds to worktree, absent case' ' | |
7f71a6ae | 208 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 | 209 | git checkout -f removed && |
ea5070c9 | 210 | read_tree_u_must_succeed -u -m HEAD^ && |
d6b38f61 NTND |
211 | test ! -f sub/added |
212 | ' | |
213 | ||
74da98f9 | 214 | test_expect_success 'read-tree adds to worktree, dirty case' ' |
7f71a6ae | 215 | echo init.t >.git/info/sparse-checkout && |
d6b38f61 NTND |
216 | git checkout -f removed && |
217 | mkdir sub && | |
7f71a6ae | 218 | echo dirty >sub/added && |
ea5070c9 | 219 | read_tree_u_must_succeed -u -m HEAD^ && |
d6b38f61 NTND |
220 | grep -q dirty sub/added |
221 | ' | |
222 | ||
eec3fc03 | 223 | test_expect_success 'index removal and worktree narrowing at the same time' ' |
eec3fc03 NTND |
224 | echo init.t >.git/info/sparse-checkout && |
225 | echo sub/added >>.git/info/sparse-checkout && | |
226 | git checkout -f top && | |
227 | echo init.t >.git/info/sparse-checkout && | |
228 | git checkout removed && | |
229 | git ls-files sub/added >result && | |
230 | test ! -f sub/added && | |
ed254710 | 231 | test_must_be_empty result |
eec3fc03 NTND |
232 | ' |
233 | ||
700e66d6 | 234 | test_expect_success 'read-tree --reset removes outside worktree' ' |
700e66d6 NTND |
235 | echo init.t >.git/info/sparse-checkout && |
236 | git checkout -f top && | |
237 | git reset --hard removed && | |
238 | git ls-files sub/added >result && | |
d3c6751b | 239 | test_must_be_empty result |
700e66d6 NTND |
240 | ' |
241 | ||
681c637b | 242 | test_expect_success 'print warnings when some worktree updates disabled' ' |
17d26a4d NTND |
243 | echo sub >.git/info/sparse-checkout && |
244 | git checkout -f init && | |
245 | mkdir sub && | |
246 | touch sub/added sub/addedtoo && | |
681c637b EN |
247 | # Use -q to suppress "Previous HEAD position" and "Head is now at" msgs |
248 | git checkout -q top 2>actual && | |
17d26a4d | 249 | cat >expected <<\EOF && |
681c637b | 250 | warning: The following paths were already present and thus not updated despite sparse patterns: |
17d26a4d NTND |
251 | sub/added |
252 | sub/addedtoo | |
681c637b EN |
253 | |
254 | After fixing the above paths, you may want to run `git sparse-checkout reapply`. | |
17d26a4d | 255 | EOF |
e5c1272c | 256 | test_i18ncmp expected actual |
17d26a4d NTND |
257 | ' |
258 | ||
08d595dc NTND |
259 | test_expect_success 'checkout without --ignore-skip-worktree-bits' ' |
260 | echo "*" >.git/info/sparse-checkout && | |
261 | git checkout -f top && | |
262 | test_path_is_file init.t && | |
263 | echo sub >.git/info/sparse-checkout && | |
264 | git checkout && | |
265 | echo modified >> sub/added && | |
266 | git checkout . && | |
267 | test_path_is_missing init.t && | |
268 | git diff --exit-code HEAD | |
269 | ' | |
270 | ||
271 | test_expect_success 'checkout with --ignore-skip-worktree-bits' ' | |
272 | echo "*" >.git/info/sparse-checkout && | |
273 | git checkout -f top && | |
274 | test_path_is_file init.t && | |
275 | echo sub >.git/info/sparse-checkout && | |
276 | git checkout && | |
277 | echo modified >> sub/added && | |
278 | git checkout --ignore-skip-worktree-bits . && | |
279 | test_path_is_file init.t && | |
280 | git diff --exit-code HEAD | |
281 | ' | |
282 | ||
d6b38f61 | 283 | test_done |