diff --git a/builtin/describe.c b/builtin/describe.c index 06e413d937..f7bea3c8c5 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -518,10 +518,16 @@ static void describe_blob(const struct object_id *oid, struct strbuf *dst) { struct rev_info revs; struct strvec args = STRVEC_INIT; + struct object_id head_oid; struct process_commit_data pcd = { *null_oid(the_hash_algo), oid, dst, &revs}; + if (repo_get_oid(the_repository, "HEAD", &head_oid)) + die(_("cannot search for blob '%s' on an unborn branch"), + oid_to_hex(oid)); + strvec_pushl(&args, "internal: The first arg is not parsed", - "--objects", "--in-commit-order", "--reverse", "HEAD", + "--objects", "--in-commit-order", "--reverse", + oid_to_hex(&head_oid), NULL); repo_init_revisions(the_repository, &revs, NULL); diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh index 470631d17d..feec57bcbc 100755 --- a/t/t6120-describe.sh +++ b/t/t6120-describe.sh @@ -415,6 +415,14 @@ test_expect_success 'describe an unreachable blob' ' test_grep "blob .$blob. not reachable from HEAD" actual ' +test_expect_success 'describe blob on an unborn branch' ' + oldbranch=$(git symbolic-ref HEAD) && + test_when_finished "git symbolic-ref HEAD $oldbranch" && + git symbolic-ref HEAD refs/heads/does-not-exist && + test_must_fail git describe test-blob 2>actual && + test_grep "cannot search .* on an unborn branch" actual +' + test_expect_success ULIMIT_STACK_SIZE 'name-rev works in a deep repo' ' i=1 && while test $i -lt 8000