blob: 4f2f84f309cfdfed82f1ec60ed036e22885a69aa [file] [log] [blame]
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +07001#!/bin/sh
2
3test_description='split index mode tests'
4
5. ./test-lib.sh
6
7# We need total control of index splitting here
8sane_unset GIT_TEST_SPLIT_INDEX
Ben Peartc780b9c2018-10-10 11:59:35 -04009
10# Testing a hard coded SHA against an index with an extension
11# that can vary from run to run is problematic so we disable
12# those extensions.
Ben Peart4cb54d02018-09-18 23:29:35 +000013sane_unset GIT_TEST_FSMONITOR
Ben Peartc780b9c2018-10-10 11:59:35 -040014sane_unset GIT_TEST_INDEX_THREADS
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070015
SZEDER Gáborc6e56072018-10-11 11:43:06 +020016# Create a file named as $1 with content read from stdin.
17# Set the file's mtime to a few seconds in the past to avoid racy situations.
18create_non_racy_file () {
19 cat >"$1" &&
20 test-tool chmtime =-5 "$1"
21}
22
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070023test_expect_success 'enable split index' '
Christian Coudere6a1dd72017-02-27 19:00:08 +010024 git config splitIndex.maxPercentChange 100 &&
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070025 git update-index --split-index &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +010026 test-tool dump-split-index .git/index >actual &&
Nguyễn Thái Ngọc Duycc6f6632018-03-24 08:44:44 +010027 indexversion=$(test-tool index-version <.git/index) &&
Jonathan Niederd8465502018-11-19 22:11:47 -080028
29 # NEEDSWORK: Stop hard-coding checksums.
Thomas Gummerere869c5e2015-03-20 19:20:30 +010030 if test "$indexversion" = "4"
31 then
Jonathan Niederd8465502018-11-19 22:11:47 -080032 own=432ef4b63f32193984f339431fd50ca796493569
33 base=508851a7f0dfa8691e9f69c7f055865389012491
Thomas Gummerere869c5e2015-03-20 19:20:30 +010034 else
Jonathan Niederd8465502018-11-19 22:11:47 -080035 own=8299b0bcd1ac364e5f1d7768efb62fa2da79a339
36 base=39d890139ee5356c7ef572216cebcd27aa41f9df
Thomas Gummerere869c5e2015-03-20 19:20:30 +010037 fi &&
Jonathan Niederd8465502018-11-19 22:11:47 -080038
Christian Couder56621762017-02-27 18:59:59 +010039 cat >expect <<-EOF &&
40 own $own
41 base $base
42 replacements:
43 deletions:
44 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070045 test_cmp expect actual
46'
47
48test_expect_success 'add one file' '
SZEDER Gáborc6e56072018-10-11 11:43:06 +020049 create_non_racy_file one &&
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070050 git update-index --add one &&
51 git ls-files --stage >ls-files.actual &&
Christian Couder56621762017-02-27 18:59:59 +010052 cat >ls-files.expect <<-EOF &&
53 100644 $EMPTY_BLOB 0 one
54 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070055 test_cmp ls-files.expect ls-files.actual &&
56
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +010057 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +010058 cat >expect <<-EOF &&
59 base $base
60 100644 $EMPTY_BLOB 0 one
61 replacements:
62 deletions:
63 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070064 test_cmp expect actual
65'
66
67test_expect_success 'disable split index' '
68 git update-index --no-split-index &&
69 git ls-files --stage >ls-files.actual &&
Christian Couder56621762017-02-27 18:59:59 +010070 cat >ls-files.expect <<-EOF &&
71 100644 $EMPTY_BLOB 0 one
72 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070073 test_cmp ls-files.expect ls-files.actual &&
74
SZEDER Gáboracdee9e2018-09-06 04:48:06 +020075 BASE=$(test-tool dump-split-index .git/index | sed -n "s/^own/base/p") &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +010076 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +010077 cat >expect <<-EOF &&
78 not a split index
79 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070080 test_cmp expect actual
81'
82
83test_expect_success 'enable split index again, "one" now belongs to base index"' '
84 git update-index --split-index &&
85 git ls-files --stage >ls-files.actual &&
Christian Couder56621762017-02-27 18:59:59 +010086 cat >ls-files.expect <<-EOF &&
87 100644 $EMPTY_BLOB 0 one
88 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070089 test_cmp ls-files.expect ls-files.actual &&
90
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +010091 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +010092 cat >expect <<-EOF &&
93 $BASE
94 replacements:
95 deletions:
96 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +070097 test_cmp expect actual
98'
99
100test_expect_success 'modify original file, base index untouched' '
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200101 echo modified | create_non_racy_file one &&
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700102 git update-index one &&
103 git ls-files --stage >ls-files.actual &&
Christian Couder56621762017-02-27 18:59:59 +0100104 cat >ls-files.expect <<-EOF &&
105 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one
106 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700107 test_cmp ls-files.expect ls-files.actual &&
108
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100109 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +0100110 q_to_tab >expect <<-EOF &&
111 $BASE
112 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
113 replacements: 0
114 deletions:
115 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700116 test_cmp expect actual
117'
118
119test_expect_success 'add another file, which stays index' '
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200120 create_non_racy_file two &&
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700121 git update-index --add two &&
122 git ls-files --stage >ls-files.actual &&
Christian Couder56621762017-02-27 18:59:59 +0100123 cat >ls-files.expect <<-EOF &&
124 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one
125 100644 $EMPTY_BLOB 0 two
126 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700127 test_cmp ls-files.expect ls-files.actual &&
128
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100129 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +0100130 q_to_tab >expect <<-EOF &&
131 $BASE
132 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
133 100644 $EMPTY_BLOB 0 two
134 replacements: 0
135 deletions:
136 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700137 test_cmp expect actual
138'
139
140test_expect_success 'remove file not in base index' '
141 git update-index --force-remove two &&
142 git ls-files --stage >ls-files.actual &&
Christian Couder56621762017-02-27 18:59:59 +0100143 cat >ls-files.expect <<-EOF &&
144 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0 one
145 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700146 test_cmp ls-files.expect ls-files.actual &&
147
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100148 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +0100149 q_to_tab >expect <<-EOF &&
150 $BASE
151 100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
152 replacements: 0
153 deletions:
154 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700155 test_cmp expect actual
156'
157
158test_expect_success 'remove file in base index' '
159 git update-index --force-remove one &&
160 git ls-files --stage >ls-files.actual &&
SZEDER Gábor1c5e94f2018-08-19 23:57:25 +0200161 test_must_be_empty ls-files.actual &&
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700162
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100163 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +0100164 cat >expect <<-EOF &&
165 $BASE
166 replacements:
167 deletions: 0
168 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700169 test_cmp expect actual
170'
171
172test_expect_success 'add original file back' '
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200173 create_non_racy_file one &&
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700174 git update-index --add one &&
175 git ls-files --stage >ls-files.actual &&
Christian Couder56621762017-02-27 18:59:59 +0100176 cat >ls-files.expect <<-EOF &&
177 100644 $EMPTY_BLOB 0 one
178 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700179 test_cmp ls-files.expect ls-files.actual &&
180
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100181 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +0100182 cat >expect <<-EOF &&
183 $BASE
184 100644 $EMPTY_BLOB 0 one
185 replacements:
186 deletions: 0
187 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700188 test_cmp expect actual
189'
190
191test_expect_success 'add new file' '
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200192 create_non_racy_file two &&
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700193 git update-index --add two &&
194 git ls-files --stage >actual &&
Christian Couder56621762017-02-27 18:59:59 +0100195 cat >expect <<-EOF &&
196 100644 $EMPTY_BLOB 0 one
197 100644 $EMPTY_BLOB 0 two
198 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700199 test_cmp expect actual
200'
201
202test_expect_success 'unify index, two files remain' '
203 git update-index --no-split-index &&
204 git ls-files --stage >ls-files.actual &&
Christian Couder56621762017-02-27 18:59:59 +0100205 cat >ls-files.expect <<-EOF &&
206 100644 $EMPTY_BLOB 0 one
207 100644 $EMPTY_BLOB 0 two
208 EOF
Jeff King8fb26872015-03-20 06:06:15 -0400209 test_cmp ls-files.expect ls-files.actual &&
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700210
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100211 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couder56621762017-02-27 18:59:59 +0100212 cat >expect <<-EOF &&
213 not a split index
214 EOF
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700215 test_cmp expect actual
216'
217
Johannes Schindelin098aa862017-02-17 17:59:06 +0100218test_expect_success 'rev-parse --shared-index-path' '
Michael Rappazzo5de8a542017-02-17 17:59:02 +0100219 test_create_repo split-index &&
220 (
221 cd split-index &&
222 git update-index --split-index &&
223 echo .git/sharedindex* >expect &&
224 git rev-parse --shared-index-path >actual &&
225 test_cmp expect actual &&
226 mkdir subdirectory &&
227 cd subdirectory &&
228 echo ../.git/sharedindex* >expect &&
229 git rev-parse --shared-index-path >actual &&
230 test_cmp expect actual
231 )
232'
233
Christian Couderb8923bf2017-02-27 19:00:04 +0100234test_expect_success 'set core.splitIndex config variable to true' '
235 git config core.splitIndex true &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200236 create_non_racy_file three &&
Christian Couderb8923bf2017-02-27 19:00:04 +0100237 git update-index --add three &&
238 git ls-files --stage >ls-files.actual &&
239 cat >ls-files.expect <<-EOF &&
240 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one
241 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 three
242 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two
243 EOF
244 test_cmp ls-files.expect ls-files.actual &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100245 BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
246 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couderb8923bf2017-02-27 19:00:04 +0100247 cat >expect <<-EOF &&
248 $BASE
249 replacements:
250 deletions:
251 EOF
252 test_cmp expect actual
253'
254
255test_expect_success 'set core.splitIndex config variable to false' '
256 git config core.splitIndex false &&
257 git update-index --force-remove three &&
258 git ls-files --stage >ls-files.actual &&
259 cat >ls-files.expect <<-EOF &&
260 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one
261 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two
262 EOF
263 test_cmp ls-files.expect ls-files.actual &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100264 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couderb8923bf2017-02-27 19:00:04 +0100265 cat >expect <<-EOF &&
266 not a split index
267 EOF
268 test_cmp expect actual
269'
270
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200271test_expect_success 'set core.splitIndex config variable back to true' '
Christian Couderfcdbd952017-02-27 19:00:09 +0100272 git config core.splitIndex true &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200273 create_non_racy_file three &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100274 git update-index --add three &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100275 BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
276 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100277 cat >expect <<-EOF &&
278 $BASE
279 replacements:
280 deletions:
281 EOF
282 test_cmp expect actual &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200283 create_non_racy_file four &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100284 git update-index --add four &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100285 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100286 cat >expect <<-EOF &&
287 $BASE
288 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 four
289 replacements:
290 deletions:
291 EOF
292 test_cmp expect actual
293'
294
295test_expect_success 'check behavior with splitIndex.maxPercentChange unset' '
296 git config --unset splitIndex.maxPercentChange &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200297 create_non_racy_file five &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100298 git update-index --add five &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100299 BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
300 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100301 cat >expect <<-EOF &&
302 $BASE
303 replacements:
304 deletions:
305 EOF
306 test_cmp expect actual &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200307 create_non_racy_file six &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100308 git update-index --add six &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100309 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100310 cat >expect <<-EOF &&
311 $BASE
312 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 six
313 replacements:
314 deletions:
315 EOF
316 test_cmp expect actual
317'
318
319test_expect_success 'check splitIndex.maxPercentChange set to 0' '
320 git config splitIndex.maxPercentChange 0 &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200321 create_non_racy_file seven &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100322 git update-index --add seven &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100323 BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
324 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100325 cat >expect <<-EOF &&
326 $BASE
327 replacements:
328 deletions:
329 EOF
330 test_cmp expect actual &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200331 create_non_racy_file eight &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100332 git update-index --add eight &&
Nguyễn Thái Ngọc Duy81330612018-03-24 08:44:40 +0100333 BASE=$(test-tool dump-split-index .git/index | grep "^base") &&
334 test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
Christian Couderfcdbd952017-02-27 19:00:09 +0100335 cat >expect <<-EOF &&
336 $BASE
337 replacements:
338 deletions:
339 EOF
340 test_cmp expect actual
341'
342
Christian Couderc0441f72017-03-06 10:41:59 +0100343test_expect_success 'shared index files expire after 2 weeks by default' '
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200344 create_non_racy_file ten &&
Christian Couderc0441f72017-03-06 10:41:59 +0100345 git update-index --add ten &&
Christian Couderc3a00822017-03-06 10:42:01 +0100346 test $(ls .git/sharedindex.* | wc -l) -gt 2 &&
Christian Couderc0441f72017-03-06 10:41:59 +0100347 just_under_2_weeks_ago=$((5-14*86400)) &&
Nguyễn Thái Ngọc Duy0e496492018-03-24 08:44:31 +0100348 test-tool chmtime =$just_under_2_weeks_ago .git/sharedindex.* &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200349 create_non_racy_file eleven &&
Christian Couderc0441f72017-03-06 10:41:59 +0100350 git update-index --add eleven &&
Christian Couderc3a00822017-03-06 10:42:01 +0100351 test $(ls .git/sharedindex.* | wc -l) -gt 2 &&
Christian Couderc0441f72017-03-06 10:41:59 +0100352 just_over_2_weeks_ago=$((-1-14*86400)) &&
Nguyễn Thái Ngọc Duy0e496492018-03-24 08:44:31 +0100353 test-tool chmtime =$just_over_2_weeks_ago .git/sharedindex.* &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200354 create_non_racy_file twelve &&
Christian Couderc0441f72017-03-06 10:41:59 +0100355 git update-index --add twelve &&
Christian Couderc3a00822017-03-06 10:42:01 +0100356 test $(ls .git/sharedindex.* | wc -l) -le 2
Christian Couderc0441f72017-03-06 10:41:59 +0100357'
358
359test_expect_success 'check splitIndex.sharedIndexExpire set to 16 days' '
360 git config splitIndex.sharedIndexExpire "16.days.ago" &&
Nguyễn Thái Ngọc Duy0e496492018-03-24 08:44:31 +0100361 test-tool chmtime =$just_over_2_weeks_ago .git/sharedindex.* &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200362 create_non_racy_file thirteen &&
Christian Couderc0441f72017-03-06 10:41:59 +0100363 git update-index --add thirteen &&
Christian Couderc3a00822017-03-06 10:42:01 +0100364 test $(ls .git/sharedindex.* | wc -l) -gt 2 &&
Christian Couderc0441f72017-03-06 10:41:59 +0100365 just_over_16_days_ago=$((-1-16*86400)) &&
Nguyễn Thái Ngọc Duy0e496492018-03-24 08:44:31 +0100366 test-tool chmtime =$just_over_16_days_ago .git/sharedindex.* &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200367 create_non_racy_file fourteen &&
Christian Couderc0441f72017-03-06 10:41:59 +0100368 git update-index --add fourteen &&
Christian Couderc3a00822017-03-06 10:42:01 +0100369 test $(ls .git/sharedindex.* | wc -l) -le 2
Christian Couderc0441f72017-03-06 10:41:59 +0100370'
371
372test_expect_success 'check splitIndex.sharedIndexExpire set to "never" and "now"' '
373 git config splitIndex.sharedIndexExpire never &&
374 just_10_years_ago=$((-365*10*86400)) &&
Nguyễn Thái Ngọc Duy0e496492018-03-24 08:44:31 +0100375 test-tool chmtime =$just_10_years_ago .git/sharedindex.* &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200376 create_non_racy_file fifteen &&
Christian Couderc0441f72017-03-06 10:41:59 +0100377 git update-index --add fifteen &&
Christian Couderc3a00822017-03-06 10:42:01 +0100378 test $(ls .git/sharedindex.* | wc -l) -gt 2 &&
Christian Couderc0441f72017-03-06 10:41:59 +0100379 git config splitIndex.sharedIndexExpire now &&
380 just_1_second_ago=-1 &&
Nguyễn Thái Ngọc Duy0e496492018-03-24 08:44:31 +0100381 test-tool chmtime =$just_1_second_ago .git/sharedindex.* &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200382 create_non_racy_file sixteen &&
Christian Couderc0441f72017-03-06 10:41:59 +0100383 git update-index --add sixteen &&
Christian Couderc3a00822017-03-06 10:42:01 +0100384 test $(ls .git/sharedindex.* | wc -l) -le 2
Christian Couderc0441f72017-03-06 10:41:59 +0100385'
386
Ævar Arnfjörð Bjarmasonc9d6c782018-11-18 19:04:29 +0000387test_expect_success POSIXPERM 'same mode for index & split index' '
388 git init same-mode &&
389 (
390 cd same-mode &&
391 test_commit A &&
392 test_modebits .git/index >index_mode &&
393 test_must_fail git config core.sharedRepository &&
394 git -c core.splitIndex=true status &&
395 shared=$(ls .git/sharedindex.*) &&
396 case "$shared" in
397 *" "*)
398 # we have more than one???
399 false ;;
400 *)
401 test_modebits "$shared" >split_index_mode &&
402 test_cmp index_mode split_index_mode ;;
403 esac
404 )
405'
406
Christian Couder3ee83f42017-06-25 06:34:29 +0200407while read -r mode modebits
408do
409 test_expect_success POSIXPERM "split index respects core.sharedrepository $mode" '
410 # Remove existing shared index files
411 git config core.splitIndex false &&
412 git update-index --force-remove one &&
413 rm -f .git/sharedindex.* &&
414 # Create one new shared index file
415 git config core.sharedrepository "$mode" &&
416 git config core.splitIndex true &&
SZEDER Gáborc6e56072018-10-11 11:43:06 +0200417 create_non_racy_file one &&
Christian Couder3ee83f42017-06-25 06:34:29 +0200418 git update-index --add one &&
419 echo "$modebits" >expect &&
420 test_modebits .git/index >actual &&
421 test_cmp expect actual &&
422 shared=$(ls .git/sharedindex.*) &&
423 case "$shared" in
424 *" "*)
425 # we have more than one???
426 false ;;
427 *)
428 test_modebits "$shared" >actual &&
429 test_cmp expect actual ;;
430 esac
431 '
432done <<\EOF
4330666 -rw-rw-rw-
4340642 -rw-r---w-
435EOF
436
Nguyễn Thái Ngọc Duyef5b3a62018-01-24 16:38:29 +0700437test_expect_success POSIXPERM,SANITY 'graceful handling when splitting index is not allowed' '
438 test_create_repo ro &&
439 (
440 cd ro &&
441 test_commit initial &&
442 git update-index --split-index &&
443 test -f .git/sharedindex.*
444 ) &&
445 cp ro/.git/index new-index &&
446 test_when_finished "chmod u+w ro/.git" &&
447 chmod u-w ro/.git &&
448 GIT_INDEX_FILE="$(pwd)/new-index" git -C ro update-index --split-index &&
449 chmod u+w ro/.git &&
450 rm ro/.git/sharedindex.* &&
451 GIT_INDEX_FILE=new-index git ls-files >actual &&
452 echo initial.t >expected &&
453 test_cmp expected actual
454'
455
Thomas Gummerer4bddd982018-01-07 22:30:14 +0000456test_expect_success 'writing split index with null sha1 does not write cache tree' '
457 git config core.splitIndex true &&
458 git config splitIndex.maxPercentChange 0 &&
459 git commit -m "commit" &&
460 {
461 git ls-tree HEAD &&
brian m. carlson8125a582018-05-13 02:24:13 +0000462 printf "160000 commit $ZERO_OID\\tbroken\\n"
Thomas Gummerer4bddd982018-01-07 22:30:14 +0000463 } >broken-tree &&
464 echo "add broken entry" >msg &&
465
466 tree=$(git mktree <broken-tree) &&
467 test_tick &&
468 commit=$(git commit-tree $tree -p HEAD <msg) &&
469 git update-ref HEAD "$commit" &&
470 GIT_ALLOW_NULL_SHA1=1 git reset --hard &&
Eric Sunshine83279742018-07-01 20:23:41 -0400471 test_might_fail test-tool dump-cache-tree >cache-tree.out &&
Thomas Gummerer4bddd982018-01-07 22:30:14 +0000472 test_line_count = 0 cache-tree.out
473'
474
Nguyễn Thái Ngọc Duy6e37c8e2019-02-13 16:51:29 +0700475test_expect_success 'do not refresh null base index' '
476 test_create_repo merge &&
477 (
478 cd merge &&
479 test_commit initial &&
480 git checkout -b side-branch &&
481 test_commit extra &&
482 git checkout master &&
483 git update-index --split-index &&
484 test_commit more &&
485 # must not write a new shareindex, or we wont catch the problem
486 git -c splitIndex.maxPercentChange=100 merge --no-edit side-branch 2>err &&
487 # i.e. do not expect warnings like
488 # could not freshen shared index .../shareindex.00000...
489 test_must_be_empty err
490 )
491'
492
Nguyễn Thái Ngọc Duy3e52f702014-06-13 19:19:51 +0700493test_done