]> git.ipfire.org Git - thirdparty/git.git/commitdiff
merge-recursive: option to disable renames
authorFelipe Gonçalves Assis <felipeg.assis@gmail.com>
Wed, 17 Feb 2016 03:15:25 +0000 (01:15 -0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Feb 2016 18:20:51 +0000 (10:20 -0800)
The recursive strategy turns on rename detection by default. Add a
strategy option to disable rename detection even for exact renames.

Signed-off-by: Felipe Gonçalves Assis <felipegassis@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/merge-strategies.txt
merge-recursive.c
merge-recursive.h

index 7bbd19b30032ca76966cbcf44a0b5b738c8f5ced..1a5e1974a559a685f3231ff29c926c799ebcc1bf 100644 (file)
@@ -81,8 +81,14 @@ no-renormalize;;
        Disables the `renormalize` option.  This overrides the
        `merge.renormalize` configuration variable.
 
+no-renames;;
+       Turn off rename detection.
+       See also linkgit:git-diff[1] `--no-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`.
 
 subtree[=<path>];;
index 8eabde20fbe030a1242cf934d6e2e4cdb6ac14e7..6dd0a111f7f00a2efb477648d766044763f49da1 100644 (file)
@@ -482,6 +482,9 @@ static struct string_list *get_renames(struct merge_options *o,
        struct diff_options opts;
 
        renames = xcalloc(1, sizeof(struct string_list));
+       if (!o->detect_rename)
+               return renames;
+
        diff_setup(&opts);
        DIFF_OPT_SET(&opts, RECURSIVE);
        DIFF_OPT_CLR(&opts, RENAME_EMPTY);
@@ -2039,6 +2042,7 @@ void init_merge_options(struct merge_options *o)
        o->diff_rename_limit = -1;
        o->merge_rename_limit = -1;
        o->renormalize = 0;
+       o->detect_rename = 1;
        merge_recursive_config(o);
        if (getenv("GIT_MERGE_VERBOSITY"))
                o->verbosity =
@@ -2088,9 +2092,12 @@ int parse_merge_opt(struct merge_options *o, const char *s)
                o->renormalize = 1;
        else if (!strcmp(s, "no-renormalize"))
                o->renormalize = 0;
+       else if (!strcmp(s, "no-renames"))
+               o->detect_rename = 0;
        else if (skip_prefix(s, "rename-threshold=", &arg)) {
                if ((o->rename_score = parse_rename_score(&arg)) == -1 || *arg != 0)
                        return -1;
+               o->detect_rename = 1;
        }
        else
                return -1;
index 9e090a347016ea715acf8d26ec5527f033b94ba1..52f0201f68a30114345cbfcc8b3d6204174facfd 100644 (file)
@@ -17,6 +17,7 @@ struct merge_options {
        unsigned renormalize : 1;
        long xdl_opts;
        int verbosity;
+       int detect_rename;
        int diff_rename_limit;
        int merge_rename_limit;
        int rename_score;