Add strategy option find-renames, following git-diff interface. This makes the option rename-threshold redundant. Signed-off-by: Felipe Gonçalves Assis <felipegassis@xxxxxxxxx> --- 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html