]>
Commit | Line | Data |
---|---|---|
b10a5358 JH |
1 | #!/bin/sh |
2 | ||
3 | test_description='fetch/receive strict mode' | |
4 | . ./test-lib.sh | |
5 | ||
8b55b9db | 6 | test_expect_success 'setup and inject "corrupt or missing" object' ' |
b10a5358 JH |
7 | echo hello >greetings && |
8 | git add greetings && | |
9 | git commit -m greetings && | |
10 | ||
11 | S=$(git rev-parse :greetings | sed -e "s|^..|&/|") && | |
12 | X=$(echo bye | git hash-object -w --stdin | sed -e "s|^..|&/|") && | |
8b55b9db ÆAB |
13 | echo $S >S && |
14 | echo $X >X && | |
15 | cp .git/objects/$S .git/objects/$S.back && | |
b10a5358 JH |
16 | mv -f .git/objects/$X .git/objects/$S && |
17 | ||
18 | test_must_fail git fsck | |
19 | ' | |
20 | ||
21 | test_expect_success 'fetch without strict' ' | |
22 | rm -rf dst && | |
23 | git init dst && | |
24 | ( | |
25 | cd dst && | |
26 | git config fetch.fsckobjects false && | |
27 | git config transfer.fsckobjects false && | |
2e2e7e9d | 28 | test_must_fail git fetch ../.git master |
b10a5358 JH |
29 | ) |
30 | ' | |
31 | ||
32 | test_expect_success 'fetch with !fetch.fsckobjects' ' | |
33 | rm -rf dst && | |
34 | git init dst && | |
35 | ( | |
36 | cd dst && | |
37 | git config fetch.fsckobjects false && | |
38 | git config transfer.fsckobjects true && | |
2e2e7e9d | 39 | test_must_fail git fetch ../.git master |
b10a5358 JH |
40 | ) |
41 | ' | |
42 | ||
43 | test_expect_success 'fetch with fetch.fsckobjects' ' | |
44 | rm -rf dst && | |
45 | git init dst && | |
46 | ( | |
47 | cd dst && | |
48 | git config fetch.fsckobjects true && | |
49 | git config transfer.fsckobjects false && | |
50 | test_must_fail git fetch ../.git master | |
51 | ) | |
52 | ' | |
53 | ||
54 | test_expect_success 'fetch with transfer.fsckobjects' ' | |
55 | rm -rf dst && | |
56 | git init dst && | |
57 | ( | |
58 | cd dst && | |
59 | git config transfer.fsckobjects true && | |
60 | test_must_fail git fetch ../.git master | |
61 | ) | |
62 | ' | |
63 | ||
ef7e93d9 CB |
64 | cat >exp <<EOF |
65 | To dst | |
66 | ! refs/heads/master:refs/heads/test [remote rejected] (missing necessary objects) | |
67 | EOF | |
68 | ||
b10a5358 JH |
69 | test_expect_success 'push without strict' ' |
70 | rm -rf dst && | |
71 | git init dst && | |
72 | ( | |
73 | cd dst && | |
74 | git config fetch.fsckobjects false && | |
75 | git config transfer.fsckobjects false | |
76 | ) && | |
ef7e93d9 CB |
77 | test_must_fail git push --porcelain dst master:refs/heads/test >act && |
78 | test_cmp exp act | |
b10a5358 JH |
79 | ' |
80 | ||
81 | test_expect_success 'push with !receive.fsckobjects' ' | |
82 | rm -rf dst && | |
83 | git init dst && | |
84 | ( | |
85 | cd dst && | |
86 | git config receive.fsckobjects false && | |
87 | git config transfer.fsckobjects true | |
88 | ) && | |
ef7e93d9 CB |
89 | test_must_fail git push --porcelain dst master:refs/heads/test >act && |
90 | test_cmp exp act | |
b10a5358 JH |
91 | ' |
92 | ||
ef7e93d9 CB |
93 | cat >exp <<EOF |
94 | To dst | |
74eb32d3 | 95 | ! refs/heads/master:refs/heads/test [remote rejected] (unpacker error) |
ef7e93d9 CB |
96 | EOF |
97 | ||
b10a5358 JH |
98 | test_expect_success 'push with receive.fsckobjects' ' |
99 | rm -rf dst && | |
100 | git init dst && | |
101 | ( | |
102 | cd dst && | |
103 | git config receive.fsckobjects true && | |
104 | git config transfer.fsckobjects false | |
105 | ) && | |
c4b27511 JK |
106 | test_must_fail git push --porcelain dst master:refs/heads/test >act && |
107 | test_cmp exp act | |
b10a5358 JH |
108 | ' |
109 | ||
110 | test_expect_success 'push with transfer.fsckobjects' ' | |
111 | rm -rf dst && | |
112 | git init dst && | |
113 | ( | |
114 | cd dst && | |
115 | git config transfer.fsckobjects true | |
116 | ) && | |
c4b27511 JK |
117 | test_must_fail git push --porcelain dst master:refs/heads/test >act && |
118 | test_cmp exp act | |
b10a5358 JH |
119 | ' |
120 | ||
8b55b9db ÆAB |
121 | test_expect_success 'repair the "corrupt or missing" object' ' |
122 | mv -f .git/objects/$(cat S) .git/objects/$(cat X) && | |
123 | mv .git/objects/$(cat S).back .git/objects/$(cat S) && | |
124 | rm -rf .git/objects/$(cat X) && | |
125 | git fsck | |
126 | ' | |
127 | ||
f9e7d9f8 NTND |
128 | cat >bogus-commit <<EOF |
129 | tree $EMPTY_TREE | |
70a4ae73 JS |
130 | author Bugs Bunny 1234567890 +0000 |
131 | committer Bugs Bunny <bugs@bun.ni> 1234567890 +0000 | |
132 | ||
133 | This commit object intentionally broken | |
134 | EOF | |
135 | ||
134b7327 ÆAB |
136 | test_expect_success 'setup bogus commit' ' |
137 | commit="$(git hash-object -t commit -w --stdin <bogus-commit)" | |
138 | ' | |
139 | ||
536a9ce8 ÆAB |
140 | test_expect_success 'fsck with no skipList input' ' |
141 | test_must_fail git fsck 2>err && | |
142 | test_i18ngrep "missingEmail" err | |
143 | ' | |
144 | ||
58dc440b ÆAB |
145 | test_expect_success 'setup sorted and unsorted skipLists' ' |
146 | cat >SKIP.unsorted <<-EOF && | |
147 | 0000000000000000000000000000000000000004 | |
148 | 0000000000000000000000000000000000000002 | |
149 | $commit | |
150 | 0000000000000000000000000000000000000001 | |
151 | 0000000000000000000000000000000000000003 | |
152 | EOF | |
153 | sort SKIP.unsorted >SKIP.sorted | |
154 | ' | |
155 | ||
156 | test_expect_success 'fsck with sorted skipList' ' | |
157 | git -c fsck.skipList=SKIP.sorted fsck | |
158 | ' | |
159 | ||
160 | test_expect_success 'fsck with unsorted skipList' ' | |
161 | git -c fsck.skipList=SKIP.unsorted fsck | |
162 | ' | |
163 | ||
65a836fa ÆAB |
164 | test_expect_success 'fsck with invalid or bogus skipList input' ' |
165 | git -c fsck.skipList=/dev/null -c fsck.missingEmail=ignore fsck && | |
166 | test_must_fail git -c fsck.skipList=does-not-exist -c fsck.missingEmail=ignore fsck 2>err && | |
167 | test_i18ngrep "Could not open skip list: does-not-exist" err && | |
168 | test_must_fail git -c fsck.skipList=.git/config -c fsck.missingEmail=ignore fsck 2>err && | |
169 | test_i18ngrep "Invalid SHA-1: \[core\]" err | |
170 | ' | |
171 | ||
f706c42b ÆAB |
172 | test_expect_success 'fsck with invalid or bogus skipList input (comments & empty lines)' ' |
173 | cat >SKIP.with-comment <<-EOF && | |
174 | # Some bad commit | |
175 | 0000000000000000000000000000000000000001 | |
176 | EOF | |
177 | test_must_fail git -c fsck.skipList=SKIP.with-comment fsck 2>err-with-comment && | |
178 | test_i18ngrep "^fatal: Invalid SHA-1: # Some bad commit$" err-with-comment && | |
179 | cat >SKIP.with-empty-line <<-EOF && | |
180 | 0000000000000000000000000000000000000001 | |
181 | ||
182 | 0000000000000000000000000000000000000002 | |
183 | EOF | |
184 | test_must_fail git -c fsck.skipList=SKIP.with-empty-line fsck 2>err-with-empty-line && | |
185 | test_i18ngrep "^fatal: Invalid SHA-1: " err-with-empty-line | |
186 | ' | |
187 | ||
188 | test_expect_failure 'fsck no garbage output from comments & empty lines errors' ' | |
189 | test_line_count = 1 err-with-comment && | |
190 | test_line_count = 1 err-with-empty-line | |
191 | ' | |
192 | ||
12b1c50a ÆAB |
193 | test_expect_success 'fsck with invalid abbreviated skipList input' ' |
194 | echo $commit | test_copy_bytes 20 >SKIP.abbreviated && | |
195 | test_must_fail git -c fsck.skipList=SKIP.abbreviated fsck 2>err-abbreviated && | |
196 | test_i18ngrep "^fatal: Invalid SHA-1: " err-abbreviated | |
197 | ' | |
198 | ||
cd94c6f9 | 199 | test_expect_success 'push with receive.fsck.skipList' ' |
cd94c6f9 JS |
200 | git push . $commit:refs/heads/bogus && |
201 | rm -rf dst && | |
202 | git init dst && | |
203 | git --git-dir=dst/.git config receive.fsckObjects true && | |
204 | test_must_fail git push --porcelain dst bogus && | |
cd94c6f9 | 205 | echo $commit >dst/.git/SKIP && |
d786da1c ÆAB |
206 | |
207 | # receive.fsck.* does not fall back on fsck.* | |
208 | git --git-dir=dst/.git config fsck.skipList SKIP && | |
209 | test_must_fail git push --porcelain dst bogus && | |
210 | ||
65a836fa ÆAB |
211 | # Invalid and/or bogus skipList input |
212 | git --git-dir=dst/.git config receive.fsck.skipList /dev/null && | |
213 | test_must_fail git push --porcelain dst bogus && | |
214 | git --git-dir=dst/.git config receive.fsck.skipList does-not-exist && | |
215 | test_must_fail git push --porcelain dst bogus 2>err && | |
216 | test_i18ngrep "Could not open skip list: does-not-exist" err && | |
217 | git --git-dir=dst/.git config receive.fsck.skipList config && | |
218 | test_must_fail git push --porcelain dst bogus 2>err && | |
219 | test_i18ngrep "Invalid SHA-1: \[core\]" err && | |
220 | ||
d786da1c | 221 | git --git-dir=dst/.git config receive.fsck.skipList SKIP && |
cd94c6f9 JS |
222 | git push --porcelain dst bogus |
223 | ' | |
224 | ||
1362df0d | 225 | test_expect_success 'fetch with fetch.fsck.skipList' ' |
1362df0d ÆAB |
226 | refspec=refs/heads/bogus:refs/heads/bogus && |
227 | git push . $commit:refs/heads/bogus && | |
228 | rm -rf dst && | |
229 | git init dst && | |
230 | git --git-dir=dst/.git config fetch.fsckObjects true && | |
231 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec && | |
d786da1c ÆAB |
232 | git --git-dir=dst/.git config fetch.fsck.skipList /dev/null && |
233 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec && | |
1362df0d | 234 | echo $commit >dst/.git/SKIP && |
d786da1c ÆAB |
235 | |
236 | # fetch.fsck.* does not fall back on fsck.* | |
237 | git --git-dir=dst/.git config fsck.skipList dst/.git/SKIP && | |
238 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec && | |
239 | ||
65a836fa ÆAB |
240 | # Invalid and/or bogus skipList input |
241 | git --git-dir=dst/.git config fetch.fsck.skipList /dev/null && | |
242 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec && | |
243 | git --git-dir=dst/.git config fetch.fsck.skipList does-not-exist && | |
244 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec 2>err && | |
245 | test_i18ngrep "Could not open skip list: does-not-exist" err && | |
246 | git --git-dir=dst/.git config fetch.fsck.skipList dst/.git/config && | |
247 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec 2>err && | |
248 | test_i18ngrep "Invalid SHA-1: \[core\]" err && | |
249 | ||
d786da1c | 250 | git --git-dir=dst/.git config fetch.fsck.skipList dst/.git/SKIP && |
1362df0d ÆAB |
251 | git --git-dir=dst/.git fetch "file://$(pwd)" $refspec |
252 | ' | |
253 | ||
8a6d0525 ÆAB |
254 | test_expect_success 'fsck.<unknownmsg-id> dies' ' |
255 | test_must_fail git -c fsck.whatEver=ignore fsck 2>err && | |
256 | test_i18ngrep "Unhandled message id: whatever" err | |
257 | ' | |
1362df0d | 258 | |
70a4ae73 | 259 | test_expect_success 'push with receive.fsck.missingEmail=warn' ' |
70a4ae73 JS |
260 | git push . $commit:refs/heads/bogus && |
261 | rm -rf dst && | |
262 | git init dst && | |
263 | git --git-dir=dst/.git config receive.fsckobjects true && | |
264 | test_must_fail git push --porcelain dst bogus && | |
d786da1c ÆAB |
265 | |
266 | # receive.fsck.<msg-id> does not fall back on fsck.<msg-id> | |
267 | git --git-dir=dst/.git config fsck.missingEmail warn && | |
268 | test_must_fail git push --porcelain dst bogus && | |
269 | ||
8a6d0525 ÆAB |
270 | # receive.fsck.<unknownmsg-id> warns |
271 | git --git-dir=dst/.git config \ | |
272 | receive.fsck.whatEver error && | |
273 | ||
70a4ae73 JS |
274 | git --git-dir=dst/.git config \ |
275 | receive.fsck.missingEmail warn && | |
276 | git push --porcelain dst bogus >act 2>&1 && | |
efaba7cc | 277 | grep "missingEmail" act && |
8a6d0525 | 278 | test_i18ngrep "Skipping unknown msg id.*whatever" act && |
efaba7cc JS |
279 | git --git-dir=dst/.git branch -D bogus && |
280 | git --git-dir=dst/.git config --add \ | |
281 | receive.fsck.missingEmail ignore && | |
efaba7cc | 282 | git push --porcelain dst bogus >act 2>&1 && |
c7cf9566 | 283 | ! grep "missingEmail" act |
70a4ae73 JS |
284 | ' |
285 | ||
1362df0d | 286 | test_expect_success 'fetch with fetch.fsck.missingEmail=warn' ' |
1362df0d ÆAB |
287 | refspec=refs/heads/bogus:refs/heads/bogus && |
288 | git push . $commit:refs/heads/bogus && | |
289 | rm -rf dst && | |
290 | git init dst && | |
291 | git --git-dir=dst/.git config fetch.fsckobjects true && | |
292 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec && | |
d786da1c ÆAB |
293 | |
294 | # fetch.fsck.<msg-id> does not fall back on fsck.<msg-id> | |
295 | git --git-dir=dst/.git config fsck.missingEmail warn && | |
296 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" $refspec && | |
297 | ||
8a6d0525 ÆAB |
298 | # receive.fsck.<unknownmsg-id> warns |
299 | git --git-dir=dst/.git config \ | |
300 | fetch.fsck.whatEver error && | |
301 | ||
1362df0d ÆAB |
302 | git --git-dir=dst/.git config \ |
303 | fetch.fsck.missingEmail warn && | |
304 | git --git-dir=dst/.git fetch "file://$(pwd)" $refspec >act 2>&1 && | |
305 | grep "missingEmail" act && | |
8a6d0525 | 306 | test_i18ngrep "Skipping unknown msg id.*whatever" act && |
1362df0d ÆAB |
307 | rm -rf dst && |
308 | git init dst && | |
309 | git --git-dir=dst/.git config fetch.fsckobjects true && | |
310 | git --git-dir=dst/.git config \ | |
311 | fetch.fsck.missingEmail ignore && | |
312 | git --git-dir=dst/.git fetch "file://$(pwd)" $refspec >act 2>&1 && | |
313 | ! grep "missingEmail" act | |
314 | ' | |
315 | ||
f50c4407 JS |
316 | test_expect_success \ |
317 | 'receive.fsck.unterminatedHeader=warn triggers error' ' | |
318 | rm -rf dst && | |
319 | git init dst && | |
320 | git --git-dir=dst/.git config receive.fsckobjects true && | |
321 | git --git-dir=dst/.git config \ | |
322 | receive.fsck.unterminatedheader warn && | |
323 | test_must_fail git push --porcelain dst HEAD >act 2>&1 && | |
324 | grep "Cannot demote unterminatedheader" act | |
325 | ' | |
326 | ||
1362df0d ÆAB |
327 | test_expect_success \ |
328 | 'fetch.fsck.unterminatedHeader=warn triggers error' ' | |
329 | rm -rf dst && | |
330 | git init dst && | |
331 | git --git-dir=dst/.git config fetch.fsckobjects true && | |
332 | git --git-dir=dst/.git config \ | |
333 | fetch.fsck.unterminatedheader warn && | |
334 | test_must_fail git --git-dir=dst/.git fetch "file://$(pwd)" HEAD && | |
335 | grep "Cannot demote unterminatedheader" act | |
336 | ' | |
337 | ||
b10a5358 | 338 | test_done |