Skip to content

Commit c005e98

Browse files
committed
get_sha1(): fix error status regression
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". Noticed by Jeff King. Signed-off-by: Junio C Hamano <[email protected]>
1 parent a78fafe commit c005e98

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

sha1_name.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ static int finish_object_disambiguation(struct disambiguate_state *ds,
212212
ds->fn(ds->candidate, ds->cb_data));
213213

214214
if (!ds->candidate_ok)
215-
return SHORT_NAME_NOT_FOUND;
215+
return SHORT_NAME_AMBIGUOUS;
216216

217217
hashcpy(sha1, ds->candidate);
218218
return 0;

0 commit comments

Comments
 (0)