On 8/18/25 11:01 PM, Jeff King wrote: > 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@xxxxxxxx> > --- > This one is perhaps the most controversial, as it is a change in > behavior. But the current behavior just really seems like a bug to me. > > Unlike what René posted earlier, I didn't record the dst strbuf's > original size and compare against that. This is a static function with > only one caller that passes in an empty strbuf, so being overly > defensive didn't seem worth it Makes sense. > (arguably these functions should just > return an allocated buffer anyway). Or even print results directly. > builtin/describe.c | 3 +++ > t/t6120-describe.sh | 6 ++++++ > 2 files changed, 9 insertions(+) > > 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)); I like the clarity and precision of this message. The rest of the patches look good to me as well. The first is a nice little bonus. René > } > > 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