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. 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 '