On 24/09/2021 00:02, Jeff King wrote:
On Thu, Sep 23, 2021 at 02:52:53PM -0700, Junio C Hamano wrote:
Jeff King <peff@xxxxxxxx> writes:
I think the problem is that our fake upload-pack exits immediately, so
ls-remote gets SIGPIPE. In a v0 conversation, ls-remote expects to say
"0000" to indicate that it's not interested in fetching anything (in v2,
it doesn't bother, since fetching would be a separate request that it
just declines to make).
Ah, Makes sense---the usual SIGPIPE problem ;-)
Yes, though it definitely took some head-scratching for me to see where
it was. ;)
Doing: "./t5704-* --stress" made it pretty clear. It fails almost
immediately, and mentions SIGPIPE (well, exit code 141, but by now I
have that one memorized).
This seems to fix it:
diff --git a/t/t5704-protocol-violations.sh b/t/t5704-protocol-violations.sh
index 34538cebf0..0983c2b507 100755
--- a/t/t5704-protocol-violations.sh
+++ b/t/t5704-protocol-violations.sh
@@ -40,7 +40,7 @@ test_expect_success 'bogus symref in v0 capabilities' '
test-tool pkt-line pack-raw-stdin &&
printf "0000"
} >input &&
- git ls-remote --upload-pack="cat input ;:" . >actual &&
+ git ls-remote --upload-pack="cat input; read junk;:" . >actual &&
printf "%s\tHEAD\n" "$oid" >expect &&
test_cmp expect actual
'
Yup. In the original thread there was some further back-and-forth
about further improving the test, if I recall correctly; has the
issue been settled there, or is everybody happy with the above
version?
I think the change I showed earlier (to use ls-remote --symref) is worth
doing. There was lots of discussion about how to format a tab, but in
the end I don't think it really matters.
So here's that patch again, with this race fix on top, which could be
squashed in, and then I hope we can call it good.
Thanks again for doing the actual work - I'll send out a V2 with your
changes squashed in, along with an attempt at improving the commit
message (as discussed in reply to Taylor's comments).
diff --git a/t/t5704-protocol-violations.sh b/t/t5704-protocol-violations.sh
index 34538cebf0..bc393d7c31 100755
--- a/t/t5704-protocol-violations.sh
+++ b/t/t5704-protocol-violations.sh
@@ -35,13 +35,15 @@ test_expect_success 'extra delim packet in v2 fetch args' '
test_expect_success 'bogus symref in v0 capabilities' '
test_commit foo &&
oid=$(git rev-parse HEAD) &&
+ dst=refs/heads/foo &&
{
- printf "%s HEAD\0symref object-format=%s\n" "$oid" "$GIT_DEFAULT_HASH" |
+ printf "%s HEAD\0symref object-format=%s symref=HEAD:%s\n" \
+ "$oid" "$GIT_DEFAULT_HASH" "$dst" |
test-tool pkt-line pack-raw-stdin &&
printf "0000"
} >input &&
- git ls-remote --upload-pack="cat input ;:" . >actual &&
- printf "%s\tHEAD\n" "$oid" >expect &&
+ git ls-remote --symref --upload-pack="cat input; read junk;:" . >actual &&
+ printf "ref: %s\tHEAD\n%s\tHEAD\n" "$dst" "$oid" >expect &&
test_cmp expect actual
'