Skip to content

Commit

Permalink
Make git log --follow find copies among unmodified files.
Browse files Browse the repository at this point in the history
'git log --follow <path>' don't track copies from unmodified
files, and this patch fix it.

Signed-off-by: Bo Yang <struggleyb.nku@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Bo Yang authored and Junio C Hamano committed May 7, 2010
1 parent 1da6175 commit 0cdca13
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 2 deletions.
2 changes: 1 addition & 1 deletion Documentation/git-log.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ include::diff-options.txt[]
commits, and doesn't limit diff for those commits.

--follow::
Continue listing the history of a file beyond renames.
Continue listing the history of a file beyond renames/copies.

--log-size::
Before the log message print out its size in bytes. Intended
Expand Down
56 changes: 56 additions & 0 deletions t/t4205-log-follow-harder-copies.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/bin/sh
#
# Copyright (c) 2010 Bo Yang
#

test_description='Test --follow should always find copies hard in git log.
'
. ./test-lib.sh
. "$TEST_DIRECTORY"/diff-lib.sh

echo >path0 'Line 1
Line 2
Line 3
'

test_expect_success \
'add a file path0 and commit.' \
'git add path0 &&
git commit -m "Add path0"'

echo >path0 'New line 1
New line 2
New line 3
'
test_expect_success \
'Change path0.' \
'git add path0 &&
git commit -m "Change path0"'

cat <path0 >path1
test_expect_success \
'copy path0 to path1.' \
'git add path1 &&
git commit -m "Copy path1 from path0"'

test_expect_success \
'find the copy path0 -> path1 harder' \
'git log --follow --name-status --pretty="format:%s" path1 > current'

cat >expected <<\EOF
Copy path1 from path0
C100 path0 path1
Change path0
M path0
Add path0
A path0
EOF

test_expect_success \
'validate the output.' \
'compare_diff_patch current expected'

test_done
2 changes: 1 addition & 1 deletion tree-diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ static void try_to_follow_renames(struct tree_desc *t1, struct tree_desc *t2, co

diff_setup(&diff_opts);
DIFF_OPT_SET(&diff_opts, RECURSIVE);
diff_opts.detect_rename = DIFF_DETECT_RENAME;
DIFF_OPT_SET(&diff_opts, FIND_COPIES_HARDER);
diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
diff_opts.single_follow = opt->paths[0];
diff_opts.break_opt = opt->break_opt;
Expand Down

0 comments on commit 0cdca13

Please sign in to comment.