diff options
author | Junio C Hamano <junkio@cox.net> | 2005-05-21 02:42:35 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-21 09:58:03 -0700 |
commit | c3e7fbcbd0561cd13abc8cefcea3e09ab6090d50 (patch) | |
tree | ee4065e9e7607efef9451ee696be44333496bccc | |
parent | 52e9578985fb636ec1d3f6cf794fdadd5ec896fc (diff) | |
download | git-c3e7fbcbd0561cd13abc8cefcea3e09ab6090d50.tar.gz git-c3e7fbcbd0561cd13abc8cefcea3e09ab6090d50.tar.xz |
[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>
-rw-r--r-- | diff-cache.c | 3 | ||||
-rw-r--r-- | diff-files.c | 2 | ||||
-rw-r--r-- | t/t4003-diff-rename-1.sh | 38 |
3 files changed, 40 insertions, 3 deletions
diff --git a/diff-cache.c b/diff-cache.c index a5deb8c7a..b47b45a40 100644 --- a/diff-cache.c +++ b/diff-cache.c @@ -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); diff --git a/diff-files.c b/diff-files.c index d3b80a072..a3c523ff6 100644 --- a/diff-files.c +++ b/diff-files.c @@ -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); diff --git a/t/t4003-diff-rename-1.sh b/t/t4003-diff-rename-1.sh index 20d8ac5f8..fc773897b 100644 --- a/t/t4003-diff-rename-1.sh +++ b/t/t4003-diff-rename-1.sh @@ -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 @@ -90,4 +98,32 @@ 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' + test_done |