D11981: simplemerge: change _minimize() to minimize a single conflict
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Wed Jan 12 06:56:30 UTC 2022
martinvonz created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
This makes the code simpler. It also make the code for each
`render_*()` function more similar.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D11981
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
@@ -306,47 +306,33 @@
return b'\n'
-def _minimize(merge_groups):
+def _minimize(a_lines, b_lines):
"""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)
+ 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 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]
+ # 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
- 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 :]
+ lines_before = a_lines[:startmatches]
+ new_a_lines = a_lines[startmatches : alen - endmatches]
+ new_b_lines = b_lines[startmatches : blen - endmatches]
+ lines_after = a_lines[alen - endmatches :]
+ return lines_before, new_a_lines, new_b_lines, lines_after
def render_minimized(
@@ -365,17 +351,20 @@
if name_b:
end_marker = end_marker + b' ' + name_b
merge_groups = m3.merge_groups()
- merge_groups = _minimize(merge_groups)
lines = []
for what, group_lines in merge_groups:
if what == b'conflict':
+ conflicts = True
base_lines, a_lines, b_lines = group_lines
- conflicts = True
+ minimized = _minimize(a_lines, b_lines)
+ lines_before, a_lines, b_lines, lines_after = minimized
+ lines.extend(lines_before)
lines.append(start_marker + newline)
lines.extend(a_lines)
lines.append(mid_marker + newline)
lines.extend(b_lines)
lines.append(end_marker + newline)
+ lines.extend(lines_after)
else:
lines.extend(group_lines)
return lines, conflicts
To: martinvonz, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list