From 69c81f74989ea21a73b65d1cc0fd9b1feed07b2e Mon Sep 17 00:00:00 2001 From: Phil Cohen Date: Sun, 13 Aug 2017 22:46:03 -0700 Subject: [PATCH] simplemerge: write merge result to the localctx, if passed Differential Revision: https://phab.mercurial-scm.org/D375 --- mercurial/simplemerge.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/mercurial/simplemerge.py b/mercurial/simplemerge.py index 448bb350d2..006f9cd376 100644 --- a/mercurial/simplemerge.py +++ b/mercurial/simplemerge.py @@ -413,8 +413,8 @@ def simplemerge(ui, localfile, basefile, otherfile, """Performs the simplemerge algorithm. {local|base|other}ctx are optional. If passed, they (local/base/other) will - be read from. You should pass explicit labels in this mode since the default - is to use the file paths.""" + be read from and the merge result written to (local). You should pass + explicit labels in this mode since the default is to use the file paths.""" def readfile(filename): f = open(filename, "rb") text = f.read() @@ -434,6 +434,17 @@ def simplemerge(ui, localfile, basefile, otherfile, return repo.wwritedata(ctx.path(), _verifytext(ctx.data(), ctx.path(), ui, opts)) + class ctxwriter(object): + def __init__(self, ctx): + self.ctx = ctx + self.text = "" + + def write(self, text): + self.text += text + + def close(self): + self.ctx.write(self.text, self.ctx.flags()) + mode = opts.get('mode','merge') if mode == 'union': name_a = None @@ -460,12 +471,14 @@ def simplemerge(ui, localfile, basefile, otherfile, except error.Abort: return 1 - localfile = os.path.realpath(localfile) - if not opts.get('print'): + if opts.get('print'): + out = ui.fout + elif localctx: + out = ctxwriter(localctx) + else: + localfile = os.path.realpath(localfile) opener = vfsmod.vfs(os.path.dirname(localfile)) out = opener(os.path.basename(localfile), "w", atomictemp=True) - else: - out = ui.fout m3 = Merge3Text(basetext, localtext, othertext) extrakwargs = {