[Updated] D11980: simplemerge: make minimize() a free function
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Mon Jan 17 13:15:56 UTC 2022
Closed by commit rHGa0cb162369ce: simplemerge: make minimize() a free function (authored by martinvonz).
This revision was automatically updated to reflect the committed changes.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D11980?vs=31635&id=31674
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D11980/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D11980
AFFECTED FILES
mercurial/simplemerge.py
CHANGE DETAILS
diff --git a/mercurial/simplemerge.py b/mercurial/simplemerge.py
--- a/mercurial/simplemerge.py
+++ b/mercurial/simplemerge.py
@@ -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':
To: martinvonz, #hg-reviewers, Alphare
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20220117/7c69e922/attachment-0002.html>
More information about the Mercurial-patches
mailing list