diff options
| author | Elijah Newren <newren@gmail.com> | 2020-12-13 08:04:10 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2020-12-13 14:18:19 -0800 |
| commit | e4171b1b6d32a147638f52c3199477d3ea161b3e (patch) | |
| tree | efac47a83db9783af35939f2183ad541fbffa9b5 /commit.c | |
| parent | merge-ort: add some high-level algorithm structure (diff) | |
| download | git-e4171b1b6d32a147638f52c3199477d3ea161b3e.tar.gz git-e4171b1b6d32a147638f52c3199477d3ea161b3e.zip | |
merge-ort: port merge_start() from merge-recursive
merge_start() basically does a bunch of sanity checks, then allocates
and initializes opt->priv -- a struct merge_options_internal.
Most of the sanity checks are usable as-is. The
allocation/intialization is a bit different since merge-ort has a very
different merge_options_internal than merge-recursive, but the idea is
the same.
The weirdest part here is that merge-ort and merge-recursive use the
same struct merge_options, even though merge_options has a number of
fields that are oddly specific to merge-recursive's internal
implementation and don't even make sense with merge-ort's high-level
design (e.g. buffer_output, which merge-ort has to always do). I reused
the same data structure because:
* most the fields made sense to both merge algorithms
* making a new struct would have required making new enums or somehow
externalizing them, and that was getting messy.
* it simplifies converting the existing callers by not having to
have different code paths for merge_options setup.
I also marked detect_renames as ignored. We can revisit that later, but
in short: merge-recursive allowed turning off rename detection because
it was sometimes glacially slow. When you speed something up by a few
orders of magnitude, it's worth revisiting whether that justification is
still relevant. Besides, if folks find it's still too slow, perhaps
they have a better scaling case than I could find and maybe it turns up
some more optimizations we can add. If it still is needed as an option,
it is easy to add later.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
0 files changed, 0 insertions, 0 deletions
