Re: Request for detailed documentation of git pack protocol
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Jun 4, 2009, 18:41 UTC
- Message-ID
- <20090604184109.GR3355@spearce.org>
- In-Reply-To
- <200906041045.11328.jnareb@gmail.com>
Jakub Narebski <jnareb@gmail.com> wrote:
Show 20 quoted lines
> Dnia ?roda 3. czerwca 2009 23:53, Tony Finch napisa?: > > On Wed, 3 Jun 2009, Jakub Narebski wrote: > > > > > > Actually git accepts both lowercase and uppercase in HEXDIG (at least > > > for pkt-length), but it prefers lowercase. > > > > You should ensure that all hex digit strings follow the same rule. > > Are SHA-1 object names case insensitive too? > > > > Case insensitivity has a history of being awkward. SMTP has always had > > case-insensitive commands, though the RFCs have always written them in > > upper case and implementations have pretty much all emitted them in upper > > case. See http://tools.ietf.org/html/rfc5321#section-2.4 especially the > > caveat about broken case-sensitive implementations. > > There should be no problem with pkt-length being case insensitive, as > standard conversion routines (strtol, sprintf) accept 0-9a-fA-F for > base 16 / hexadecimal conversion. The requirement here is that client > and server SHOULD use lowercase, but MUST accept mixed case (do case > insensitive parsing of hex4).
ACK. This is what C Git does today. JGit sends lower case, but is wrong by only accepting lowercase. I will patch it today to accept mixed case.
> I think SHA-1 is lowercased, so mixed case should work there. Well, at > least "git show 6096D7" (note the uppercase 'D' in shortened SHA-1 name) > works as expected.
ACK. Mixed case SHA-1 MUST be accepted, but lower case SHOULD be output.
> But I do not know what are, or what should be protocol requirements. > Should SHA-1 use lowercase, or be case insensitive?
SHA-1 SHOULD be lowercase (a-f), MUST accept a-f or A-F.
> Should commands such as "have", "want", "done" use lower case or > be case insensitive?
These MUST be lowercase.
> Should status indicators "ACK" and "NAK" be upper case,
These MUST be uppercase. Though "ACK %s continue" MUST be mixed case, as I just wrote it.
> Should capabilities be case sensitive, and should they be > compared case sensitive or not?
No, they are case sensitive.
Why? All of the above is the current C code implementation. We have to follow what the code does today, and it does case sensitive compares almost everywhere... except in the SHA-1 parsing.
-- Shawn.