git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] sha1_name: try to use same abbrev length when core.abbrevguard is specified

From
Namhyung Kim <namhyung@gmail.com>
Date
Mar 10, 2011, 05:27 UTC
Message-ID
<1299734855.1496.9.camel@leonhard>
In-Reply-To
<7vipvsaz27.fsf@alter.siamese.dyndns.org>
2011-03-09 (수), 11:12 -0800, Junio C Hamano: 
Show 12 quoted lines
> Namhyung Kim <namhyung@gmail.com> writes:
> 
> > If find_unique_abbrev() finds a ambiguous SHA1 name, it tries
> > to find again with increased length. In this case, result hex
> > strings could have different lengths even though the
> > core.abbrevguard config option is specified. But if the option
> > is specified and increased length (delta) is less than its
> > value, the result could be adjusted to the same length.
> 
> I am not sure if I can understand what problem you are trying to solve
> from the above description.
> 
That's probably because of my poor English. :(
Show 31 quoted lines
> The function is given "len" from the caller to specify the minimum length
> of the output the caller expects (i.e. even if 4 hexdigits is enough to
> identify the given commit in a small project, the caller can say it wants
> to see at least 7 hexdigits).  The loop without your patch finds the
> shortest prefix whose length is at least that given length that uniquely
> identifies the given object (or the shortest prefix that doesn't identify
> any existing object if the given sha1 does not exist in the repository).
> And then ensures the returned value is longer by the guard as an extra
> safety measure, so that later when the project grows, the disambiguation
> we find today has a better chance to survive.
> 
> With this patch, the loop decreases the length of the guard when "len"
> given by the caller is insufficient to ensure uniqueness, which does not
> sound right.
> 
> Suppose the given object has ambiguous other objects and you need 8
> hexdigits at least to make it unique in today's history.  The caller gives
> you len of 7, and the guard is set to 3.
> 
> With the original code, the loop starts with 7, finds that it is not
> long enough to disambiguate, increments and retries, finds that 8 is the
> shortest prefix, and then adds the guard and returns 11 hexdigits.
> 
> With your patch, the loop starts with 7 with extra set to 3, finds that 7
> is not long enough and decrements extra to 2, finds that 8 is the shortest
> prefix, and then returns only 10 hexdigits.
> 
> Which feels like totally going against the reason why we added the guard.
> 
> What am I missing?
> 
What I was thinking is like below (from a user's point of view):

I knew git use 7 hexdigit to represent a commit object and it was not enough for my project. So I gave it 5 for the guard and expected to see 12 in everywhere - if 12 always guarantees uniqueness for the project now and probably, the near future. But sometimes git prints 13 even though 12 is long enough to represent the commit uniquely. Because 7 is not enough but 8 is, and simply add 5 (the guard) to it.

So I thought it would be natural to print 12 always in this case and thus, submitted the patch.

Thanks.
-- 
Regards,
Namhyung Kim
Previous: Junio C Hamano
Message 13 of 13 in “sha1_name: try to use same abbrev length when core.abbrevguard is specified”
  1. 1/2 sha1_name: try to use same abbrev length when core.abbrevguard is specifiedNamhyung Kim, Mar 8, 2011
  2. 2/2 blame: introduce -u/--unique optionNamhyung Kim, Mar 8, 2011
  3. Junio C HamanoMar 9, 2011
  4. Namhyung KimMar 10, 2011
  5. Junio C HamanoMar 10, 2011
  6. Namhyung KimMar 10, 2011
  7. Junio C HamanoMar 9, 2011
  8. Junio C HamanoMar 9, 2011
  9. Re* [PATCH 1/2] sha1_name: try to use same abbrev length when core.abbrevguard is specifiedJunio C Hamano, Mar 10, 2011
  10. Namhyung KimMar 10, 2011
  11. Namhyung KimMar 10, 2011
  12. Junio C HamanoMar 10, 2011
  13. Namhyung KimMar 10, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.