Re: How pretty is pretty? git cat-file -p inconsistency
On Sat, 8 Oct 2011, Michael J Gruber wrote:
> Jakub Narebski venit, vidit, dixit 08.10.2011 01:50:
Show 27 quoted lines
> > Tree object consist of zero or more entries. Each item consist of mode,
> > filename, and sha1:
> >
> > <mode> SPC <filename> NUL <sha1>
> >
> > where
> >
> > 1. <mode> is variable-length (!) text (!) containing mode of an
> > entry. It encodes type of entry: if it is blob (including special
> > case: symbolic link), tree i.e. directory, or a commit
> > i.e. submodule. Does not include leading zeros.
> >
> > 2. <filename> is variable-length null-terminated ("\0") name of a file
> > or directory, or name of directory where submodule is attached
> >
> > 3. <sha1> is 40-bytes _binary_ identifier.
> >
> > HTH
>
> It does help, thanks.
>
> Though I'm beginning to think we have a crazy object format. Not only do
> we have a lot of indirections (like ascii representation of decimal
> representation of length), but we store sha1 as ascii in commit and tag
> objects and as binary in tree objects. Which makes tree objects the only
> unpleasant ones to look at (and parse) in raw form. (I was hoping we can
> dispose of/deprecate cat-file -p in favor of show). Oh well.Well, actually we have pretty consistent format, i.e. we use textual format everywhere (textual size of blob instead of some variable-length integer, textual name of type of object instead of a byte for it, epoch as a text and not 64bit signed int in some network format, hexadecimal sha1, space separated (sub)fields)...
... with the sole exception of tree object, which uses _binary_ sha1. What was Linus thinking?!?
To have consistency the tree entry should IMVHO look like this
<textual mode> SPC <filename> NUL <hexadecimal sha1> LF
Nb. with hexadecimal sha-1 everywhere it would be I think possible (if very very difficult) to move to different hash function: SHA-256, Skein, etc. I don't know if it is now at all possible...
--
Jakub Narebski
Poland