@@ -9,134 +9,7 @@ test_description='exercise basic multi-pack bitmap functionality'
9
9
GIT_TEST_MULTI_PACK_INDEX=0
10
10
GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0
11
11
12
- objdir=.git/objects
13
- midx=$objdir /pack/multi-pack-index
14
-
15
- # midx_pack_source <obj>
16
- midx_pack_source () {
17
- test-tool read-midx --show-objects .git/objects | grep " ^$1 " | cut -f2
18
- }
19
-
20
- test_rev_exists () {
21
- commit=" $1 "
22
-
23
- test_expect_success ' reverse index exists' '
24
- GIT_TRACE2_EVENT=$(pwd)/event.trace \
25
- git rev-list --test-bitmap "$commit" &&
26
-
27
- test_path_is_file $midx-$(midx_checksum $objdir).rev &&
28
- grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"rev\"" event.trace
29
- '
30
- }
31
-
32
- setup_bitmap_history
33
-
34
- test_expect_success ' create single-pack midx with bitmaps' '
35
- git repack -ad &&
36
- git multi-pack-index write --bitmap &&
37
- test_path_is_file $midx &&
38
- test_path_is_file $midx-$(midx_checksum $objdir).bitmap
39
- '
40
-
41
- test_rev_exists HEAD
42
-
43
- basic_bitmap_tests
44
-
45
- test_expect_success ' create new additional packs' '
46
- for i in $(test_seq 1 16)
47
- do
48
- test_commit "$i" &&
49
- git repack -d || return 1
50
- done &&
51
-
52
- git checkout -b other2 HEAD~8 &&
53
- for i in $(test_seq 1 8)
54
- do
55
- test_commit "side-$i" &&
56
- git repack -d || return 1
57
- done &&
58
- git checkout second
59
- '
60
-
61
- test_expect_success ' create multi-pack midx with bitmaps' '
62
- git multi-pack-index write --bitmap &&
63
-
64
- ls $objdir/pack/pack-*.pack >packs &&
65
- test_line_count = 25 packs &&
66
-
67
- test_path_is_file $midx &&
68
- test_path_is_file $midx-$(midx_checksum $objdir).bitmap
69
- '
70
-
71
- test_rev_exists HEAD
72
-
73
- basic_bitmap_tests
74
-
75
- test_expect_success ' --no-bitmap is respected when bitmaps exist' '
76
- git multi-pack-index write --bitmap &&
77
-
78
- test_commit respect--no-bitmap &&
79
- git repack -d &&
80
-
81
- test_path_is_file $midx &&
82
- test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
83
-
84
- git multi-pack-index write --no-bitmap &&
85
-
86
- test_path_is_file $midx &&
87
- test_path_is_missing $midx-$(midx_checksum $objdir).bitmap &&
88
- test_path_is_missing $midx-$(midx_checksum $objdir).rev
89
- '
90
-
91
- test_expect_success ' setup midx with base from later pack' '
92
- # Write a and b so that "a" is a delta on top of base "b", since Git
93
- # prefers to delete contents out of a base rather than add to a shorter
94
- # object.
95
- test_seq 1 128 >a &&
96
- test_seq 1 130 >b &&
97
-
98
- git add a b &&
99
- git commit -m "initial commit" &&
100
-
101
- a=$(git rev-parse HEAD:a) &&
102
- b=$(git rev-parse HEAD:b) &&
103
-
104
- # In the first pack, "a" is stored as a delta to "b".
105
- p1=$(git pack-objects .git/objects/pack/pack <<-EOF
106
- $a
107
- $b
108
- EOF
109
- ) &&
110
-
111
- # In the second pack, "a" is missing, and "b" is not a delta nor base to
112
- # any other object.
113
- p2=$(git pack-objects .git/objects/pack/pack <<-EOF
114
- $b
115
- $(git rev-parse HEAD)
116
- $(git rev-parse HEAD^{tree})
117
- EOF
118
- ) &&
119
-
120
- git prune-packed &&
121
- # Use the second pack as the preferred source, so that "b" occurs
122
- # earlier in the MIDX object order, rendering "a" unusable for pack
123
- # reuse.
124
- git multi-pack-index write --bitmap --preferred-pack=pack-$p2.idx &&
125
-
126
- have_delta $a $b &&
127
- test $(midx_pack_source $a) != $(midx_pack_source $b)
128
- '
129
-
130
- rev_list_tests ' full bitmap with backwards delta'
131
-
132
- test_expect_success ' clone with bitmaps enabled' '
133
- git clone --no-local --bare . clone-reverse-delta.git &&
134
- test_when_finished "rm -fr clone-reverse-delta.git" &&
135
-
136
- git rev-parse HEAD >expect &&
137
- git --git-dir=clone-reverse-delta.git rev-parse HEAD >actual &&
138
- test_cmp expect actual
139
- '
12
+ midx_bitmap_core
140
13
141
14
bitmap_reuse_tests () {
142
15
from=$1
@@ -213,18 +86,7 @@ test_expect_success 'missing object closure fails gracefully' '
213
86
)
214
87
'
215
88
216
- test_expect_success ' setup partial bitmaps' '
217
- test_commit packed &&
218
- git repack &&
219
- test_commit loose &&
220
- git multi-pack-index write --bitmap 2>err &&
221
- test_path_is_file $midx &&
222
- test_path_is_file $midx-$(midx_checksum $objdir).bitmap
223
- '
224
-
225
- test_rev_exists HEAD~
226
-
227
- basic_bitmap_tests HEAD~
89
+ midx_bitmap_partial_tests
228
90
229
91
test_expect_success ' removing a MIDX clears stale bitmaps' '
230
92
rm -fr repo &&
@@ -398,35 +260,4 @@ test_expect_success 'hash-cache values are propagated from pack bitmaps' '
398
260
)
399
261
'
400
262
401
- test_expect_success ' changing the preferred pack does not corrupt bitmaps' '
402
- rm -fr repo &&
403
- git init repo &&
404
- test_when_finished "rm -fr repo" &&
405
- (
406
- cd repo &&
407
-
408
- test_commit A &&
409
- test_commit B &&
410
-
411
- git rev-list --objects --no-object-names HEAD^ >A.objects &&
412
- git rev-list --objects --no-object-names HEAD^.. >B.objects &&
413
-
414
- A=$(git pack-objects $objdir/pack/pack <A.objects) &&
415
- B=$(git pack-objects $objdir/pack/pack <B.objects) &&
416
-
417
- cat >indexes <<-EOF &&
418
- pack-$A.idx
419
- pack-$B.idx
420
- EOF
421
-
422
- git multi-pack-index write --bitmap --stdin-packs \
423
- --preferred-pack=pack-$A.pack <indexes &&
424
- git rev-list --test-bitmap A &&
425
-
426
- git multi-pack-index write --bitmap --stdin-packs \
427
- --preferred-pack=pack-$B.pack <indexes &&
428
- git rev-list --test-bitmap A
429
- )
430
- '
431
-
432
263
test_done
0 commit comments