]>
Commit | Line | Data |
---|---|---|
516e2b76 BW |
1 | #!/bin/sh |
2 | ||
3 | test_description='upload-pack ref-in-want' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | get_actual_refs () { | |
8 | sed -n -e '/wanted-refs/,/0001/{ | |
9 | /wanted-refs/d | |
10 | /0001/d | |
11 | p | |
8ea40cc5 | 12 | }' <out | test-tool pkt-line unpack >actual_refs |
516e2b76 BW |
13 | } |
14 | ||
15 | get_actual_commits () { | |
84370e36 | 16 | test-tool pkt-line unpack-sideband <out >o.pack && |
516e2b76 | 17 | git index-pack o.pack && |
763b47ba | 18 | git verify-pack -v o.idx >objs && |
9aebc470 ÆAB |
19 | sed -n -e 's/\([0-9a-f][0-9a-f]*\) commit .*/\1/p' objs >objs.sed && |
20 | sort >actual_commits <objs.sed | |
516e2b76 BW |
21 | } |
22 | ||
23 | check_output () { | |
24 | get_actual_refs && | |
25 | test_cmp expected_refs actual_refs && | |
26 | get_actual_commits && | |
763b47ba DL |
27 | sort expected_commits >sorted_commits && |
28 | test_cmp sorted_commits actual_commits | |
516e2b76 BW |
29 | } |
30 | ||
f7c6a3bf | 31 | write_command () { |
32 | echo "command=$1" | |
33 | ||
34 | if test "$(test_oid algo)" != sha1 | |
35 | then | |
36 | echo "object-format=$(test_oid algo)" | |
37 | fi | |
38 | } | |
39 | ||
bac01c64 KA |
40 | # Write a complete fetch command to stdout, suitable for use with `test-tool |
41 | # pkt-line`. "want-ref", "want", and "have" lines are read from stdin. | |
42 | # | |
43 | # Examples: | |
44 | # | |
45 | # write_fetch_command <<-EOF | |
46 | # want-ref refs/heads/main | |
47 | # have $(git rev-parse a) | |
48 | # EOF | |
49 | # | |
50 | # write_fetch_command <<-EOF | |
51 | # want $(git rev-parse b) | |
52 | # have $(git rev-parse a) | |
53 | # EOF | |
54 | # | |
55 | write_fetch_command () { | |
56 | write_command fetch && | |
57 | echo "0001" && | |
58 | echo "no-progress" && | |
59 | cat && | |
60 | echo "done" && | |
61 | echo "0000" | |
62 | } | |
63 | ||
516e2b76 BW |
64 | # c(o/foo) d(o/bar) |
65 | # \ / | |
72dc1728 | 66 | # b e(baz) f(main) |
516e2b76 BW |
67 | # \__ | __/ |
68 | # \ | / | |
69 | # a | |
70 | test_expect_success 'setup repository' ' | |
71 | test_commit a && | |
72dc1728 | 72 | git branch -M main && |
516e2b76 BW |
73 | git checkout -b o/foo && |
74 | test_commit b && | |
75 | test_commit c && | |
76 | git checkout -b o/bar b && | |
77 | test_commit d && | |
78 | git checkout -b baz a && | |
79 | test_commit e && | |
72dc1728 | 80 | git checkout main && |
516e2b76 BW |
81 | test_commit f |
82 | ' | |
83 | ||
84 | test_expect_success 'config controls ref-in-want advertisement' ' | |
b7ce24d0 | 85 | test-tool serve-v2 --advertise-capabilities >out && |
1eb73712 ĐTCD |
86 | perl -ne "/ref-in-want/ and print" out >out.filter && |
87 | test_must_be_empty out.filter && | |
516e2b76 BW |
88 | |
89 | git config uploadpack.allowRefInWant false && | |
b7ce24d0 | 90 | test-tool serve-v2 --advertise-capabilities >out && |
1eb73712 ĐTCD |
91 | perl -ne "/ref-in-want/ and print" out >out.filter && |
92 | test_must_be_empty out.filter && | |
516e2b76 BW |
93 | |
94 | git config uploadpack.allowRefInWant true && | |
b7ce24d0 | 95 | test-tool serve-v2 --advertise-capabilities >out && |
1eb73712 ĐTCD |
96 | perl -ne "/ref-in-want/ and print" out >out.filter && |
97 | test_file_not_empty out.filter | |
516e2b76 BW |
98 | ' |
99 | ||
100 | test_expect_success 'invalid want-ref line' ' | |
bac01c64 | 101 | write_fetch_command >pkt <<-EOF && |
516e2b76 | 102 | want-ref refs/heads/non-existent |
516e2b76 BW |
103 | EOF |
104 | ||
bac01c64 | 105 | test-tool pkt-line pack <pkt >in && |
b7ce24d0 | 106 | test_must_fail test-tool serve-v2 --stateless-rpc 2>out <in && |
516e2b76 BW |
107 | grep "unknown ref" out |
108 | ' | |
109 | ||
110 | test_expect_success 'basic want-ref' ' | |
763b47ba | 111 | oid=$(git rev-parse f) && |
516e2b76 | 112 | cat >expected_refs <<-EOF && |
72dc1728 | 113 | $oid refs/heads/main |
516e2b76 | 114 | EOF |
763b47ba | 115 | git rev-parse f >expected_commits && |
516e2b76 | 116 | |
bac01c64 | 117 | write_fetch_command >pkt <<-EOF && |
72dc1728 | 118 | want-ref refs/heads/main |
bac01c64 | 119 | have $(git rev-parse a) |
516e2b76 | 120 | EOF |
bac01c64 | 121 | test-tool pkt-line pack <pkt >in && |
516e2b76 | 122 | |
b7ce24d0 | 123 | test-tool serve-v2 --stateless-rpc >out <in && |
516e2b76 BW |
124 | check_output |
125 | ' | |
126 | ||
127 | test_expect_success 'multiple want-ref lines' ' | |
763b47ba DL |
128 | oid_c=$(git rev-parse c) && |
129 | oid_d=$(git rev-parse d) && | |
516e2b76 | 130 | cat >expected_refs <<-EOF && |
763b47ba DL |
131 | $oid_c refs/heads/o/foo |
132 | $oid_d refs/heads/o/bar | |
516e2b76 | 133 | EOF |
763b47ba | 134 | git rev-parse c d >expected_commits && |
516e2b76 | 135 | |
bac01c64 | 136 | write_fetch_command >pkt <<-EOF && |
516e2b76 BW |
137 | want-ref refs/heads/o/foo |
138 | want-ref refs/heads/o/bar | |
bac01c64 | 139 | have $(git rev-parse b) |
516e2b76 | 140 | EOF |
bac01c64 | 141 | test-tool pkt-line pack <pkt >in && |
516e2b76 | 142 | |
b7ce24d0 | 143 | test-tool serve-v2 --stateless-rpc >out <in && |
516e2b76 BW |
144 | check_output |
145 | ' | |
146 | ||
147 | test_expect_success 'mix want and want-ref' ' | |
763b47ba | 148 | oid=$(git rev-parse f) && |
516e2b76 | 149 | cat >expected_refs <<-EOF && |
72dc1728 | 150 | $oid refs/heads/main |
516e2b76 | 151 | EOF |
763b47ba | 152 | git rev-parse e f >expected_commits && |
516e2b76 | 153 | |
bac01c64 | 154 | write_fetch_command >pkt <<-EOF && |
72dc1728 | 155 | want-ref refs/heads/main |
516e2b76 BW |
156 | want $(git rev-parse e) |
157 | have $(git rev-parse a) | |
516e2b76 | 158 | EOF |
bac01c64 | 159 | test-tool pkt-line pack <pkt >in && |
516e2b76 | 160 | |
b7ce24d0 | 161 | test-tool serve-v2 --stateless-rpc >out <in && |
516e2b76 BW |
162 | check_output |
163 | ' | |
164 | ||
165 | test_expect_success 'want-ref with ref we already have commit for' ' | |
763b47ba | 166 | oid=$(git rev-parse c) && |
516e2b76 | 167 | cat >expected_refs <<-EOF && |
763b47ba | 168 | $oid refs/heads/o/foo |
516e2b76 BW |
169 | EOF |
170 | >expected_commits && | |
171 | ||
bac01c64 | 172 | write_fetch_command >pkt <<-EOF && |
516e2b76 | 173 | want-ref refs/heads/o/foo |
bac01c64 | 174 | have $(git rev-parse c) |
516e2b76 | 175 | EOF |
bac01c64 | 176 | test-tool pkt-line pack <pkt >in && |
516e2b76 | 177 | |
b7ce24d0 | 178 | test-tool serve-v2 --stateless-rpc >out <in && |
516e2b76 BW |
179 | check_output |
180 | ' | |
181 | ||
73302051 BW |
182 | REPO="$(pwd)/repo" |
183 | LOCAL_PRISTINE="$(pwd)/local_pristine" | |
184 | ||
185 | # $REPO | |
186 | # c(o/foo) d(o/bar) | |
187 | # \ / | |
72dc1728 | 188 | # b e(baz) f(main) |
73302051 BW |
189 | # \__ | __/ |
190 | # \ | / | |
191 | # a | |
192 | # | |
193 | # $LOCAL_PRISTINE | |
194 | # s32(side) | |
195 | # | | |
196 | # . | |
197 | # . | |
198 | # | | |
72dc1728 | 199 | # a(main) |
73302051 BW |
200 | test_expect_success 'setup repos for fetching with ref-in-want tests' ' |
201 | ( | |
72dc1728 | 202 | git init -b main "$REPO" && |
73302051 BW |
203 | cd "$REPO" && |
204 | test_commit a && | |
205 | ||
206 | # Local repo with many commits (so that negotiation will take | |
207 | # more than 1 request/response pair) | |
208 | rm -rf "$LOCAL_PRISTINE" && | |
209 | git clone "file://$REPO" "$LOCAL_PRISTINE" && | |
210 | cd "$LOCAL_PRISTINE" && | |
211 | git checkout -b side && | |
ac093d55 | 212 | test_commit_bulk --id=s 33 && |
73302051 BW |
213 | |
214 | # Add novel commits to upstream | |
72dc1728 | 215 | git checkout main && |
73302051 BW |
216 | cd "$REPO" && |
217 | git checkout -b o/foo && | |
218 | test_commit b && | |
219 | test_commit c && | |
220 | git checkout -b o/bar b && | |
221 | test_commit d && | |
222 | git checkout -b baz a && | |
223 | test_commit e && | |
72dc1728 | 224 | git checkout main && |
73302051 BW |
225 | test_commit f |
226 | ) && | |
227 | git -C "$REPO" config uploadpack.allowRefInWant true && | |
228 | git -C "$LOCAL_PRISTINE" config protocol.version 2 | |
229 | ' | |
230 | ||
231 | test_expect_success 'fetching with exact OID' ' | |
a29263cf | 232 | test_when_finished "rm -f log trace2" && |
73302051 BW |
233 | |
234 | rm -rf local && | |
235 | cp -r "$LOCAL_PRISTINE" local && | |
763b47ba | 236 | oid=$(git -C "$REPO" rev-parse d) && |
a29263cf JS |
237 | GIT_TRACE_PACKET="$(pwd)/log" GIT_TRACE2_EVENT="$(pwd)/trace2" \ |
238 | git -C local fetch origin \ | |
763b47ba | 239 | "$oid":refs/heads/actual && |
73302051 | 240 | |
a29263cf | 241 | grep \"key\":\"total_rounds\",\"value\":\"2\" trace2 && |
73302051 BW |
242 | git -C "$REPO" rev-parse "d" >expected && |
243 | git -C local rev-parse refs/heads/actual >actual && | |
244 | test_cmp expected actual && | |
763b47ba | 245 | grep "want $oid" log |
73302051 BW |
246 | ' |
247 | ||
248 | test_expect_success 'fetching multiple refs' ' | |
249 | test_when_finished "rm -f log" && | |
250 | ||
251 | rm -rf local && | |
252 | cp -r "$LOCAL_PRISTINE" local && | |
72dc1728 | 253 | GIT_TRACE_PACKET="$(pwd)/log" git -C local fetch origin main baz && |
73302051 | 254 | |
72dc1728 JS |
255 | git -C "$REPO" rev-parse "main" "baz" >expected && |
256 | git -C local rev-parse refs/remotes/origin/main refs/remotes/origin/baz >actual && | |
73302051 | 257 | test_cmp expected actual && |
72dc1728 | 258 | grep "want-ref refs/heads/main" log && |
73302051 BW |
259 | grep "want-ref refs/heads/baz" log |
260 | ' | |
261 | ||
262 | test_expect_success 'fetching ref and exact OID' ' | |
263 | test_when_finished "rm -f log" && | |
264 | ||
265 | rm -rf local && | |
266 | cp -r "$LOCAL_PRISTINE" local && | |
763b47ba | 267 | oid=$(git -C "$REPO" rev-parse b) && |
73302051 | 268 | GIT_TRACE_PACKET="$(pwd)/log" git -C local fetch origin \ |
72dc1728 | 269 | main "$oid":refs/heads/actual && |
73302051 | 270 | |
72dc1728 JS |
271 | git -C "$REPO" rev-parse "main" "b" >expected && |
272 | git -C local rev-parse refs/remotes/origin/main refs/heads/actual >actual && | |
73302051 | 273 | test_cmp expected actual && |
763b47ba | 274 | grep "want $oid" log && |
72dc1728 | 275 | grep "want-ref refs/heads/main" log |
73302051 BW |
276 | ' |
277 | ||
278 | test_expect_success 'fetching with wildcard that does not match any refs' ' | |
279 | test_when_finished "rm -f log" && | |
280 | ||
281 | rm -rf local && | |
282 | cp -r "$LOCAL_PRISTINE" local && | |
283 | git -C local fetch origin refs/heads/none*:refs/heads/* >out && | |
284 | test_must_be_empty out | |
285 | ' | |
286 | ||
287 | test_expect_success 'fetching with wildcard that matches multiple refs' ' | |
288 | test_when_finished "rm -f log" && | |
289 | ||
290 | rm -rf local && | |
291 | cp -r "$LOCAL_PRISTINE" local && | |
292 | GIT_TRACE_PACKET="$(pwd)/log" git -C local fetch origin refs/heads/o*:refs/heads/o* && | |
293 | ||
294 | git -C "$REPO" rev-parse "o/foo" "o/bar" >expected && | |
295 | git -C local rev-parse "o/foo" "o/bar" >actual && | |
296 | test_cmp expected actual && | |
297 | grep "want-ref refs/heads/o/foo" log && | |
298 | grep "want-ref refs/heads/o/bar" log | |
299 | ' | |
300 | ||
39551406 KA |
301 | REPO="$(pwd)/repo-ns" |
302 | ||
303 | test_expect_success 'setup namespaced repo' ' | |
304 | ( | |
305 | git init -b main "$REPO" && | |
306 | cd "$REPO" && | |
307 | test_commit a && | |
308 | test_commit b && | |
309 | git checkout a && | |
310 | test_commit c && | |
311 | git checkout a && | |
312 | test_commit d && | |
313 | git update-ref refs/heads/ns-no b && | |
314 | git update-ref refs/namespaces/ns/refs/heads/ns-yes c && | |
315 | git update-ref refs/namespaces/ns/refs/heads/hidden d | |
316 | ) && | |
317 | git -C "$REPO" config uploadpack.allowRefInWant true | |
318 | ' | |
319 | ||
320 | test_expect_success 'with namespace: want-ref is considered relative to namespace' ' | |
321 | wanted_ref=refs/heads/ns-yes && | |
322 | ||
323 | oid=$(git -C "$REPO" rev-parse "refs/namespaces/ns/$wanted_ref") && | |
324 | cat >expected_refs <<-EOF && | |
325 | $oid $wanted_ref | |
326 | EOF | |
327 | cat >expected_commits <<-EOF && | |
328 | $oid | |
329 | $(git -C "$REPO" rev-parse a) | |
330 | EOF | |
331 | ||
332 | write_fetch_command >pkt <<-EOF && | |
333 | want-ref $wanted_ref | |
334 | EOF | |
335 | test-tool pkt-line pack <pkt >in && | |
336 | ||
337 | GIT_NAMESPACE=ns test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in && | |
338 | check_output | |
339 | ' | |
340 | ||
341 | test_expect_success 'with namespace: want-ref outside namespace is unknown' ' | |
342 | wanted_ref=refs/heads/ns-no && | |
343 | ||
344 | write_fetch_command >pkt <<-EOF && | |
345 | want-ref $wanted_ref | |
346 | EOF | |
347 | test-tool pkt-line pack <pkt >in && | |
348 | ||
349 | test_must_fail env GIT_NAMESPACE=ns \ | |
350 | test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in && | |
351 | grep "unknown ref" out | |
352 | ' | |
353 | ||
354 | # Cross-check refs/heads/ns-no indeed exists | |
355 | test_expect_success 'without namespace: want-ref outside namespace succeeds' ' | |
356 | wanted_ref=refs/heads/ns-no && | |
357 | ||
358 | oid=$(git -C "$REPO" rev-parse $wanted_ref) && | |
359 | cat >expected_refs <<-EOF && | |
360 | $oid $wanted_ref | |
361 | EOF | |
362 | cat >expected_commits <<-EOF && | |
363 | $oid | |
364 | $(git -C "$REPO" rev-parse a) | |
365 | EOF | |
366 | ||
367 | write_fetch_command >pkt <<-EOF && | |
368 | want-ref $wanted_ref | |
369 | EOF | |
370 | test-tool pkt-line pack <pkt >in && | |
371 | ||
372 | test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in && | |
373 | check_output | |
374 | ' | |
375 | ||
376 | test_expect_success 'with namespace: hideRefs is matched, relative to namespace' ' | |
377 | wanted_ref=refs/heads/hidden && | |
378 | git -C "$REPO" config transfer.hideRefs $wanted_ref && | |
379 | ||
380 | write_fetch_command >pkt <<-EOF && | |
381 | want-ref $wanted_ref | |
382 | EOF | |
383 | test-tool pkt-line pack <pkt >in && | |
384 | ||
385 | test_must_fail env GIT_NAMESPACE=ns \ | |
386 | test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in && | |
387 | grep "unknown ref" out | |
388 | ' | |
389 | ||
390 | # Cross-check refs/heads/hidden indeed exists | |
391 | test_expect_success 'with namespace: want-ref succeeds if hideRefs is removed' ' | |
392 | wanted_ref=refs/heads/hidden && | |
393 | git -C "$REPO" config --unset transfer.hideRefs $wanted_ref && | |
394 | ||
395 | oid=$(git -C "$REPO" rev-parse "refs/namespaces/ns/$wanted_ref") && | |
396 | cat >expected_refs <<-EOF && | |
397 | $oid $wanted_ref | |
398 | EOF | |
399 | cat >expected_commits <<-EOF && | |
400 | $oid | |
401 | $(git -C "$REPO" rev-parse a) | |
402 | EOF | |
403 | ||
404 | write_fetch_command >pkt <<-EOF && | |
405 | want-ref $wanted_ref | |
406 | EOF | |
407 | test-tool pkt-line pack <pkt >in && | |
408 | ||
409 | GIT_NAMESPACE=ns test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in && | |
410 | check_output | |
411 | ' | |
412 | ||
413 | test_expect_success 'without namespace: relative hideRefs does not match' ' | |
414 | wanted_ref=refs/namespaces/ns/refs/heads/hidden && | |
415 | git -C "$REPO" config transfer.hideRefs refs/heads/hidden && | |
416 | ||
417 | oid=$(git -C "$REPO" rev-parse $wanted_ref) && | |
418 | cat >expected_refs <<-EOF && | |
419 | $oid $wanted_ref | |
420 | EOF | |
421 | cat >expected_commits <<-EOF && | |
422 | $oid | |
423 | $(git -C "$REPO" rev-parse a) | |
424 | EOF | |
425 | ||
426 | write_fetch_command >pkt <<-EOF && | |
427 | want-ref $wanted_ref | |
428 | EOF | |
429 | test-tool pkt-line pack <pkt >in && | |
430 | ||
431 | test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in && | |
432 | check_output | |
433 | ' | |
434 | ||
435 | ||
7f005b0f SG |
436 | . "$TEST_DIRECTORY"/lib-httpd.sh |
437 | start_httpd | |
438 | ||
439 | REPO="$HTTPD_DOCUMENT_ROOT_PATH/repo" | |
440 | LOCAL_PRISTINE="$(pwd)/local_pristine" | |
441 | ||
442 | test_expect_success 'setup repos for change-while-negotiating test' ' | |
443 | ( | |
72dc1728 | 444 | git init -b main "$REPO" && |
7f005b0f SG |
445 | cd "$REPO" && |
446 | >.git/git-daemon-export-ok && | |
447 | test_commit m1 && | |
448 | git tag -d m1 && | |
449 | ||
450 | # Local repo with many commits (so that negotiation will take | |
451 | # more than 1 request/response pair) | |
452 | rm -rf "$LOCAL_PRISTINE" && | |
453 | git clone "http://127.0.0.1:$LIB_HTTPD_PORT/smart/repo" "$LOCAL_PRISTINE" && | |
454 | cd "$LOCAL_PRISTINE" && | |
455 | git checkout -b side && | |
456 | test_commit_bulk --id=s 33 && | |
457 | ||
458 | # Add novel commits to upstream | |
72dc1728 | 459 | git checkout main && |
7f005b0f SG |
460 | cd "$REPO" && |
461 | test_commit m2 && | |
462 | test_commit m3 && | |
463 | git tag -d m2 m3 | |
464 | ) && | |
eafff6e4 | 465 | git -C "$LOCAL_PRISTINE" remote set-url origin "http://127.0.0.1:$LIB_HTTPD_PORT/one_time_perl/repo" && |
7f005b0f SG |
466 | git -C "$LOCAL_PRISTINE" config protocol.version 2 |
467 | ' | |
468 | ||
469 | inconsistency () { | |
470 | # Simulate that the server initially reports $2 as the ref | |
471 | # corresponding to $1, and after that, $1 as the ref corresponding to | |
472 | # $1. This corresponds to the real-life situation where the server's | |
473 | # repository appears to change during negotiation, for example, when | |
474 | # different servers in a load-balancing arrangement serve (stateless) | |
475 | # RPCs during a single negotiation. | |
eacaa1c1 DL |
476 | oid1=$(git -C "$REPO" rev-parse $1) && |
477 | oid2=$(git -C "$REPO" rev-parse $2) && | |
eafff6e4 | 478 | echo "s/$oid1/$oid2/" >"$HTTPD_ROOT_PATH/one-time-perl" |
7f005b0f SG |
479 | } |
480 | ||
481 | test_expect_success 'server is initially ahead - no ref in want' ' | |
482 | git -C "$REPO" config uploadpack.allowRefInWant false && | |
483 | rm -rf local && | |
484 | cp -r "$LOCAL_PRISTINE" local && | |
72dc1728 | 485 | inconsistency main $(test_oid numeric) && |
7f005b0f | 486 | test_must_fail git -C local fetch 2>err && |
6789275d | 487 | test_grep "fatal: remote error: upload-pack: not our ref" err |
7f005b0f SG |
488 | ' |
489 | ||
490 | test_expect_success 'server is initially ahead - ref in want' ' | |
491 | git -C "$REPO" config uploadpack.allowRefInWant true && | |
492 | rm -rf local && | |
493 | cp -r "$LOCAL_PRISTINE" local && | |
72dc1728 | 494 | inconsistency main $(test_oid numeric) && |
7f005b0f SG |
495 | git -C local fetch && |
496 | ||
72dc1728 JS |
497 | git -C "$REPO" rev-parse --verify main >expected && |
498 | git -C local rev-parse --verify refs/remotes/origin/main >actual && | |
7f005b0f SG |
499 | test_cmp expected actual |
500 | ' | |
501 | ||
502 | test_expect_success 'server is initially behind - no ref in want' ' | |
503 | git -C "$REPO" config uploadpack.allowRefInWant false && | |
504 | rm -rf local && | |
505 | cp -r "$LOCAL_PRISTINE" local && | |
72dc1728 | 506 | inconsistency main "main^" && |
7f005b0f SG |
507 | git -C local fetch && |
508 | ||
72dc1728 JS |
509 | git -C "$REPO" rev-parse --verify "main^" >expected && |
510 | git -C local rev-parse --verify refs/remotes/origin/main >actual && | |
7f005b0f SG |
511 | test_cmp expected actual |
512 | ' | |
513 | ||
514 | test_expect_success 'server is initially behind - ref in want' ' | |
515 | git -C "$REPO" config uploadpack.allowRefInWant true && | |
516 | rm -rf local && | |
517 | cp -r "$LOCAL_PRISTINE" local && | |
72dc1728 | 518 | inconsistency main "main^" && |
7f005b0f SG |
519 | git -C local fetch && |
520 | ||
72dc1728 JS |
521 | git -C "$REPO" rev-parse --verify "main" >expected && |
522 | git -C local rev-parse --verify refs/remotes/origin/main >actual && | |
7f005b0f SG |
523 | test_cmp expected actual |
524 | ' | |
525 | ||
72dc1728 | 526 | test_expect_success 'server loses a ref - ref in want' ' |
7f005b0f SG |
527 | git -C "$REPO" config uploadpack.allowRefInWant true && |
528 | rm -rf local && | |
529 | cp -r "$LOCAL_PRISTINE" local && | |
97cf8d50 | 530 | echo "s/main/rain/" >"$HTTPD_ROOT_PATH/one-time-perl" && |
7f005b0f SG |
531 | test_must_fail git -C local fetch 2>err && |
532 | ||
6789275d | 533 | test_grep "fatal: remote error: unknown ref refs/heads/rain" err |
7f005b0f SG |
534 | ' |
535 | ||
536 | # DO NOT add non-httpd-specific tests here, because the last part of this | |
537 | # test script is only executed when httpd is available and enabled. | |
538 | ||
516e2b76 | 539 | test_done |