diff options
| author | Junio C Hamano <gitster@pobox.com> | 2019-04-25 16:41:21 +0900 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2019-04-25 16:41:21 +0900 |
| commit | d8620d3ca7a01c1108f3145cc77dbda6e0e970c6 (patch) | |
| tree | 26c7106af5727b8b0740eea664da5cedcebbb6e5 | |
| parent | Merge branch 'tg/ls-files-debug-format-fix' (diff) | |
| parent | blame: default to HEAD in a bare repo when no start commit is given (diff) | |
| download | git-d8620d3ca7a01c1108f3145cc77dbda6e0e970c6.tar.gz git-d8620d3ca7a01c1108f3145cc77dbda6e0e970c6.zip | |
Merge branch 'sg/blame-in-bare-start-at-head'
"git blame -- path" in a non-bare repository starts blaming from
the working tree, and the same command in a bare repository errors
out because there is no working tree by definition. The command
has been taught to instead start blaming from the commit at HEAD,
which is more useful.
* sg/blame-in-bare-start-at-head:
blame: default to HEAD in a bare repo when no start commit is given
| -rw-r--r-- | builtin/blame.c | 13 | ||||
| -rw-r--r-- | t/annotate-tests.sh | 8 |
2 files changed, 21 insertions, 0 deletions
diff --git a/builtin/blame.c b/builtin/blame.c index 177c1022a0..21cde57e71 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -27,6 +27,7 @@ #include "object-store.h" #include "blame.h" #include "string-list.h" +#include "refs.h" static char blame_usage[] = N_("git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"); @@ -993,6 +994,18 @@ parse_done: revs.disable_stdin = 1; setup_revisions(argc, argv, &revs, NULL); + if (!revs.pending.nr && is_bare_repository()) { + struct commit *head_commit; + struct object_id head_oid; + + if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, + &head_oid, NULL) || + !(head_commit = lookup_commit_reference_gently(revs.repo, + &head_oid, 1))) + die("no such ref: HEAD"); + + add_pending_object(&revs, &head_commit->object, "HEAD"); + } init_scoreboard(&sb); sb.revs = &revs; diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh index 6da48a2e0a..d933af5714 100644 --- a/t/annotate-tests.sh +++ b/t/annotate-tests.sh @@ -68,6 +68,14 @@ test_expect_success 'blame 1 author' ' check_count A 2 ' +test_expect_success 'blame in a bare repo without starting commit' ' + git clone --bare . bare.git && + ( + cd bare.git && + check_count A 2 + ) +' + test_expect_success 'blame by tag objects' ' git tag -m "test tag" testTag && git tag -m "test tag #2" testTag2 testTag && |
