|
|
|
#!/bin/sh
|
|
|
|
#
|
|
|
|
# Copyright (c) 2005 Junio C Hamano
|
|
|
|
#
|
|
|
|
|
|
|
|
test_description='More rename detection
|
|
|
|
|
|
|
|
'
|
|
|
|
. ./test-lib.sh
|
|
|
|
. ../diff-lib.sh ;# test-lib chdir's into trash
|
|
|
|
|
|
|
|
test_expect_success \
|
|
|
|
'prepare reference tree' \
|
|
|
|
'cat ../../COPYING >COPYING &&
|
[PATCH] Rename/copy detection fix.
The rename/copy detection logic in earlier round was only good
enough to show patch output and discussion on the mailing list
about the diff-raw format updates revealed many problems with
it. This patch fixes all the ones known to me, without making
things I want to do later impossible, mostly related to patch
reordering.
(1) Earlier rename/copy detector determined which one is rename
and which one is copy too early, which made it impossible
to later introduce diffcore transformers to reorder
patches. This patch fixes it by moving that logic to the
very end of the processing.
(2) Earlier output routine diff_flush() was pruning all the
"no-change" entries indiscriminatingly. This was done due
to my false assumption that one of the requirements in the
diff-raw output was not to show such an entry (which
resulted in my incorrect comment about "diff-helper never
being able to be equivalent to built-in diff driver"). My
special thanks go to Linus for correcting me about this.
When we produce diff-raw output, for the downstream to be
able to tell renames from copies, sometimes it _is_
necessary to output "no-change" entries, and this patch
adds diffcore_prune() function for doing it.
(3) Earlier diff_filepair structure was trying to be not too
specific about rename/copy operations, but the purpose of
the structure was to record one or two paths, which _was_
indeed about rename/copy. This patch discards xfrm_msg
field which was trying to be generic for this wrong reason,
and introduces a couple of fields (rename_score and
rename_rank) that are explicitly specific to rename/copy
logic. One thing to note is that the information in a
single diff_filepair structure _still_ does not distinguish
renames from copies, and it is deliberately so. This is to
allow patches to be reordered in later stages.
(4) This patch also adds some tests about diff-raw format
output and makes sure that necessary "no-change" entries
appear on the output.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
20 years ago
|
|
|
echo frotz >rezrov &&
|
|
|
|
git-update-cache --add COPYING rezrov &&
|
|
|
|
tree=$(git-write-tree) &&
|
|
|
|
echo $tree'
|
|
|
|
|
|
|
|
test_expect_success \
|
|
|
|
'prepare work tree' \
|
|
|
|
'sed -e 's/HOWEVER/However/' <COPYING >COPYING.1 &&
|
|
|
|
sed -e 's/GPL/G.P.L/g' <COPYING >COPYING.2 &&
|
|
|
|
rm -f COPYING &&
|
|
|
|
git-update-cache --add --remove COPYING COPYING.?'
|
|
|
|
|
[PATCH] Rename/copy detection fix.
The rename/copy detection logic in earlier round was only good
enough to show patch output and discussion on the mailing list
about the diff-raw format updates revealed many problems with
it. This patch fixes all the ones known to me, without making
things I want to do later impossible, mostly related to patch
reordering.
(1) Earlier rename/copy detector determined which one is rename
and which one is copy too early, which made it impossible
to later introduce diffcore transformers to reorder
patches. This patch fixes it by moving that logic to the
very end of the processing.
(2) Earlier output routine diff_flush() was pruning all the
"no-change" entries indiscriminatingly. This was done due
to my false assumption that one of the requirements in the
diff-raw output was not to show such an entry (which
resulted in my incorrect comment about "diff-helper never
being able to be equivalent to built-in diff driver"). My
special thanks go to Linus for correcting me about this.
When we produce diff-raw output, for the downstream to be
able to tell renames from copies, sometimes it _is_
necessary to output "no-change" entries, and this patch
adds diffcore_prune() function for doing it.
(3) Earlier diff_filepair structure was trying to be not too
specific about rename/copy operations, but the purpose of
the structure was to record one or two paths, which _was_
indeed about rename/copy. This patch discards xfrm_msg
field which was trying to be generic for this wrong reason,
and introduces a couple of fields (rename_score and
rename_rank) that are explicitly specific to rename/copy
logic. One thing to note is that the information in a
single diff_filepair structure _still_ does not distinguish
renames from copies, and it is deliberately so. This is to
allow patches to be reordered in later stages.
(4) This patch also adds some tests about diff-raw format
output and makes sure that necessary "no-change" entries
appear on the output.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
20 years ago
|
|
|
# tree has COPYING and rezrov. work tree has COPYING.1 and COPYING.2,
|
|
|
|
# both are slightly edited, and unchanged rezrov. So we say you
|
|
|
|
# copy-and-edit one, and rename-and-edit the other. We do not say
|
|
|
|
# anything about rezrov.
|
|
|
|
|
|
|
|
GIT_DIFF_OPTS=--unified=0 git-diff-cache -M -p $tree >current
|
|
|
|
cat >expected <<\EOF
|
|
|
|
diff --git a/COPYING b/COPYING.1
|
|
|
|
copy from COPYING
|
|
|
|
copy to COPYING.1
|
|
|
|
--- a/COPYING
|
|
|
|
+++ b/COPYING.1
|
|
|
|
@@ -6 +6 @@
|
|
|
|
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
|
|
|
+ However, in order to allow a migration to GPLv3 if that seems like
|
|
|
|
diff --git a/COPYING b/COPYING.2
|
|
|
|
rename from COPYING
|
|
|
|
rename to COPYING.2
|
|
|
|
--- a/COPYING
|
|
|
|
+++ b/COPYING.2
|
|
|
|
@@ -2 +2 @@
|
|
|
|
- Note that the only valid version of the GPL as far as this project
|
|
|
|
+ Note that the only valid version of the G.P.L as far as this project
|
|
|
|
@@ -6 +6 @@
|
|
|
|
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
|
|
|
+ HOWEVER, in order to allow a migration to G.P.Lv3 if that seems like
|
|
|
|
@@ -12 +12 @@
|
|
|
|
- This file is licensed under the GPL v2, or a later version
|
|
|
|
+ This file is licensed under the G.P.L v2, or a later version
|
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success \
|
|
|
|
'validate output from rename/copy detection (#1)' \
|
|
|
|
'compare_diff_patch current expected'
|
|
|
|
|
|
|
|
test_expect_success \
|
|
|
|
'prepare work tree again' \
|
|
|
|
'mv COPYING.2 COPYING &&
|
|
|
|
git-update-cache --add --remove COPYING COPYING.1 COPYING.2'
|
|
|
|
|
[PATCH] Rename/copy detection fix.
The rename/copy detection logic in earlier round was only good
enough to show patch output and discussion on the mailing list
about the diff-raw format updates revealed many problems with
it. This patch fixes all the ones known to me, without making
things I want to do later impossible, mostly related to patch
reordering.
(1) Earlier rename/copy detector determined which one is rename
and which one is copy too early, which made it impossible
to later introduce diffcore transformers to reorder
patches. This patch fixes it by moving that logic to the
very end of the processing.
(2) Earlier output routine diff_flush() was pruning all the
"no-change" entries indiscriminatingly. This was done due
to my false assumption that one of the requirements in the
diff-raw output was not to show such an entry (which
resulted in my incorrect comment about "diff-helper never
being able to be equivalent to built-in diff driver"). My
special thanks go to Linus for correcting me about this.
When we produce diff-raw output, for the downstream to be
able to tell renames from copies, sometimes it _is_
necessary to output "no-change" entries, and this patch
adds diffcore_prune() function for doing it.
(3) Earlier diff_filepair structure was trying to be not too
specific about rename/copy operations, but the purpose of
the structure was to record one or two paths, which _was_
indeed about rename/copy. This patch discards xfrm_msg
field which was trying to be generic for this wrong reason,
and introduces a couple of fields (rename_score and
rename_rank) that are explicitly specific to rename/copy
logic. One thing to note is that the information in a
single diff_filepair structure _still_ does not distinguish
renames from copies, and it is deliberately so. This is to
allow patches to be reordered in later stages.
(4) This patch also adds some tests about diff-raw format
output and makes sure that necessary "no-change" entries
appear on the output.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
20 years ago
|
|
|
# tree has COPYING and rezrov. work tree has COPYING and COPYING.1,
|
|
|
|
# both are slightly edited, and unchanged rezrov. So we say you
|
|
|
|
# edited one, and copy-and-edit the other. We do not say
|
|
|
|
# anything about rezrov.
|
|
|
|
|
|
|
|
GIT_DIFF_OPTS=--unified=0 git-diff-cache -C -p $tree >current
|
|
|
|
cat >expected <<\EOF
|
|
|
|
diff --git a/COPYING b/COPYING
|
|
|
|
--- a/COPYING
|
|
|
|
+++ b/COPYING
|
|
|
|
@@ -2 +2 @@
|
|
|
|
- Note that the only valid version of the GPL as far as this project
|
|
|
|
+ Note that the only valid version of the G.P.L as far as this project
|
|
|
|
@@ -6 +6 @@
|
|
|
|
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
|
|
|
+ HOWEVER, in order to allow a migration to G.P.Lv3 if that seems like
|
|
|
|
@@ -12 +12 @@
|
|
|
|
- This file is licensed under the GPL v2, or a later version
|
|
|
|
+ This file is licensed under the G.P.L v2, or a later version
|
|
|
|
diff --git a/COPYING b/COPYING.1
|
|
|
|
copy from COPYING
|
|
|
|
copy to COPYING.1
|
|
|
|
--- a/COPYING
|
|
|
|
+++ b/COPYING.1
|
|
|
|
@@ -6 +6 @@
|
|
|
|
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
|
|
|
+ However, in order to allow a migration to GPLv3 if that seems like
|
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success \
|
|
|
|
'validate output from rename/copy detection (#2)' \
|
|
|
|
'compare_diff_patch current expected'
|
|
|
|
|
|
|
|
test_expect_success \
|
|
|
|
'prepare work tree once again' \
|
|
|
|
'cat ../../COPYING >COPYING &&
|
|
|
|
git-update-cache --add --remove COPYING COPYING.1'
|
|
|
|
|
[PATCH] Rename/copy detection fix.
The rename/copy detection logic in earlier round was only good
enough to show patch output and discussion on the mailing list
about the diff-raw format updates revealed many problems with
it. This patch fixes all the ones known to me, without making
things I want to do later impossible, mostly related to patch
reordering.
(1) Earlier rename/copy detector determined which one is rename
and which one is copy too early, which made it impossible
to later introduce diffcore transformers to reorder
patches. This patch fixes it by moving that logic to the
very end of the processing.
(2) Earlier output routine diff_flush() was pruning all the
"no-change" entries indiscriminatingly. This was done due
to my false assumption that one of the requirements in the
diff-raw output was not to show such an entry (which
resulted in my incorrect comment about "diff-helper never
being able to be equivalent to built-in diff driver"). My
special thanks go to Linus for correcting me about this.
When we produce diff-raw output, for the downstream to be
able to tell renames from copies, sometimes it _is_
necessary to output "no-change" entries, and this patch
adds diffcore_prune() function for doing it.
(3) Earlier diff_filepair structure was trying to be not too
specific about rename/copy operations, but the purpose of
the structure was to record one or two paths, which _was_
indeed about rename/copy. This patch discards xfrm_msg
field which was trying to be generic for this wrong reason,
and introduces a couple of fields (rename_score and
rename_rank) that are explicitly specific to rename/copy
logic. One thing to note is that the information in a
single diff_filepair structure _still_ does not distinguish
renames from copies, and it is deliberately so. This is to
allow patches to be reordered in later stages.
(4) This patch also adds some tests about diff-raw format
output and makes sure that necessary "no-change" entries
appear on the output.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
20 years ago
|
|
|
# tree has COPYING and rezrov. work tree has 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. Unchanged rezrov, although being fed to
|
|
|
|
# git-diff-cache as well, should not be mentioned.
|
|
|
|
|
|
|
|
GIT_DIFF_OPTS=--unified=0 \
|
|
|
|
git-diff-cache -C --find-copies-harder -p $tree >current
|
|
|
|
cat >expected <<\EOF
|
|
|
|
diff --git a/COPYING b/COPYING.1
|
|
|
|
copy from COPYING
|
|
|
|
copy to COPYING.1
|
|
|
|
--- a/COPYING
|
|
|
|
+++ b/COPYING.1
|
|
|
|
@@ -6 +6 @@
|
|
|
|
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
|
|
|
+ However, in order to allow a migration to GPLv3 if that seems like
|
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success \
|
|
|
|
'validate output from rename/copy detection (#3)' \
|
|
|
|
'compare_diff_patch current expected'
|
|
|
|
|
|
|
|
test_done
|