mercurial/simplemerge.py
changeset 33850 b86fc43e4b73
parent 33849 8b91a4ff23ad
child 33851 aa6c290a77fa
equal deleted inserted replaced
33849:8b91a4ff23ad 33850:b86fc43e4b73
   411 def simplemerge(ui, localfile, basefile, otherfile,
   411 def simplemerge(ui, localfile, basefile, otherfile,
   412                 localctx=None, basectx=None, otherctx=None, repo=None, **opts):
   412                 localctx=None, basectx=None, otherctx=None, repo=None, **opts):
   413     """Performs the simplemerge algorithm.
   413     """Performs the simplemerge algorithm.
   414 
   414 
   415     {local|base|other}ctx are optional. If passed, they (local/base/other) will
   415     {local|base|other}ctx are optional. If passed, they (local/base/other) will
   416     be read from. You should pass explicit labels in this mode since the default
   416     be read from and the merge result written to (local). You should pass
   417     is to use the file paths."""
   417     explicit labels in this mode since the default is to use the file paths."""
   418     def readfile(filename):
   418     def readfile(filename):
   419         f = open(filename, "rb")
   419         f = open(filename, "rb")
   420         text = f.read()
   420         text = f.read()
   421         f.close()
   421         f.close()
   422         return _verifytext(text, filename, ui, opts)
   422         return _verifytext(text, filename, ui, opts)
   431         # what would have been in the working copy). Since merges were run in
   431         # what would have been in the working copy). Since merges were run in
   432         # the working copy, and thus used post-filter data, we do the same to
   432         # the working copy, and thus used post-filter data, we do the same to
   433         # maintain behavior.
   433         # maintain behavior.
   434         return repo.wwritedata(ctx.path(),
   434         return repo.wwritedata(ctx.path(),
   435                                _verifytext(ctx.data(), ctx.path(), ui, opts))
   435                                _verifytext(ctx.data(), ctx.path(), ui, opts))
       
   436 
       
   437     class ctxwriter(object):
       
   438         def __init__(self, ctx):
       
   439             self.ctx = ctx
       
   440             self.text = ""
       
   441 
       
   442         def write(self, text):
       
   443             self.text += text
       
   444 
       
   445         def close(self):
       
   446             self.ctx.write(self.text, self.ctx.flags())
   436 
   447 
   437     mode = opts.get('mode','merge')
   448     mode = opts.get('mode','merge')
   438     if mode == 'union':
   449     if mode == 'union':
   439         name_a = None
   450         name_a = None
   440         name_b = None
   451         name_b = None
   458         basetext = readctx(basectx) if basectx else readfile(basefile)
   469         basetext = readctx(basectx) if basectx else readfile(basefile)
   459         othertext = readctx(otherctx) if otherctx else readfile(otherfile)
   470         othertext = readctx(otherctx) if otherctx else readfile(otherfile)
   460     except error.Abort:
   471     except error.Abort:
   461         return 1
   472         return 1
   462 
   473 
   463     localfile = os.path.realpath(localfile)
   474     if opts.get('print'):
   464     if not opts.get('print'):
   475         out = ui.fout
       
   476     elif localctx:
       
   477         out = ctxwriter(localctx)
       
   478     else:
       
   479         localfile = os.path.realpath(localfile)
   465         opener = vfsmod.vfs(os.path.dirname(localfile))
   480         opener = vfsmod.vfs(os.path.dirname(localfile))
   466         out = opener(os.path.basename(localfile), "w", atomictemp=True)
   481         out = opener(os.path.basename(localfile), "w", atomictemp=True)
   467     else:
       
   468         out = ui.fout
       
   469 
   482 
   470     m3 = Merge3Text(basetext, localtext, othertext)
   483     m3 = Merge3Text(basetext, localtext, othertext)
   471     extrakwargs = {
   484     extrakwargs = {
   472             "localorother": opts.get("localorother", None),
   485             "localorother": opts.get("localorother", None),
   473             'minimize': True,
   486             'minimize': True,