Skip to content

Commit

Permalink
[PATCH] Diff overhaul, adding the other half of copy detection.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano authored and Linus Torvalds committed May 21, 2005
1 parent 52e9578 commit c3e7fbc
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
3 changes: 2 additions & 1 deletion diff-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion diff-files.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
38 changes: 37 additions & 1 deletion t/t4003-diff-rename-1.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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'
Expand Down

0 comments on commit c3e7fbc

Please sign in to comment.