diff --git a/mercurial/simplemerge.py b/mercurial/simplemerge.py --- a/mercurial/simplemerge.py +++ b/mercurial/simplemerge.py @@ -413,8 +413,8 @@ """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 @@ 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 @@ 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 = {