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
Junio C Hamano <gitster@pobox.com>
Date
Jul 3, 2012, 18:20 UTC
Message-ID
<7v3958wvtx.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20120703071940.GB16679@sigill.intra.peff.net>
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.

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".

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.

 sha1_name.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sha1_name.c b/sha1_name.c
index 2e2dbb8..c824bdd 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -212,7 +212,7 @@ static int finish_object_disambiguation(struct disambiguate_state *ds,
 				    ds->fn(ds->candidate, ds->cb_data));
 
 	if (!ds->candidate_ok)
-		return SHORT_NAME_NOT_FOUND;
+		return SHORT_NAME_AMBIGUOUS;
 
 	hashcpy(sha1, ds->candidate);
 	return 0;
Previous: Junio C HamanoNext: Jeff King
Message 26 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.