[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>maint
parent
52e9578985
commit
c3e7fbcbd0
|
@ -71,7 +71,8 @@ static int show_modified(struct cache_entry *old,
|
||||||
}
|
}
|
||||||
|
|
||||||
oldmode = old->ce_mode;
|
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;
|
return 0;
|
||||||
|
|
||||||
mode = ntohl(mode);
|
mode = ntohl(mode);
|
||||||
|
|
|
@ -126,7 +126,7 @@ int main(int argc, char **argv)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
changed = ce_match_stat(ce, &st);
|
changed = ce_match_stat(ce, &st);
|
||||||
if (!changed)
|
if (!changed && detect_rename < 2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
oldmode = ntohl(ce->ce_mode);
|
oldmode = ntohl(ce->ce_mode);
|
||||||
|
|
|
@ -22,6 +22,10 @@ test_expect_success \
|
||||||
rm -f COPYING &&
|
rm -f COPYING &&
|
||||||
git-update-cache --add --remove COPYING 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 |
|
GIT_DIFF_OPTS=-u0 git-diff-cache -M $tree |
|
||||||
sed -e 's/\([0-9][0-9]*\)/#/g' >current &&
|
sed -e 's/\([0-9][0-9]*\)/#/g' >current &&
|
||||||
cat >expected <<\EOF
|
cat >expected <<\EOF
|
||||||
|
@ -58,7 +62,11 @@ test_expect_success \
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'prepare work tree again' \
|
'prepare work tree again' \
|
||||||
'mv COPYING.2 COPYING &&
|
'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 |
|
GIT_DIFF_OPTS=-u0 git-diff-cache -C $tree |
|
||||||
sed -e 's/\([0-9][0-9]*\)/#/g' >current
|
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
|
+ This file is licensed under the G.P.L v#, or a later version
|
||||||
EOF
|
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 \
|
test_expect_success \
|
||||||
'validate output from rename/copy detection' \
|
'validate output from rename/copy detection' \
|
||||||
'diff -u current expected'
|
'diff -u current expected'
|
||||||
|
|
Loading…
Reference in New Issue