From: Jeff King Date: Mon, 18 Aug 2025 21:01:25 +0000 (-0400) Subject: describe: error if blob not found X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=db2664b6f7c88910b1ab21bcdbac87be098df8a2;p=thirdparty%2Fgit.git describe: error if blob not found If describe_blob() does not find the blob in question, it returns an empty strbuf, and we print an empty line. This differs from describe_commit(), which always either returns an answer or calls die() itself. As the blob function was bolted onto the command afterwards, I think its behavior is not intentional, and it is just a bug that it does not report an error. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- diff --git a/builtin/describe.c b/builtin/describe.c index 383d3e6b9a..06e413d937 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -535,6 +535,9 @@ static void describe_blob(const struct object_id *oid, struct strbuf *dst) reset_revision_walk(); release_revisions(&revs); strvec_clear(&args); + + if (!dst->len) + die(_("blob '%s' not reachable from HEAD"), oid_to_hex(oid)); } static void describe(const char *arg, int last_one) diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh index 256ccaefb7..470631d17d 100755 --- a/t/t6120-describe.sh +++ b/t/t6120-describe.sh @@ -409,6 +409,12 @@ test_expect_success 'describe tag object' ' test_grep "fatal: test-blob-1 is neither a commit nor blob" actual ' +test_expect_success 'describe an unreachable blob' ' + blob=$(echo not-found-anywhere | git hash-object -w --stdin) && + test_must_fail git describe $blob 2>actual && + test_grep "blob .$blob. not reachable from HEAD" actual +' + test_expect_success ULIMIT_STACK_SIZE 'name-rev works in a deep repo' ' i=1 && while test $i -lt 8000