]>
Commit | Line | Data |
---|---|---|
3e52f70b NTND |
1 | #!/bin/sh |
2 | ||
3 | test_description='split index mode tests' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | # We need total control of index splitting here | |
8 | sane_unset GIT_TEST_SPLIT_INDEX | |
9 | ||
10 | test_expect_success 'enable split index' ' | |
e6a1dd77 | 11 | git config splitIndex.maxPercentChange 100 && |
3e52f70b NTND |
12 | git update-index --split-index && |
13 | test-dump-split-index .git/index >actual && | |
e869c5ea TG |
14 | indexversion=$(test-index-version <.git/index) && |
15 | if test "$indexversion" = "4" | |
16 | then | |
17 | own=432ef4b63f32193984f339431fd50ca796493569 | |
18 | base=508851a7f0dfa8691e9f69c7f055865389012491 | |
19 | else | |
20 | own=8299b0bcd1ac364e5f1d7768efb62fa2da79a339 | |
21 | base=39d890139ee5356c7ef572216cebcd27aa41f9df | |
22 | fi && | |
56621763 CC |
23 | cat >expect <<-EOF && |
24 | own $own | |
25 | base $base | |
26 | replacements: | |
27 | deletions: | |
28 | EOF | |
3e52f70b NTND |
29 | test_cmp expect actual |
30 | ' | |
31 | ||
32 | test_expect_success 'add one file' ' | |
33 | : >one && | |
34 | git update-index --add one && | |
35 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
36 | cat >ls-files.expect <<-EOF && |
37 | 100644 $EMPTY_BLOB 0 one | |
38 | EOF | |
3e52f70b NTND |
39 | test_cmp ls-files.expect ls-files.actual && |
40 | ||
41 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
56621763 CC |
42 | cat >expect <<-EOF && |
43 | base $base | |
44 | 100644 $EMPTY_BLOB 0 one | |
45 | replacements: | |
46 | deletions: | |
47 | EOF | |
3e52f70b NTND |
48 | test_cmp expect actual |
49 | ' | |
50 | ||
51 | test_expect_success 'disable split index' ' | |
52 | git update-index --no-split-index && | |
53 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
54 | cat >ls-files.expect <<-EOF && |
55 | 100644 $EMPTY_BLOB 0 one | |
56 | EOF | |
3e52f70b NTND |
57 | test_cmp ls-files.expect ls-files.actual && |
58 | ||
16149d75 | 59 | BASE=$(test-dump-split-index .git/index | grep "^own" | sed "s/own/base/") && |
3e52f70b | 60 | test-dump-split-index .git/index | sed "/^own/d" >actual && |
56621763 CC |
61 | cat >expect <<-EOF && |
62 | not a split index | |
63 | EOF | |
3e52f70b NTND |
64 | test_cmp expect actual |
65 | ' | |
66 | ||
67 | test_expect_success 'enable split index again, "one" now belongs to base index"' ' | |
68 | git update-index --split-index && | |
69 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
70 | cat >ls-files.expect <<-EOF && |
71 | 100644 $EMPTY_BLOB 0 one | |
72 | EOF | |
3e52f70b NTND |
73 | test_cmp ls-files.expect ls-files.actual && |
74 | ||
75 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
56621763 CC |
76 | cat >expect <<-EOF && |
77 | $BASE | |
78 | replacements: | |
79 | deletions: | |
80 | EOF | |
3e52f70b NTND |
81 | test_cmp expect actual |
82 | ' | |
83 | ||
84 | test_expect_success 'modify original file, base index untouched' ' | |
85 | echo modified >one && | |
86 | git update-index one && | |
87 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
88 | cat >ls-files.expect <<-EOF && |
89 | 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one | |
90 | EOF | |
3e52f70b NTND |
91 | test_cmp ls-files.expect ls-files.actual && |
92 | ||
93 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
56621763 CC |
94 | q_to_tab >expect <<-EOF && |
95 | $BASE | |
96 | 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q | |
97 | replacements: 0 | |
98 | deletions: | |
99 | EOF | |
3e52f70b NTND |
100 | test_cmp expect actual |
101 | ' | |
102 | ||
103 | test_expect_success 'add another file, which stays index' ' | |
104 | : >two && | |
105 | git update-index --add two && | |
106 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
107 | cat >ls-files.expect <<-EOF && |
108 | 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one | |
109 | 100644 $EMPTY_BLOB 0 two | |
110 | EOF | |
3e52f70b NTND |
111 | test_cmp ls-files.expect ls-files.actual && |
112 | ||
113 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
56621763 CC |
114 | q_to_tab >expect <<-EOF && |
115 | $BASE | |
116 | 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q | |
117 | 100644 $EMPTY_BLOB 0 two | |
118 | replacements: 0 | |
119 | deletions: | |
120 | EOF | |
3e52f70b NTND |
121 | test_cmp expect actual |
122 | ' | |
123 | ||
124 | test_expect_success 'remove file not in base index' ' | |
125 | git update-index --force-remove two && | |
126 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
127 | cat >ls-files.expect <<-EOF && |
128 | 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one | |
129 | EOF | |
3e52f70b NTND |
130 | test_cmp ls-files.expect ls-files.actual && |
131 | ||
132 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
56621763 CC |
133 | q_to_tab >expect <<-EOF && |
134 | $BASE | |
135 | 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q | |
136 | replacements: 0 | |
137 | deletions: | |
138 | EOF | |
3e52f70b NTND |
139 | test_cmp expect actual |
140 | ' | |
141 | ||
142 | test_expect_success 'remove file in base index' ' | |
143 | git update-index --force-remove one && | |
144 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
145 | cat >ls-files.expect <<-EOF && |
146 | EOF | |
3e52f70b NTND |
147 | test_cmp ls-files.expect ls-files.actual && |
148 | ||
149 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
56621763 CC |
150 | cat >expect <<-EOF && |
151 | $BASE | |
152 | replacements: | |
153 | deletions: 0 | |
154 | EOF | |
3e52f70b NTND |
155 | test_cmp expect actual |
156 | ' | |
157 | ||
158 | test_expect_success 'add original file back' ' | |
159 | : >one && | |
160 | git update-index --add one && | |
161 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
162 | cat >ls-files.expect <<-EOF && |
163 | 100644 $EMPTY_BLOB 0 one | |
164 | EOF | |
3e52f70b NTND |
165 | test_cmp ls-files.expect ls-files.actual && |
166 | ||
167 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
56621763 CC |
168 | cat >expect <<-EOF && |
169 | $BASE | |
170 | 100644 $EMPTY_BLOB 0 one | |
171 | replacements: | |
172 | deletions: 0 | |
173 | EOF | |
3e52f70b NTND |
174 | test_cmp expect actual |
175 | ' | |
176 | ||
177 | test_expect_success 'add new file' ' | |
178 | : >two && | |
179 | git update-index --add two && | |
180 | git ls-files --stage >actual && | |
56621763 CC |
181 | cat >expect <<-EOF && |
182 | 100644 $EMPTY_BLOB 0 one | |
183 | 100644 $EMPTY_BLOB 0 two | |
184 | EOF | |
3e52f70b NTND |
185 | test_cmp expect actual |
186 | ' | |
187 | ||
188 | test_expect_success 'unify index, two files remain' ' | |
189 | git update-index --no-split-index && | |
190 | git ls-files --stage >ls-files.actual && | |
56621763 CC |
191 | cat >ls-files.expect <<-EOF && |
192 | 100644 $EMPTY_BLOB 0 one | |
193 | 100644 $EMPTY_BLOB 0 two | |
194 | EOF | |
8fb26872 | 195 | test_cmp ls-files.expect ls-files.actual && |
3e52f70b NTND |
196 | |
197 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
56621763 CC |
198 | cat >expect <<-EOF && |
199 | not a split index | |
200 | EOF | |
3e52f70b NTND |
201 | test_cmp expect actual |
202 | ' | |
203 | ||
098aa867 | 204 | test_expect_success 'rev-parse --shared-index-path' ' |
5de8a549 MR |
205 | test_create_repo split-index && |
206 | ( | |
207 | cd split-index && | |
208 | git update-index --split-index && | |
209 | echo .git/sharedindex* >expect && | |
210 | git rev-parse --shared-index-path >actual && | |
211 | test_cmp expect actual && | |
212 | mkdir subdirectory && | |
213 | cd subdirectory && | |
214 | echo ../.git/sharedindex* >expect && | |
215 | git rev-parse --shared-index-path >actual && | |
216 | test_cmp expect actual | |
217 | ) | |
218 | ' | |
219 | ||
b8923bf6 CC |
220 | test_expect_success 'set core.splitIndex config variable to true' ' |
221 | git config core.splitIndex true && | |
222 | : >three && | |
223 | git update-index --add three && | |
224 | git ls-files --stage >ls-files.actual && | |
225 | cat >ls-files.expect <<-EOF && | |
226 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one | |
227 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 three | |
228 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two | |
229 | EOF | |
230 | test_cmp ls-files.expect ls-files.actual && | |
231 | BASE=$(test-dump-split-index .git/index | grep "^base") && | |
232 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
233 | cat >expect <<-EOF && | |
234 | $BASE | |
235 | replacements: | |
236 | deletions: | |
237 | EOF | |
238 | test_cmp expect actual | |
239 | ' | |
240 | ||
241 | test_expect_success 'set core.splitIndex config variable to false' ' | |
242 | git config core.splitIndex false && | |
243 | git update-index --force-remove three && | |
244 | git ls-files --stage >ls-files.actual && | |
245 | cat >ls-files.expect <<-EOF && | |
246 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one | |
247 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two | |
248 | EOF | |
249 | test_cmp ls-files.expect ls-files.actual && | |
250 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
251 | cat >expect <<-EOF && | |
252 | not a split index | |
253 | EOF | |
254 | test_cmp expect actual | |
255 | ' | |
256 | ||
fcdbd954 CC |
257 | test_expect_success 'set core.splitIndex config variable to true' ' |
258 | git config core.splitIndex true && | |
259 | : >three && | |
260 | git update-index --add three && | |
261 | BASE=$(test-dump-split-index .git/index | grep "^base") && | |
262 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
263 | cat >expect <<-EOF && | |
264 | $BASE | |
265 | replacements: | |
266 | deletions: | |
267 | EOF | |
268 | test_cmp expect actual && | |
269 | : >four && | |
270 | git update-index --add four && | |
271 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
272 | cat >expect <<-EOF && | |
273 | $BASE | |
274 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 four | |
275 | replacements: | |
276 | deletions: | |
277 | EOF | |
278 | test_cmp expect actual | |
279 | ' | |
280 | ||
281 | test_expect_success 'check behavior with splitIndex.maxPercentChange unset' ' | |
282 | git config --unset splitIndex.maxPercentChange && | |
283 | : >five && | |
284 | git update-index --add five && | |
285 | BASE=$(test-dump-split-index .git/index | grep "^base") && | |
286 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
287 | cat >expect <<-EOF && | |
288 | $BASE | |
289 | replacements: | |
290 | deletions: | |
291 | EOF | |
292 | test_cmp expect actual && | |
293 | : >six && | |
294 | git update-index --add six && | |
295 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
296 | cat >expect <<-EOF && | |
297 | $BASE | |
298 | 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 six | |
299 | replacements: | |
300 | deletions: | |
301 | EOF | |
302 | test_cmp expect actual | |
303 | ' | |
304 | ||
305 | test_expect_success 'check splitIndex.maxPercentChange set to 0' ' | |
306 | git config splitIndex.maxPercentChange 0 && | |
307 | : >seven && | |
308 | git update-index --add seven && | |
309 | BASE=$(test-dump-split-index .git/index | grep "^base") && | |
310 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
311 | cat >expect <<-EOF && | |
312 | $BASE | |
313 | replacements: | |
314 | deletions: | |
315 | EOF | |
316 | test_cmp expect actual && | |
317 | : >eight && | |
318 | git update-index --add eight && | |
319 | BASE=$(test-dump-split-index .git/index | grep "^base") && | |
320 | test-dump-split-index .git/index | sed "/^own/d" >actual && | |
321 | cat >expect <<-EOF && | |
322 | $BASE | |
323 | replacements: | |
324 | deletions: | |
325 | EOF | |
326 | test_cmp expect actual | |
327 | ' | |
328 | ||
c0441f7e CC |
329 | test_expect_success 'shared index files expire after 2 weeks by default' ' |
330 | : >ten && | |
331 | git update-index --add ten && | |
c3a00825 | 332 | test $(ls .git/sharedindex.* | wc -l) -gt 2 && |
c0441f7e CC |
333 | just_under_2_weeks_ago=$((5-14*86400)) && |
334 | test-chmtime =$just_under_2_weeks_ago .git/sharedindex.* && | |
335 | : >eleven && | |
336 | git update-index --add eleven && | |
c3a00825 | 337 | test $(ls .git/sharedindex.* | wc -l) -gt 2 && |
c0441f7e CC |
338 | just_over_2_weeks_ago=$((-1-14*86400)) && |
339 | test-chmtime =$just_over_2_weeks_ago .git/sharedindex.* && | |
340 | : >twelve && | |
341 | git update-index --add twelve && | |
c3a00825 | 342 | test $(ls .git/sharedindex.* | wc -l) -le 2 |
c0441f7e CC |
343 | ' |
344 | ||
345 | test_expect_success 'check splitIndex.sharedIndexExpire set to 16 days' ' | |
346 | git config splitIndex.sharedIndexExpire "16.days.ago" && | |
347 | test-chmtime =$just_over_2_weeks_ago .git/sharedindex.* && | |
348 | : >thirteen && | |
349 | git update-index --add thirteen && | |
c3a00825 | 350 | test $(ls .git/sharedindex.* | wc -l) -gt 2 && |
c0441f7e CC |
351 | just_over_16_days_ago=$((-1-16*86400)) && |
352 | test-chmtime =$just_over_16_days_ago .git/sharedindex.* && | |
353 | : >fourteen && | |
354 | git update-index --add fourteen && | |
c3a00825 | 355 | test $(ls .git/sharedindex.* | wc -l) -le 2 |
c0441f7e CC |
356 | ' |
357 | ||
358 | test_expect_success 'check splitIndex.sharedIndexExpire set to "never" and "now"' ' | |
359 | git config splitIndex.sharedIndexExpire never && | |
360 | just_10_years_ago=$((-365*10*86400)) && | |
361 | test-chmtime =$just_10_years_ago .git/sharedindex.* && | |
362 | : >fifteen && | |
363 | git update-index --add fifteen && | |
c3a00825 | 364 | test $(ls .git/sharedindex.* | wc -l) -gt 2 && |
c0441f7e CC |
365 | git config splitIndex.sharedIndexExpire now && |
366 | just_1_second_ago=-1 && | |
367 | test-chmtime =$just_1_second_ago .git/sharedindex.* && | |
368 | : >sixteen && | |
369 | git update-index --add sixteen && | |
c3a00825 | 370 | test $(ls .git/sharedindex.* | wc -l) -le 2 |
c0441f7e CC |
371 | ' |
372 | ||
3e52f70b | 373 | test_done |