]> git.ipfire.org Git - thirdparty/git.git/commitdiff
describe: error if blob not found
authorJeff King <peff@peff.net>
Mon, 18 Aug 2025 21:01:25 +0000 (17:01 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 18 Aug 2025 21:23:43 +0000 (14:23 -0700)
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 <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/describe.c
t/t6120-describe.sh

index 383d3e6b9a87c8cf50d7ff77dd4c60d689f6170f..06e413d9375864507edddcc6afe3148b99ffba3b 100644 (file)
@@ -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)
index 256ccaefb75bb6c83f63b6a82c916a29ba622ec2..470631d17d1c5c4ca27a391479da353fb2af561c 100755 (executable)
@@ -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