mercurial/simplemerge.py
changeset 33908 4074de97b512
parent 33907 1ad3085239ad
child 33932 3b2a002ef685
equal deleted inserted replaced
33907:1ad3085239ad 33908:4074de97b512
   434         # Maintain that behavior today for BC, though perhaps in the future
   434         # Maintain that behavior today for BC, though perhaps in the future
   435         # it'd be worth considering whether merging encoded data (what the
   435         # it'd be worth considering whether merging encoded data (what the
   436         # repository usually sees) might be more useful.
   436         # repository usually sees) might be more useful.
   437         return _verifytext(ctx.decodeddata(), ctx.path(), ui, opts)
   437         return _verifytext(ctx.decodeddata(), ctx.path(), ui, opts)
   438 
   438 
   439     class ctxwriter(object):
       
   440         def __init__(self, ctx):
       
   441             self.ctx = ctx
       
   442             self.text = ""
       
   443 
       
   444         def write(self, text):
       
   445             self.text += text
       
   446 
       
   447         def close(self):
       
   448             self.ctx.write(self.text, self.ctx.flags())
       
   449 
       
   450     mode = opts.get('mode','merge')
   439     mode = opts.get('mode','merge')
   451     name_a, name_b, name_base = None, None, None
   440     name_a, name_b, name_base = None, None, None
   452     if mode != 'union':
   441     if mode != 'union':
   453         name_a, name_b, name_base = _picklabels([localctx.path(),
   442         name_a, name_b, name_base = _picklabels([localctx.path(),
   454                                                  otherctx.path(), None],
   443                                                  otherctx.path(), None],
   458         localtext = readctx(localctx)
   447         localtext = readctx(localctx)
   459         basetext = readctx(basectx)
   448         basetext = readctx(basectx)
   460         othertext = readctx(otherctx)
   449         othertext = readctx(otherctx)
   461     except error.Abort:
   450     except error.Abort:
   462         return 1
   451         return 1
   463 
       
   464     if opts.get('print'):
       
   465         out = ui.fout
       
   466     else:
       
   467         out = ctxwriter(localctx)
       
   468 
   452 
   469     m3 = Merge3Text(basetext, localtext, othertext)
   453     m3 = Merge3Text(basetext, localtext, othertext)
   470     extrakwargs = {
   454     extrakwargs = {
   471             "localorother": opts.get("localorother", None),
   455             "localorother": opts.get("localorother", None),
   472             'minimize': True,
   456             'minimize': True,
   477         extrakwargs['end_marker'] = None
   461         extrakwargs['end_marker'] = None
   478     elif name_base is not None:
   462     elif name_base is not None:
   479         extrakwargs['base_marker'] = '|||||||'
   463         extrakwargs['base_marker'] = '|||||||'
   480         extrakwargs['name_base'] = name_base
   464         extrakwargs['name_base'] = name_base
   481         extrakwargs['minimize'] = False
   465         extrakwargs['minimize'] = False
       
   466 
       
   467     mergedtext = ""
   482     for line in m3.merge_lines(name_a=name_a, name_b=name_b,
   468     for line in m3.merge_lines(name_a=name_a, name_b=name_b,
   483                                **pycompat.strkwargs(extrakwargs)):
   469                                **pycompat.strkwargs(extrakwargs)):
   484         out.write(line)
   470         if opts.get('print'):
       
   471             ui.fout.write(line)
       
   472         else:
       
   473             mergedtext += line
   485 
   474 
   486     if not opts.get('print'):
   475     if not opts.get('print'):
   487         out.close()
   476         localctx.write(mergedtext, localctx.flags())
   488 
   477 
   489     if m3.conflicts and not mode == 'union':
   478     if m3.conflicts and not mode == 'union':
   490         return 1
   479         return 1