--- a/mercurial/simplemerge.py Tue Jan 11 21:56:27 2022 -0800
+++ b/mercurial/simplemerge.py Tue Jan 11 22:03:55 2022 -0800
@@ -214,50 +214,6 @@
ia = aend
ib = bend
- def minimize(self, merge_groups):
- """Trim conflict regions of lines where A and B sides match.
-
- Lines where both A and B have made the same changes at the beginning
- or the end of each merge region are eliminated from the conflict
- region and are instead considered the same.
- """
- for what, lines in merge_groups:
- if what != b"conflict":
- yield what, lines
- continue
- base_lines, a_lines, b_lines = lines
- alen = len(a_lines)
- blen = len(b_lines)
-
- # find matches at the front
- ii = 0
- while ii < alen and ii < blen and a_lines[ii] == b_lines[ii]:
- ii += 1
- startmatches = ii
-
- # find matches at the end
- ii = 0
- while (
- ii < alen and ii < blen and a_lines[-ii - 1] == b_lines[-ii - 1]
- ):
- ii += 1
- endmatches = ii
-
- if startmatches > 0:
- yield b'same', a_lines[:startmatches]
-
- yield (
- b'conflict',
- (
- base_lines,
- a_lines[startmatches : alen - endmatches],
- b_lines[startmatches : blen - endmatches],
- ),
- )
-
- if endmatches > 0:
- yield b'same', a_lines[alen - endmatches :]
-
def find_sync_regions(self):
"""Return a list of sync regions, where both descendants match the base.
@@ -350,6 +306,49 @@
return b'\n'
+def _minimize(merge_groups):
+ """Trim conflict regions of lines where A and B sides match.
+
+ Lines where both A and B have made the same changes at the beginning
+ or the end of each merge region are eliminated from the conflict
+ region and are instead considered the same.
+ """
+ for what, lines in merge_groups:
+ if what != b"conflict":
+ yield what, lines
+ continue
+ base_lines, a_lines, b_lines = lines
+ alen = len(a_lines)
+ blen = len(b_lines)
+
+ # find matches at the front
+ ii = 0
+ while ii < alen and ii < blen and a_lines[ii] == b_lines[ii]:
+ ii += 1
+ startmatches = ii
+
+ # find matches at the end
+ ii = 0
+ while ii < alen and ii < blen and a_lines[-ii - 1] == b_lines[-ii - 1]:
+ ii += 1
+ endmatches = ii
+
+ if startmatches > 0:
+ yield b'same', a_lines[:startmatches]
+
+ yield (
+ b'conflict',
+ (
+ base_lines,
+ a_lines[startmatches : alen - endmatches],
+ b_lines[startmatches : blen - endmatches],
+ ),
+ )
+
+ if endmatches > 0:
+ yield b'same', a_lines[alen - endmatches :]
+
+
def render_minimized(
m3,
name_a=None,
@@ -366,7 +365,7 @@
if name_b:
end_marker = end_marker + b' ' + name_b
merge_groups = m3.merge_groups()
- merge_groups = m3.minimize(merge_groups)
+ merge_groups = _minimize(merge_groups)
lines = []
for what, group_lines in merge_groups:
if what == b'conflict':