]>
Commit | Line | Data |
---|---|---|
8ee378a0 JH |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2005 Junio C Hamano | |
4 | # | |
5 | ||
6 | test_description='git-pack-object | |
7 | ||
8 | ' | |
9 | . ./test-lib.sh | |
10 | ||
11 | TRASH=`pwd` | |
12 | ||
13 | test_expect_success \ | |
14 | 'setup' \ | |
15 | 'rm -f .git/index* | |
16 | for i in a b c | |
17 | do | |
18 | dd if=/dev/zero bs=4k count=1 | tr "\\0" $i >$i && | |
215a7ad1 | 19 | git-update-index --add $i || return 1 |
8ee378a0 | 20 | done && |
215a7ad1 | 21 | cat c >d && echo foo >>d && git-update-index --add d && |
1f688557 JH |
22 | tree=`git-write-tree` && |
23 | commit=`git-commit-tree $tree </dev/null` && { | |
8ee378a0 | 24 | echo $tree && |
1f688557 | 25 | echo $commit && |
8ee378a0 | 26 | git-ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\) .*/\\1/" |
1f688557 JH |
27 | } >obj-list && { |
28 | git-diff-tree --root -p $commit && | |
29 | while read object | |
30 | do | |
31 | t=`git-cat-file -t $object` && | |
4d9d62fa | 32 | git-cat-file $t $object || return 1 |
1f688557 JH |
33 | done <obj-list |
34 | } >expect' | |
8ee378a0 JH |
35 | |
36 | test_expect_success \ | |
37 | 'pack without delta' \ | |
a61eea6a | 38 | 'packname_1=$(git-pack-objects --window=0 test-1 <obj-list)' |
8ee378a0 JH |
39 | |
40 | rm -fr .git2 | |
41 | mkdir .git2 | |
42 | ||
43 | test_expect_success \ | |
44 | 'unpack without delta' \ | |
a61eea6a | 45 | "GIT_OBJECT_DIRECTORY=.git2/objects && |
8ee378a0 | 46 | export GIT_OBJECT_DIRECTORY && |
5c94f87e | 47 | git-init && |
a61eea6a JS |
48 | git-unpack-objects -n <test-1-${packname_1}.pack && |
49 | git-unpack-objects <test-1-${packname_1}.pack" | |
8ee378a0 JH |
50 | |
51 | unset GIT_OBJECT_DIRECTORY | |
f07a5241 | 52 | cd "$TRASH/.git2" |
8ee378a0 JH |
53 | |
54 | test_expect_success \ | |
55 | 'check unpack without delta' \ | |
56 | '(cd ../.git && find objects -type f -print) | | |
57 | while read path | |
58 | do | |
59 | cmp $path ../.git/$path || { | |
60 | echo $path differs. | |
4d9d62fa | 61 | return 1 |
8ee378a0 JH |
62 | } |
63 | done' | |
f07a5241 | 64 | cd "$TRASH" |
8ee378a0 JH |
65 | |
66 | test_expect_success \ | |
ac527b0b | 67 | 'pack with REF_DELTA' \ |
8ee378a0 | 68 | 'pwd && |
a61eea6a | 69 | packname_2=$(git-pack-objects test-2 <obj-list)' |
8ee378a0 JH |
70 | |
71 | rm -fr .git2 | |
72 | mkdir .git2 | |
73 | ||
74 | test_expect_success \ | |
ac527b0b | 75 | 'unpack with REF_DELTA' \ |
8ee378a0 JH |
76 | 'GIT_OBJECT_DIRECTORY=.git2/objects && |
77 | export GIT_OBJECT_DIRECTORY && | |
5c94f87e | 78 | git-init && |
a61eea6a JS |
79 | git-unpack-objects -n <test-2-${packname_2}.pack && |
80 | git-unpack-objects <test-2-${packname_2}.pack' | |
8ee378a0 JH |
81 | |
82 | unset GIT_OBJECT_DIRECTORY | |
f07a5241 | 83 | cd "$TRASH/.git2" |
8ee378a0 | 84 | test_expect_success \ |
ac527b0b | 85 | 'check unpack with REF_DELTA' \ |
8ee378a0 JH |
86 | '(cd ../.git && find objects -type f -print) | |
87 | while read path | |
88 | do | |
89 | cmp $path ../.git/$path || { | |
90 | echo $path differs. | |
4d9d62fa | 91 | return 1 |
8ee378a0 JH |
92 | } |
93 | done' | |
f07a5241 | 94 | cd "$TRASH" |
8ee378a0 | 95 | |
ac527b0b NP |
96 | test_expect_success \ |
97 | 'pack with OFS_DELTA' \ | |
98 | 'pwd && | |
99 | packname_3=$(git-pack-objects --delta-base-offset test-3 <obj-list)' | |
100 | ||
101 | rm -fr .git2 | |
102 | mkdir .git2 | |
103 | ||
104 | test_expect_success \ | |
105 | 'unpack with OFS_DELTA' \ | |
106 | 'GIT_OBJECT_DIRECTORY=.git2/objects && | |
107 | export GIT_OBJECT_DIRECTORY && | |
108 | git-init && | |
109 | git-unpack-objects -n <test-3-${packname_3}.pack && | |
110 | git-unpack-objects <test-3-${packname_3}.pack' | |
111 | ||
112 | unset GIT_OBJECT_DIRECTORY | |
113 | cd "$TRASH/.git2" | |
114 | test_expect_success \ | |
115 | 'check unpack with OFS_DELTA' \ | |
116 | '(cd ../.git && find objects -type f -print) | | |
117 | while read path | |
118 | do | |
119 | cmp $path ../.git/$path || { | |
120 | echo $path differs. | |
121 | return 1 | |
122 | } | |
123 | done' | |
124 | cd "$TRASH" | |
125 | ||
d93f7c18 AL |
126 | test_expect_success 'compare delta flavors' ' |
127 | perl -e '\'' | |
128 | defined($_ = -s $_) or die for @ARGV; | |
129 | exit 1 if $ARGV[0] <= $ARGV[1]; | |
130 | '\'' test-2-$packname_2.pack test-3-$packname_3.pack | |
131 | ' | |
ac527b0b | 132 | |
1f688557 JH |
133 | rm -fr .git2 |
134 | mkdir .git2 | |
135 | ||
136 | test_expect_success \ | |
137 | 'use packed objects' \ | |
138 | 'GIT_OBJECT_DIRECTORY=.git2/objects && | |
139 | export GIT_OBJECT_DIRECTORY && | |
5c94f87e | 140 | git-init && |
a61eea6a | 141 | cp test-1-${packname_1}.pack test-1-${packname_1}.idx .git2/objects/pack && { |
1f688557 JH |
142 | git-diff-tree --root -p $commit && |
143 | while read object | |
144 | do | |
145 | t=`git-cat-file -t $object` && | |
4d9d62fa | 146 | git-cat-file $t $object || return 1 |
1f688557 JH |
147 | done <obj-list |
148 | } >current && | |
149 | diff expect current' | |
150 | ||
1f688557 | 151 | test_expect_success \ |
ac527b0b | 152 | 'use packed deltified (REF_DELTA) objects' \ |
1f688557 JH |
153 | 'GIT_OBJECT_DIRECTORY=.git2/objects && |
154 | export GIT_OBJECT_DIRECTORY && | |
82868f72 | 155 | rm .git2/objects/pack/test-* && |
a61eea6a | 156 | cp test-2-${packname_2}.pack test-2-${packname_2}.idx .git2/objects/pack && { |
1f688557 JH |
157 | git-diff-tree --root -p $commit && |
158 | while read object | |
159 | do | |
160 | t=`git-cat-file -t $object` && | |
4d9d62fa | 161 | git-cat-file $t $object || return 1 |
1f688557 JH |
162 | done <obj-list |
163 | } >current && | |
164 | diff expect current' | |
165 | ||
ac527b0b NP |
166 | test_expect_success \ |
167 | 'use packed deltified (OFS_DELTA) objects' \ | |
168 | 'GIT_OBJECT_DIRECTORY=.git2/objects && | |
169 | export GIT_OBJECT_DIRECTORY && | |
170 | rm .git2/objects/pack/test-* && | |
171 | cp test-3-${packname_3}.pack test-3-${packname_3}.idx .git2/objects/pack && { | |
172 | git-diff-tree --root -p $commit && | |
173 | while read object | |
174 | do | |
175 | t=`git-cat-file -t $object` && | |
176 | git-cat-file $t $object || return 1 | |
177 | done <obj-list | |
178 | } >current && | |
179 | diff expect current' | |
180 | ||
f9253394 JH |
181 | unset GIT_OBJECT_DIRECTORY |
182 | ||
183 | test_expect_success \ | |
184 | 'verify pack' \ | |
ac527b0b NP |
185 | 'git-verify-pack test-1-${packname_1}.idx \ |
186 | test-2-${packname_2}.idx \ | |
187 | test-3-${packname_3}.idx' | |
f9253394 JH |
188 | |
189 | test_expect_success \ | |
190 | 'corrupt a pack and see if verify catches' \ | |
a61eea6a JS |
191 | 'cp test-1-${packname_1}.idx test-3.idx && |
192 | cp test-2-${packname_2}.pack test-3.pack && | |
f9253394 JH |
193 | if git-verify-pack test-3.idx |
194 | then false | |
195 | else :; | |
196 | fi && | |
197 | ||
c97451ce | 198 | : PACK_SIGNATURE && |
a61eea6a | 199 | cp test-1-${packname_1}.pack test-3.pack && |
f9253394 JH |
200 | dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=2 && |
201 | if git-verify-pack test-3.idx | |
202 | then false | |
203 | else :; | |
204 | fi && | |
205 | ||
c97451ce | 206 | : PACK_VERSION && |
a61eea6a | 207 | cp test-1-${packname_1}.pack test-3.pack && |
f9253394 JH |
208 | dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=7 && |
209 | if git-verify-pack test-3.idx | |
210 | then false | |
211 | else :; | |
212 | fi && | |
213 | ||
c97451ce | 214 | : TYPE/SIZE byte of the first packed object data && |
a61eea6a | 215 | cp test-1-${packname_1}.pack test-3.pack && |
f9253394 JH |
216 | dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=12 && |
217 | if git-verify-pack test-3.idx | |
218 | then false | |
219 | else :; | |
220 | fi && | |
221 | ||
c97451ce JH |
222 | : sum of the index file itself && |
223 | l=`wc -c <test-3.idx` && | |
8eafa3da | 224 | l=`expr $l - 20` && |
c5ced645 | 225 | cp test-1-${packname_1}.pack test-3.pack && |
c97451ce | 226 | dd if=/dev/zero of=test-3.idx count=20 bs=1 conv=notrunc seek=$l && |
c5ced645 JH |
227 | if git-verify-pack test-3.pack |
228 | then false | |
229 | else :; | |
230 | fi && | |
231 | ||
f9253394 JH |
232 | :' |
233 | ||
9cf6d335 SV |
234 | test_expect_success \ |
235 | 'build pack index for an existing pack' \ | |
236 | 'cp test-1-${packname_1}.pack test-3.pack && | |
237 | git-index-pack -o tmp.idx test-3.pack && | |
238 | cmp tmp.idx test-1-${packname_1}.idx && | |
239 | ||
240 | git-index-pack test-3.pack && | |
241 | cmp test-3.idx test-1-${packname_1}.idx && | |
242 | ||
243 | cp test-2-${packname_2}.pack test-3.pack && | |
244 | git-index-pack -o tmp.idx test-2-${packname_2}.pack && | |
245 | cmp tmp.idx test-2-${packname_2}.idx && | |
246 | ||
247 | git-index-pack test-3.pack && | |
248 | cmp test-3.idx test-2-${packname_2}.idx && | |
249 | ||
ac527b0b NP |
250 | cp test-3-${packname_3}.pack test-3.pack && |
251 | git-index-pack -o tmp.idx test-3-${packname_3}.pack && | |
252 | cmp tmp.idx test-3-${packname_3}.idx && | |
253 | ||
254 | git-index-pack test-3.pack && | |
255 | cmp test-3.idx test-3-${packname_3}.idx && | |
256 | ||
9cf6d335 SV |
257 | :' |
258 | ||
8685da42 NP |
259 | test_expect_success \ |
260 | 'fake a SHA1 hash collision' \ | |
261 | 'test -f .git/objects/c8/2de19312b6c3695c0c18f70709a6c535682a67 && | |
262 | cp -f .git/objects/9d/235ed07cd19811a6ceb342de82f190e49c9f68 \ | |
263 | .git/objects/c8/2de19312b6c3695c0c18f70709a6c535682a67' | |
264 | ||
265 | test_expect_failure \ | |
266 | 'make sure index-pack detects the SHA1 collision' \ | |
267 | 'git-index-pack -o bad.idx test-3.pack' | |
268 | ||
8ee378a0 | 269 | test_done |