]> git.ipfire.org Git - thirdparty/git.git/blame - t/t1011-read-tree-sparse-checkout.sh
Merge branch 'ab/detox-gettext-tests'
[thirdparty/git.git] / t / t1011-read-tree-sparse-checkout.sh
CommitLineData
d6b38f61
NTND
1#!/bin/sh
2
7f71a6ae
JN
3test_description='sparse checkout tests
4
06d53148 5* (tag: removed, main) removed
7f71a6ae
JN
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 17test_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 47test_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
55test_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
64test_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
74test_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 92test_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 108test_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
117test_expect_success 'match directories with negated patterns' '
118 cat >expected.swt-negation <<\EOF &&
119S init.t
120S sub/added
121H sub/addedtoo
122S subsub/added
123EOF
124
125 cat >.git/info/sparse-checkout <<\EOF &&
126sub
127!sub/added
128EOF
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
137test_expect_success 'match directories with negated patterns (2)' '
138 cat >expected.swt-negation2 <<\EOF &&
139H init.t
140H sub/added
141S sub/addedtoo
142H subsub/added
143EOF
144
145 cat >.git/info/sparse-checkout <<\EOF &&
146/*
147!sub
148sub/added
149EOF
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 158test_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 167test_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
183test_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
190test_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
199test_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
207test_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 214test_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 223test_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 234test_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 242test_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 250warning: The following paths were already present and thus not updated despite sparse patterns:
17d26a4d
NTND
251 sub/added
252 sub/addedtoo
681c637b
EN
253
254After fixing the above paths, you may want to run `git sparse-checkout reapply`.
17d26a4d 255EOF
1108cea7 256 test_cmp expected actual
17d26a4d
NTND
257'
258
08d595dc
NTND
259test_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
271test_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 283test_done