Skip to content

Commit

Permalink
blame: use different author name for fake commit generated by --contents
Browse files Browse the repository at this point in the history
When the --contents option is used with git blame, and the contents of
the file have lines which can't be annotated by the history being
blamed, the user will see an author of "Not Committed Yet". This is
similar to the way blame handles working tree contents when blaming
without a revision.

This is slightly confusing since this data isn't the working copy and
while it is technically "not committed yet", its also coming from an
external file. Replace this author name with "External file
(--contents)" to better differentiate such lines from actual working
copy lines.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Suggested-by: Glen Choo <chooglen@google.com>
Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
jacob-keller authored and gitster committed Apr 24, 2023
1 parent 7580f92 commit 603d0fd
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 9 deletions.
8 changes: 3 additions & 5 deletions Documentation/blame-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,9 @@ include::line-range-format.txt[]
manual page.

--contents <file>::
Pretend the file being annotated has a commit with the
contents from the named file and a parent of <rev>,
defaulting to HEAD when no <rev> is specified. You may
specify '-' to make the command read from the standard
input for the file contents.
Annotate using the contents from the named file, starting from <rev>
if it is specified, and HEAD otherwise. You may specify '-' to make
the command read from the standard input for the file contents.

--date <format>::
Specifies the format used to output dates. If --date is not
Expand Down
8 changes: 6 additions & 2 deletions blame.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,12 @@ static struct commit *fake_working_tree_commit(struct repository *r,

origin = make_origin(commit, path);

ident = fmt_ident("Not Committed Yet", "not.committed.yet",
WANT_BLANK_IDENT, NULL, 0);
if (contents_from)
ident = fmt_ident("External file (--contents)", "external.file",
WANT_BLANK_IDENT, NULL, 0);
else
ident = fmt_ident("Not Committed Yet", "not.committed.yet",
WANT_BLANK_IDENT, NULL, 0);
strbuf_addstr(&msg, "tree 0000000000000000000000000000000000000000\n");
for (parent = commit->parents; parent; parent = parent->next)
strbuf_addf(&msg, "parent %s\n",
Expand Down
11 changes: 9 additions & 2 deletions t/annotate-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,21 @@ test_expect_success 'blame 1 author' '
check_count A 2
'

test_expect_success 'blame working copy' '
test_when_finished "git restore file" &&
echo "1A quick brown fox jumps over the" >file &&
echo "another lazy dog" >>file &&
check_count A 1 "Not Committed Yet" 1
'

test_expect_success 'blame with --contents' '
check_count --contents=file A 2
'

test_expect_success 'blame with --contents changed' '
echo "1A quick brown fox jumps over the" >contents &&
echo "another lazy dog" >>contents &&
check_count --contents=contents A 1 "Not Committed Yet" 1
check_count --contents=contents A 1 "External file (--contents)" 1
'

test_expect_success 'blame in a bare repo without starting commit' '
Expand Down Expand Up @@ -109,7 +116,7 @@ test_expect_success 'blame 2 authors' '
'

test_expect_success 'blame with --contents and revision' '
check_count -h testTag --contents=file A 2 "Not Committed Yet" 2
check_count -h testTag --contents=file A 2 "External file (--contents)" 2
'

test_expect_success 'setup B1 lines (branch1)' '
Expand Down

0 comments on commit 603d0fd

Please sign in to comment.