Re: Symbolic refs break ref advertisement on 1.8.4.3+
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 18, 2013, 18:16 UTC
- Message-ID
- <xmqqr4adbmnz.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <20131117100251.GB22166@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 23 quoted lines
> On Sun, Nov 17, 2013 at 01:39:52AM +1100, Bryan Turner wrote: > >> Aphrael:example bturner$ for ((i=1;i<21;i++)); do git symbolic-ref >> refs/heads/syms/$i refs/heads/master; done >> Aphrael:example bturner$ git ls-remote . >> fatal: protocol error: impossibly long line >> fatal: Could not read from remote repository. >> >> A symref= entry is written into the first packet of the ref >> advertisement, right after the capabilities, for each symbolic ref in >> the repository. Unfortunately, no splitting is done on that value and >> so once you have 15-20 symbolic refs (more or less depending on path >> lengths), you blow the 996 byte limit in format_packet (pkt-line.c) >> and all further clone/fetch operations fail. > > Ick, yeah. I don't think there is a way around that with the way the > information is shoe-horned into the protocol. We should probably just > revert 5e7dcad (upload-pack: send non-HEAD symbolic refs, 2013-09-17), > and assume the HEAD branch name is short enough to fit. > > Another option would be to cap the number of non-HEAD symrefs we'd send > (by counting up the bytes and keeping below the limit). That at least > makes the "easy" cases work, but it's a bit too flaky for my taste.
Thanks Bryan for an easy reproduction, and thanks Peff for a suggestion. Let's revert that one for now.