]> git.ipfire.org Git - thirdparty/git.git/commitdiff
merge-ort: enable diff-algorithms other than histogram
authorElijah Newren <newren@gmail.com>
Tue, 8 Apr 2025 15:48:37 +0000 (15:48 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 8 Apr 2025 20:59:12 +0000 (13:59 -0700)
The ort merge strategy has always used the histogram diff algorithm.
The recursive merge strategy, in contrast, defaults to the myers
diff algorithm, while allowing it to be changed.

Change the ort merge strategy to allow different diff algorithms, by
removing the hard coded value in merge_start() and instead just making
it a default in init_merge_options().  Technically, this also changes
the default diff algorithm for the recursive backend too, but we're
going to remove the final callers of the recursive backend in the next
two commits.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/merge-strategies.adoc
merge-ort.c
merge-recursive.c

index 59f5ae36ccb1dd52ec6e36e7776e980fde24b1a4..8c87dd70210802b90aca2bb2a2a2b6266fa9d3f2 100644 (file)
@@ -87,6 +87,20 @@ no-renames;;
        configuration variable.
        See also linkgit:git-diff[1] `--no-renames`.
 
+histogram;;
+       Deprecated synonym for `diff-algorithm=histogram`.
+
+patience;;
+       Deprecated synonym for `diff-algorithm=patience`.
+
+diff-algorithm=[histogram|minimal|myers|patience];;
+       Use a different diff algorithm while merging, which can help
+       avoid mismerges that occur due to unimportant matching lines
+       (such as braces from distinct functions).  See also
+       linkgit:git-diff[1] `--diff-algorithm`.  Note that `ort`
+       defaults to `diff-algorithm=histogram`, while regular diffs
+       currently default to the `diff.algorithm` config setting.
+
 subtree[=<path>];;
        This option is a more advanced form of 'subtree' strategy, where
        the strategy makes a guess on how two trees must be shifted to
@@ -111,20 +125,7 @@ recursive::
 For a path that is a submodule, the same caution as 'ort' applies to this
 strategy.
 +
-The 'recursive' strategy takes the same options as 'ort'.  However,
-there are two additional options that 'ort' ignores (not documented
-above) that are potentially useful with the 'recursive' strategy:
-
-patience;;
-       Deprecated synonym for `diff-algorithm=patience`.
-
-diff-algorithm=[patience|minimal|histogram|myers];;
-       Use a different diff algorithm while merging, which can help
-       avoid mismerges that occur due to unimportant matching lines
-       (such as braces from distinct functions).  See also
-       linkgit:git-diff[1] `--diff-algorithm`.  Note that `ort`
-       specifically uses `diff-algorithm=histogram`, while `recursive`
-       defaults to the `diff.algorithm` config setting.
+The 'recursive' strategy takes the same options as 'ort'.
 
 resolve::
        This can only resolve two heads (i.e. the current branch
index 2b7d86aa4ec17e8d3ed8d1f84da56a280c107e36..14a7ae4a6bfe0a013337583d856cbd33ee4a689a 100644 (file)
@@ -4957,9 +4957,6 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
        }
        trace2_region_leave("merge", "sanity checks", opt->repo);
 
-       /* Default to histogram diff.  Actually, just hardcode it...for now. */
-       opt->xdl_opts = DIFF_WITH_ALG(opt, HISTOGRAM_DIFF);
-
        /* Handle attr direction stuff for renormalization */
        if (opt->renormalize)
                git_attr_set_direction(GIT_ATTR_CHECKOUT);
index 884ccf99a58d3b41a5d592ddb1167bc011a3d965..f3df127ad9b03568fc847622489f4b44b099ac8f 100644 (file)
@@ -3981,6 +3981,7 @@ static void init_merge_options(struct merge_options *opt,
        opt->renormalize = 0;
 
        opt->conflict_style = -1;
+       opt->xdl_opts = DIFF_WITH_ALG(opt, HISTOGRAM_DIFF);
 
        merge_recursive_config(opt, ui);
        merge_verbosity = getenv("GIT_MERGE_VERBOSITY");