comparison mercurial/simplemerge.py @ 48547:374bf34c9ffd

simplemerge: make merge_groups() yield only 2-tuples `merge_groups()` currently yields 2-tuples or 4-tuples, making the callers check the first element to decide how to interpret the rest. Let's make it yield only 2-tuples, thereby simplifying life a little for the callers. Differential Revision: https://phab.mercurial-scm.org/D11966
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 06 Jan 2022 09:03:17 -0800
parents 59524cb1cd73
children 88a45330b290
comparison
equal deleted inserted replaced
48546:e91aa800ae5b 48547:374bf34c9ffd
158 Lines taken from a (and equal to b) 158 Lines taken from a (and equal to b)
159 159
160 'b', lines 160 'b', lines
161 Lines taken from b 161 Lines taken from b
162 162
163 'conflict', base_lines, a_lines, b_lines 163 'conflict', (base_lines, a_lines, b_lines)
164 Lines from base were changed to either a or b and conflict. 164 Lines from base were changed to either a or b and conflict.
165 """ 165 """
166 for t in self.merge_regions(): 166 for t in self.merge_regions():
167 what = t[0] 167 what = t[0]
168 if what == b'unchanged': 168 if what == b'unchanged':
172 elif what == b'b': 172 elif what == b'b':
173 yield what, self.b[t[1] : t[2]] 173 yield what, self.b[t[1] : t[2]]
174 elif what == b'conflict': 174 elif what == b'conflict':
175 yield ( 175 yield (
176 what, 176 what,
177 self.base[t[1] : t[2]], 177 (
178 self.a[t[3] : t[4]], 178 self.base[t[1] : t[2]],
179 self.b[t[5] : t[6]], 179 self.a[t[3] : t[4]],
180 self.b[t[5] : t[6]],
181 ),
180 ) 182 )
181 else: 183 else:
182 raise ValueError(what) 184 raise ValueError(what)
183 185
184 def merge_regions(self): 186 def merge_regions(self):
415 417
416 418
417 def _mergediff(m3, name_a, name_b, name_base): 419 def _mergediff(m3, name_a, name_b, name_base):
418 lines = [] 420 lines = []
419 conflicts = False 421 conflicts = False
420 for group in m3.merge_groups(): 422 for what, group_lines in m3.merge_groups():
421 if group[0] == b'conflict': 423 if what == b'conflict':
422 base_lines, a_lines, b_lines = group[1:] 424 base_lines, a_lines, b_lines = group_lines
423 base_text = b''.join(base_lines) 425 base_text = b''.join(base_lines)
424 b_blocks = list( 426 b_blocks = list(
425 mdiff.allblocks( 427 mdiff.allblocks(
426 base_text, 428 base_text,
427 b''.join(b_lines), 429 b''.join(b_lines),
470 lines.append(b"======= %s\n" % name_b) 472 lines.append(b"======= %s\n" % name_b)
471 lines.extend(b_lines) 473 lines.extend(b_lines)
472 lines.append(b">>>>>>>\n") 474 lines.append(b">>>>>>>\n")
473 conflicts = True 475 conflicts = True
474 else: 476 else:
475 lines.extend(group[1]) 477 lines.extend(group_lines)
476 return lines, conflicts 478 return lines, conflicts
477 479
478 480
479 def _resolve(m3, sides): 481 def _resolve(m3, sides):
480 lines = [] 482 lines = []
481 for group in m3.merge_groups(): 483 for what, group_lines in m3.merge_groups():
482 if group[0] == b'conflict': 484 if what == b'conflict':
483 for side in sides: 485 for side in sides:
484 lines.extend(group[side + 1]) 486 lines.extend(group_lines[side])
485 else: 487 else:
486 lines.extend(group[1]) 488 lines.extend(group_lines)
487 return lines 489 return lines
488 490
489 491
490 def simplemerge(ui, localctx, basectx, otherctx, **opts): 492 def simplemerge(ui, localctx, basectx, otherctx, **opts):
491 """Performs the simplemerge algorithm. 493 """Performs the simplemerge algorithm.