Skip to content

Commit

Permalink
Merge branch 'jk/log-missing-default-HEAD' into maint
Browse files Browse the repository at this point in the history
"git init empty && git -C empty log" said "bad default revision 'HEAD'",
which was found to be a bit confusing to new users.

* jk/log-missing-default-HEAD:
  log: diagnose empty HEAD more clearly
  • Loading branch information
Junio C Hamano committed Sep 4, 2015
2 parents 9d93988 + ce11360 commit 5af77d1
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
17 changes: 16 additions & 1 deletion revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -2173,6 +2173,21 @@ static int handle_revision_pseudo_opt(const char *submodule,
return 1;
}

static void NORETURN diagnose_missing_default(const char *def)
{
unsigned char sha1[20];
int flags;
const char *refname;

refname = resolve_ref_unsafe(def, 0, sha1, &flags);
if (!refname || !(flags & REF_ISSYMREF) || (flags & REF_ISBROKEN))
die(_("your current branch appears to be broken"));

skip_prefix(refname, "refs/heads/", &refname);
die(_("your current branch '%s' does not have any commits yet"),
refname);
}

/*
* Parse revision information, filling in the "rev_info" structure,
* and removing the used arguments from the argument list.
Expand Down Expand Up @@ -2302,7 +2317,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
struct object *object;
struct object_context oc;
if (get_sha1_with_context(revs->def, 0, sha1, &oc))
die("bad default revision '%s'", revs->def);
diagnose_missing_default(revs->def);
object = get_reference(revs, revs->def, sha1, 0);
add_pending_object_with_mode(revs, object, revs->def, oc.mode);
}
Expand Down
14 changes: 14 additions & 0 deletions t/t4202-log.sh
Original file line number Diff line number Diff line change
Expand Up @@ -871,4 +871,18 @@ test_expect_success 'log --graph --no-walk is forbidden' '
test_must_fail git log --graph --no-walk
'

test_expect_success 'log diagnoses bogus HEAD' '
git init empty &&
test_must_fail git -C empty log 2>stderr &&
test_i18ngrep does.not.have.any.commits stderr &&
echo 1234abcd >empty/.git/refs/heads/master &&
test_must_fail git -C empty log 2>stderr &&
test_i18ngrep broken stderr &&
echo "ref: refs/heads/invalid.lock" >empty/.git/HEAD &&
test_must_fail git -C empty log 2>stderr &&
test_i18ngrep broken stderr &&
test_must_fail git -C empty log --default totally-bogus 2>stderr &&
test_i18ngrep broken stderr
'

test_done

0 comments on commit 5af77d1

Please sign in to comment.