Add strategy option find-renames, following git-diff interface. This
makes the option rename-threshold redundant.

Signed-off-by: Felipe Gonçalves Assis <felipegas...@gmail.com>
---

Added tests and made --find-renames reset the similarity index to the default.

 Documentation/merge-strategies.txt        | 10 ++++---
 merge-recursive.c                         |  7 ++++-
 t/t3034-merge-recursive-rename-options.sh | 48 +++++++++++++++++++++++++++----
 3 files changed, 54 insertions(+), 11 deletions(-)

diff --git a/Documentation/merge-strategies.txt 
b/Documentation/merge-strategies.txt
index 1a5e197..2eb92b9 100644
--- a/Documentation/merge-strategies.txt
+++ b/Documentation/merge-strategies.txt
@@ -85,11 +85,13 @@ no-renames;;
        Turn off rename detection.
        See also linkgit:git-diff[1] `--no-renames`.
 
+find-renames[=<n>];;
+       Turn on rename detection, optionally setting the similarity
+       threshold.  This is the default.
+       See also linkgit:git-diff[1] `--find-renames`.
+
 rename-threshold=<n>;;
-       Controls the similarity threshold used for rename detection.
-       Re-enables rename detection if disabled by a preceding
-       `no-renames`.
-       See also linkgit:git-diff[1] `-M`.
+       Deprecated synonym for `find-renames=<n>`.
 
 subtree[=<path>];;
        This option is a more advanced form of 'subtree' strategy, where
diff --git a/merge-recursive.c b/merge-recursive.c
index 6dd0a11..63b8ba8 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -2094,7 +2094,12 @@ int parse_merge_opt(struct merge_options *o, const char 
*s)
                o->renormalize = 0;
        else if (!strcmp(s, "no-renames"))
                o->detect_rename = 0;
-       else if (skip_prefix(s, "rename-threshold=", &arg)) {
+       else if (!strcmp(s, "find-renames")) {
+               o->detect_rename = 1;
+               o->rename_score = 0;
+       }
+       else if (skip_prefix(s, "find-renames=", &arg) ||
+                skip_prefix(s, "rename-threshold=", &arg)) {
                if ((o->rename_score = parse_rename_score(&arg)) == -1 || *arg 
!= 0)
                        return -1;
                o->detect_rename = 1;
diff --git a/t/t3034-merge-recursive-rename-options.sh 
b/t/t3034-merge-recursive-rename-options.sh
index 2f10fa7..4e3fefd 100755
--- a/t/t3034-merge-recursive-rename-options.sh
+++ b/t/t3034-merge-recursive-rename-options.sh
@@ -115,25 +115,25 @@ test_expect_success 'the default similarity index is 50%' 
'
 
 test_expect_success 'low rename threshold' '
        git read-tree --reset -u HEAD &&
-       test_must_fail git merge-recursive --rename-threshold=25 HEAD^ -- HEAD 
master &&
+       test_must_fail git merge-recursive --find-renames=25 HEAD^ -- HEAD 
master &&
        check_find_renames_25
 '
 
 test_expect_success 'high rename threshold' '
        git read-tree --reset -u HEAD &&
-       test_must_fail git merge-recursive --rename-threshold=75 HEAD^ -- HEAD 
master &&
+       test_must_fail git merge-recursive --find-renames=75 HEAD^ -- HEAD 
master &&
        check_find_renames_75
 '
 
 test_expect_success 'exact renames only' '
        git read-tree --reset -u HEAD &&
-       test_must_fail git merge-recursive --rename-threshold=100% HEAD^ -- 
HEAD master &&
+       test_must_fail git merge-recursive --find-renames=100% HEAD^ -- HEAD 
master &&
        check_find_renames_100
 '
 
 test_expect_success 'rename threshold is truncated' '
        git read-tree --reset -u HEAD &&
-       test_must_fail git merge-recursive --rename-threshold=200% HEAD^ -- 
HEAD master &&
+       test_must_fail git merge-recursive --find-renames=200% HEAD^ -- HEAD 
master &&
        check_find_renames_100
 '
 
@@ -143,12 +143,36 @@ test_expect_success 'disabled rename detection' '
        check_no_renames
 '
 
-test_expect_success 'last wins in --rename-threshold=<m> 
--rename-threshold=<n>' '
+test_expect_success 'last wins in --find-renames=<m> --find-renames=<n>' '
        git read-tree --reset -u HEAD &&
-       test_must_fail git merge-recursive --rename-threshold=25 
--rename-threshold=75 HEAD^ -- HEAD master &&
+       test_must_fail git merge-recursive --find-renames=25 --find-renames=75 
HEAD^ -- HEAD master &&
        check_find_renames_75
 '
 
+test_expect_success '--find-renames is equivalent to --find-renames=5' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --find-renames=25 --find-renames 
HEAD^ -- HEAD master &&
+       check_find_renames_50
+'
+
+test_expect_success 'last wins in --no-renames --find-renames' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --no-renames --find-renames HEAD^ -- 
HEAD master &&
+       check_find_renames_50
+'
+
+test_expect_success 'last wins in --find-renames --no-renames' '
+       git read-tree --reset -u HEAD &&
+       git merge-recursive --find-renames --no-renames HEAD^ -- HEAD master &&
+       check_no_renames
+'
+
+test_expect_success 'rename-threshold=<n> is a synonym for find-renames=<n>' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --rename-threshold=25 HEAD^ -- HEAD 
master &&
+       check_find_renames_25
+'
+
 test_expect_success 'last wins in --no-renames --rename-threshold=<n>' '
        git read-tree --reset -u HEAD &&
        test_must_fail git merge-recursive --no-renames --rename-threshold=25 
HEAD^ -- HEAD master &&
@@ -161,4 +185,16 @@ test_expect_success 'last wins in --rename-threshold=<n> 
--no-renames' '
        check_no_renames
 '
 
+test_expect_success 'last wins in --rename-threshold=<n> --find-renames' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --rename-threshold=25 --find-renames 
HEAD^ -- HEAD master &&
+       check_find_renames_50
+'
+
+test_expect_success 'last wins in --find-renames --rename-threshold=<n>' '
+       git read-tree --reset -u HEAD &&
+       test_must_fail git merge-recursive --find-renames --rename-threshold=25 
HEAD^ -- HEAD master &&
+       check_find_renames_25
+'
+
 test_done
-- 
2.7.1.342.gf5bb636

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to