Skip to content

Commit c647871

Browse files
peffgitster
authored andcommitted
describe: catch unborn branch in describe_blob()
When describing a blob, we search for it by traversing from HEAD. We do this by feeding the name HEAD to setup_revisions(). But if we are on an unborn branch, this will fail with a confusing message: $ git describe $blob fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' It is OK for this to be an error (we cannot find $blob in an empty traversal, so we'd eventually complain about that). But the error message could be more helpful. Let's resolve HEAD ourselves and pass the resolved object id to setup_revisions(). If resolving fails, then we can print a more useful message. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent db2664b commit c647871

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

builtin/describe.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,10 +518,16 @@ static void describe_blob(const struct object_id *oid, struct strbuf *dst)
518518
{
519519
struct rev_info revs;
520520
struct strvec args = STRVEC_INIT;
521+
struct object_id head_oid;
521522
struct process_commit_data pcd = { *null_oid(the_hash_algo), oid, dst, &revs};
522523

524+
if (repo_get_oid(the_repository, "HEAD", &head_oid))
525+
die(_("cannot search for blob '%s' on an unborn branch"),
526+
oid_to_hex(oid));
527+
523528
strvec_pushl(&args, "internal: The first arg is not parsed",
524-
"--objects", "--in-commit-order", "--reverse", "HEAD",
529+
"--objects", "--in-commit-order", "--reverse",
530+
oid_to_hex(&head_oid),
525531
NULL);
526532

527533
repo_init_revisions(the_repository, &revs, NULL);

t/t6120-describe.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,14 @@ test_expect_success 'describe an unreachable blob' '
415415
test_grep "blob .$blob. not reachable from HEAD" actual
416416
'
417417

418+
test_expect_success 'describe blob on an unborn branch' '
419+
oldbranch=$(git symbolic-ref HEAD) &&
420+
test_when_finished "git symbolic-ref HEAD $oldbranch" &&
421+
git symbolic-ref HEAD refs/heads/does-not-exist &&
422+
test_must_fail git describe test-blob 2>actual &&
423+
test_grep "cannot search .* on an unborn branch" actual
424+
'
425+
418426
test_expect_success ULIMIT_STACK_SIZE 'name-rev works in a deep repo' '
419427
i=1 &&
420428
while test $i -lt 8000

0 commit comments

Comments
 (0)