[PATCH] Diff overhaul, adding the other half of copy detection.
This patch extends diff-cache and diff-files to report the unmodified files to diff-core as well when -C (copy detection) is in effect, so that the unmodified files can also be used as the source candidates. The existing test t4003 has been extended to cover this case. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
52e9578985
commit
c3e7fbcbd0
@ -71,7 +71,8 @@ static int show_modified(struct cache_entry *old,
|
||||
}
|
||||
|
||||
oldmode = old->ce_mode;
|
||||
if (mode == oldmode && !memcmp(sha1, old->sha1, 20))
|
||||
if (mode == oldmode && !memcmp(sha1, old->sha1, 20) &&
|
||||
detect_rename < 2)
|
||||
return 0;
|
||||
|
||||
mode = ntohl(mode);
|
||||
|
@ -126,7 +126,7 @@ int main(int argc, char **argv)
|
||||
continue;
|
||||
}
|
||||
changed = ce_match_stat(ce, &st);
|
||||
if (!changed)
|
||||
if (!changed && detect_rename < 2)
|
||||
continue;
|
||||
|
||||
oldmode = ntohl(ce->ce_mode);
|
||||
|
@ -22,6 +22,10 @@ test_expect_success \
|
||||
rm -f COPYING &&
|
||||
git-update-cache --add --remove COPYING COPYING.?'
|
||||
|
||||
# tree has COPYING. work tree has COPYING.1 and COPYING.2,
|
||||
# both are slightly edited. So we say you copy-and-edit one,
|
||||
# and rename-and-edit the other.
|
||||
|
||||
GIT_DIFF_OPTS=-u0 git-diff-cache -M $tree |
|
||||
sed -e 's/\([0-9][0-9]*\)/#/g' >current &&
|
||||
cat >expected <<\EOF
|
||||
@ -58,7 +62,11 @@ test_expect_success \
|
||||
test_expect_success \
|
||||
'prepare work tree again' \
|
||||
'mv COPYING.2 COPYING &&
|
||||
git-update-cache --add --remove COPYING COPYING.1'
|
||||
git-update-cache --add --remove COPYING COPYING.1 COPYING.2'
|
||||
|
||||
# tree has COPYING. work tree has COPYING and COPYING.1,
|
||||
# both are slightly edited. So we say you edited one,
|
||||
# and copy-and-edit the other.
|
||||
|
||||
GIT_DIFF_OPTS=-u0 git-diff-cache -C $tree |
|
||||
sed -e 's/\([0-9][0-9]*\)/#/g' >current
|
||||
@ -86,6 +94,34 @@ diff --git a/COPYING b/COPYING
|
||||
+ This file is licensed under the G.P.L v#, or a later version
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'validate output from rename/copy detection' \
|
||||
'diff -u current expected'
|
||||
|
||||
test_expect_success \
|
||||
'prepare work tree once again' \
|
||||
'cat ../../COPYING >COPYING &&
|
||||
git-update-cache --add --remove COPYING COPYING.1'
|
||||
|
||||
# tree has COPYING. work tree has the same COPYING and COPYING.1,
|
||||
# but COPYING is not edited. We say you copy-and-edit COPYING.1;
|
||||
# this is only possible because -C mode now reports the unmodified
|
||||
# file to the diff-core.
|
||||
|
||||
GIT_DIFF_OPTS=-u0 git-diff-cache -C $tree |
|
||||
sed -e 's/\([0-9][0-9]*\)/#/g' >current
|
||||
cat >expected <<\EOF
|
||||
diff --git a/COPYING b/COPYING.#
|
||||
similarity index #%
|
||||
copy from COPYING
|
||||
copy to COPYING.#
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.#
|
||||
@@ -# +# @@
|
||||
- HOWEVER, in order to allow a migration to GPLv# if that seems like
|
||||
+ However, in order to allow a migration to GPLv# if that seems like
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'validate output from rename/copy detection' \
|
||||
'diff -u current expected'
|
||||
|
Loading…
Reference in New Issue
Block a user