Skip to content

Commit 6780e68

Browse files
avargitster
authored andcommitted
object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
Amend the "unknown type" handling in the code that displays the ambiguous object list to assert() that we're either going to get the "real" object types we can pass to type_name(), or a -1 (OBJ_BAD) return value from oid_object_info(). See [1] for the current output, and [1] for the commit that added the "unknown type" handling. We are never going to get an "unknown type" in the sense of custom types crafted with "hash-object --literally", since we're not using the OBJECT_INFO_ALLOW_UNKNOWN_TYPE flag. If we manage to otherwise unpack such an object without errors we'll die() in parse_loose_header_extended() called by sort_ambiguous() before we get to show_ambiguous_object(), as is asserted by the test added in the preceding commit. So saying "unknown type" here was always misleading, we really meant to say that we had a failure parsing the object at all, i.e. that we had repository corruption. If the problem is only that it's type is unknown we won't reach this code. So let's emit a generic "[bad object]" instead. As our tests added in the preceding commit show, we'll have emitted various "error" output already in those cases. We should do better in the truly "unknown type" cases, which we'd need to handle if we were passing down the OBJECT_INFO_ALLOW_UNKNOWN_TYPE flag. But let's leave that for some future improvement. In a subsequent commit I'll improve the output we do show, and not having to handle the "unknown type" (as in OBJECT_INFO_ALLOW_UNKNOWN_TYPE) simplifies that change. 1. 5cc044e (get_short_oid: sort ambiguous objects by type, then SHA-1, 2018-05-10) 2. 1ffa26c (get_short_sha1: list ambiguous objects on error, 2016-09-26) Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 8d56136 commit 6780e68

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

object-name.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,16 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
361361
return 0;
362362

363363
type = oid_object_info(ds->repo, oid, NULL);
364+
365+
if (type < 0) {
366+
strbuf_addstr(&desc, "[bad object]");
367+
goto out;
368+
}
369+
370+
assert(type == OBJ_TREE || type == OBJ_COMMIT ||
371+
type == OBJ_BLOB || type == OBJ_TAG);
372+
strbuf_addstr(&desc, type_name(type));
373+
364374
if (type == OBJ_COMMIT) {
365375
struct commit *commit = lookup_commit(ds->repo, oid);
366376
if (commit) {
@@ -374,9 +384,9 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
374384
strbuf_addf(&desc, " %s", tag->tag);
375385
}
376386

377-
advise(" %s %s%s",
387+
out:
388+
advise(" %s %s",
378389
repo_find_unique_abbrev(ds->repo, oid, DEFAULT_ABBREV),
379-
type_name(type) ? type_name(type) : "unknown type",
380390
desc.buf);
381391

382392
strbuf_release(&desc);

t/t1512-rev-parse-disambiguation.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ test_expect_success POSIXPERM 'ambigous zlib corrupt loose blob' '
9999
error: unable to unpack cafe... header
100100
error: inflate: data stream error (incorrect header check)
101101
error: unable to unpack cafe... header
102-
hint: cafe... unknown type
102+
hint: cafe... [bad object]
103103
hint: cafe... blob
104104
fatal: ambiguous argument '\''cafe...'\'': unknown revision or path not in the working tree.
105105
Use '\''--'\'' to separate paths from revisions, like this:

0 commit comments

Comments
 (0)