comparison mercurial/simplemerge.py @ 48551:fb691fa90807

simplemerge: add a specialized function for "union", "local", "other" Differential Revision: https://phab.mercurial-scm.org/D11901
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 07 Dec 2021 22:33:18 -0800
parents 5151b0f6519e
children bd27dad294b7
comparison
equal deleted inserted replaced
48550:47f2a82ae3e4 48551:fb691fa90807
482 else: 482 else:
483 lines.extend(group[1]) 483 lines.extend(group[1])
484 return lines, conflicts 484 return lines, conflicts
485 485
486 486
487 def _resolve(m3, sides):
488 lines = []
489 for group in m3.merge_groups():
490 if group[0] == b'conflict':
491 for side in sides:
492 lines.extend(group[side + 1])
493 else:
494 lines.extend(group[1])
495 return lines
496
497
487 def simplemerge(ui, localctx, basectx, otherctx, **opts): 498 def simplemerge(ui, localctx, basectx, otherctx, **opts):
488 """Performs the simplemerge algorithm. 499 """Performs the simplemerge algorithm.
489 500
490 The merged result is written into `localctx`. 501 The merged result is written into `localctx`.
491 """ 502 """
513 othertext = readctx(otherctx) 524 othertext = readctx(otherctx)
514 except error.Abort: 525 except error.Abort:
515 return 1 526 return 1
516 527
517 m3 = Merge3Text(basetext, localtext, othertext) 528 m3 = Merge3Text(basetext, localtext, othertext)
518 extrakwargs = { 529 conflicts = False
519 "localorother": None,
520 'minimize': True,
521 }
522 if mode == b'union': 530 if mode == b'union':
523 extrakwargs['start_marker'] = None 531 lines = _resolve(m3, (1, 2))
524 extrakwargs['mid_marker'] = None
525 extrakwargs['end_marker'] = None
526 elif mode == b'local': 532 elif mode == b'local':
527 extrakwargs['localorother'] = b'local' 533 lines = _resolve(m3, (1,))
528 elif mode == b'other': 534 elif mode == b'other':
529 extrakwargs['localorother'] = b'other' 535 lines = _resolve(m3, (2,))
530 elif name_base is not None: 536 elif mode == b'mergediff':
531 extrakwargs['base_marker'] = b'|||||||'
532 extrakwargs['name_base'] = name_base
533 extrakwargs['minimize'] = False
534
535 if mode == b'mergediff':
536 lines, conflicts = _mergediff(m3, name_a, name_b, name_base) 537 lines, conflicts = _mergediff(m3, name_a, name_b, name_base)
537 else: 538 else:
539 extrakwargs = {
540 'minimize': True,
541 }
542 if name_base is not None:
543 extrakwargs['base_marker'] = b'|||||||'
544 extrakwargs['name_base'] = name_base
545 extrakwargs['minimize'] = False
538 lines = list( 546 lines = list(
539 m3.merge_lines(name_a=name_a, name_b=name_b, **extrakwargs) 547 m3.merge_lines(name_a=name_a, name_b=name_b, **extrakwargs)
540 ) 548 )
541 conflicts = m3.conflicts and not mode == b'union' 549 conflicts = m3.conflicts
542 550
543 mergedtext = b''.join(lines) 551 mergedtext = b''.join(lines)
544 if opts.get('print'): 552 if opts.get('print'):
545 ui.fout.write(mergedtext) 553 ui.fout.write(mergedtext)
546 else: 554 else: