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

Re: [PATCH v4 00/18] Extending the shelf-life of "git describe" output

From
Jeff King <peff@peff.net>
Date
Jul 3, 2012, 18:38 UTC
Message-ID
<20120703183839.GA5765@sigill.intra.peff.net>
In-Reply-To
<7v3958wvtx.fsf@alter.siamese.dyndns.org>
On Tue, Jul 03, 2012 at 11:20:10AM -0700, Junio C Hamano wrote:
Show 16 quoted lines
> Jeff King <peff@peff.net> writes:
> 
> > However, if you feed a partial sha1 for which there are
> > multiple matches, none of which satisfy the disambiguation hint, then we
> > used to say "short SHA1 is ambiguous", and now we don't.
> 
> In finish_object_disambiguation(), if the candidate hasn't been
> checked, there are two cases:
> 
>  - It is the first and only object that match the prefix; or
>  - It replaced another object that matched the prefix but that
>    object did not satisfy ds->fn() callback.
> 
> And the former case we set ds->candidate_ok to true without doing
> anything else, while for the latter we check the candidate, which
> may set ds->candidate_ok to false.
Yeah, I think this is right.
Show 13 quoted lines
> At this point in the code, ds->candidate_ok can be false only if
> this last-round check found that the candidate does not pass the
> check, because the state after update_candidates() returns cannot
> satisfy
> 
>     !ds->ambiguous && ds->candidate_exists && ds->candidate_checked
> 
> and !ds->canidate_ok at the same time.
> 
> Hence, when we execute this "return", we know we have seen more than
> one object that match the prefix (and none of them satisfied ds->fn),
> meaning that we should say "the short name is ambiguous", not "there
> is no object that matches the prefix".

Right. Per the comment just above your change, we are explicitly "ok" whether or not we meet the criteria in the hint function if we have seen only one. Which means the function is entirely about _disambiguating_. It is never about filtering. Which is a good thing, because it leaves the semantics of get_sha1 otherwise intact.

> Please sanity check; I think it is just this one-liner, but I am
> having hard time convincing myself that it can be that simple.
It looks right to me (and certainly fixes the behavior I mentioned).
-Peff
Previous: Junio C HamanoNext: Junio C Hamano
Message 27 of 31 in “Extending the shelf-life of "git describe" output”
  1. 00/18 Extending the shelf-life of "git describe" outputJunio C Hamano, Jul 2, 2012
  2. 01/18 sha1_name.c: indentation fixJunio C Hamano, Jul 2, 2012
  3. 02/18 sha1_name.c: hide get_sha1_with_context_1() uglinessJunio C Hamano, Jul 2, 2012
  4. 03/18 sha1_name.c: get rid of ugly get_sha1_with_mode_1()Junio C Hamano, Jul 2, 2012
  5. Matthieu MoyJul 3, 2012
  6. Junio C HamanoJul 3, 2012
  7. Matthieu MoyJul 4, 2012
  8. 04/18 sha1_name.c: get rid of get_sha1_with_mode()Junio C Hamano, Jul 2, 2012
  9. 05/18 sha1_name.c: clarify what "fake" is for in find_short_object_filename()Junio C Hamano, Jul 2, 2012
  10. 06/18 sha1_name.c: rename "now" to "current"Junio C Hamano, Jul 2, 2012
  11. 07/18 sha1_name.c: refactor find_short_packed_object()Junio C Hamano, Jul 2, 2012
  12. 08/18 sha1_name.c: correct misnamed "canonical" and "res"Junio C Hamano, Jul 2, 2012
  13. 09/18 sha1_name.c: restructure disambiguation of short namesJunio C Hamano, Jul 2, 2012
  14. 10/18 sha1_name.c: allow get_short_sha1() to take other flagsJunio C Hamano, Jul 2, 2012
  15. 11/18 sha1_name.c: teach get_short_sha1() a commit-only optionJunio C Hamano, Jul 2, 2012
  16. 12/18 sha1_name.c: get_describe_name() by definition groks only commitsJunio C Hamano, Jul 2, 2012
  17. 13/18 sha1_name.c: get_sha1_1() takes lookup flagsJunio C Hamano, Jul 2, 2012
  18. 14/18 sha1_name.c: many short names can only be committishJunio C Hamano, Jul 2, 2012
  19. Junio C HamanoJul 2, 2012
  20. 15/18 sha1_name.c: teach lookup context to get_sha1_with_context()Junio C Hamano, Jul 2, 2012
  21. 16/18 sha1_name.c: introduce get_sha1_committish()Junio C Hamano, Jul 2, 2012
  22. 17/18 revision.c: allow handle_revision_arg() to take other flagsJunio C Hamano, Jul 2, 2012
  23. 18/18 revision.c: the "log" family, except for "show", takes committishJunio C Hamano, Jul 2, 2012
  24. Jeff KingJul 3, 2012
  25. Junio C HamanoJul 3, 2012
  26. Junio C HamanoJul 3, 2012
  27. Jeff KingJul 3, 2012
  28. Junio C HamanoJul 3, 2012
  29. Jeff KingJul 3, 2012
  30. Junio C HamanoJul 3, 2012
  31. Jeff KingJul 3, 2012

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.