Index: mercurial/merge.py =================================================================== --- mercurial/merge.py +++ mercurial/merge.py @@ -646,6 +646,14 @@ return config def _checkunknownfile(repo, wctx, mctx, f, f2=None): + if wctx.isinmemory(): + # Nothing to do in IMM because nothing in the "working copy" can be an + # unknown file. + # + # Note that we should bail out here, not in ``_checkunknownfiles()``, + # because that function does other useful work. + return False + if f2 is None: f2 = f return (repo.wvfs.audit.check(f) @@ -653,7 +661,7 @@ and repo.dirstate.normalize(f) not in repo.dirstate and mctx[f2].cmp(wctx[f])) -def _checkunknowndirs(repo, f): +def _checkunknowndirs(repo, wctx, f): """ Look for any unknown files or directories that may have a path conflict with a file. If any path prefix of the file exists as a file or link, @@ -663,6 +671,9 @@ Returns the shortest path at which a conflict occurs, or None if there is no conflict. """ + if wctx.isinmemory(): + # Nothing to do in IMM for the same reason as ``_checkunknownfile``. + return False # Check for path prefixes that exist as unknown files. for p in reversed(list(util.finddirs(f))): @@ -706,7 +717,7 @@ if _checkunknownfile(repo, wctx, mctx, f): fileconflicts.add(f) elif pathconfig and f not in wctx: - path = _checkunknowndirs(repo, f) + path = _checkunknowndirs(repo, wctx, f) if path is not None: pathconflicts.add(path) elif m == 'dg':