提交 c3e7fbcb 编写于 作者: J Junio C Hamano 提交者: Linus Torvalds

[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: NJunio C Hamano <junkio@cox.net>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 52e95789
......@@ -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'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册