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':