Index: mercurial/filemerge.py =================================================================== --- mercurial/filemerge.py +++ mercurial/filemerge.py @@ -244,6 +244,12 @@ ui = repo.ui fd = fcd.path() + # Avoid prompting during an in-memory merge since it doesn't support merge + # conflicts. + if fcd.ctx().isinmemory(): + raise error.InMemoryMergeConflictsError('in-memory merge does not ' + 'support file conflicts') + prompts = partextras(labels) prompts['fd'] = fd try: @@ -468,11 +474,10 @@ a = _workingpath(repo, fcd) fd = fcd.path() - # Run ``flushall()`` to make any missing folders the following wwrite - # calls might be depending on. from . import context if isinstance(fcd, context.overlayworkingfilectx): - fcd.ctx().flushall() + raise error.InMemoryMergeConflictsError('in-memory merge does not ' + 'support the :dump tool.') util.writefile(a + ".local", fcd.decodeddata()) repo.wwrite(fd + ".other", fco.data(), fco.flags()) @@ -691,10 +696,10 @@ onfailure = _("merging %s failed!\n") precheck = None - # If using deferred writes, must flush any deferred contents if running - # an external merge tool since it has arbitrary access to the working - # copy. - wctx.flushall() + if wctx.isinmemory(): + raise error.InMemoryMergeConflictsError('in-memory merge does not ' + 'support external merge ' + 'tools') toolconf = tool, toolpath, binary, symlink @@ -713,6 +718,10 @@ if precheck and not precheck(repo, mynode, orig, fcd, fco, fca, toolconf): if onfailure: + if wctx.isinmemory(): + raise error.InMemoryMergeConflictsError('in-memory merge does ' + 'not support merge ' + 'conflicts') ui.warn(onfailure % fd) return True, 1, False @@ -739,6 +748,10 @@ if r: if onfailure: + if wctx.isinmemory(): + raise error.InMemoryMergeConflictsError('in-memory merge ' + 'does not support ' + 'merge conflicts') ui.warn(onfailure % fd) _onfilemergefailure(ui)