diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -1826,9 +1826,14 @@ if self._cache[path]['exists']: if self._cache[path]['data']: return self._cache[path]['data'] - else: + elif path in self._wrappedctx: # Must fallback here, too, because we only set flags. return self._wrappedctx[path].data() + else: + # the file was not present in parent, this can be an empty + # backupfile created during merge. Let's return what we have + # in cache + return self._cache[path]['data'] else: raise error.ProgrammingError("No such file or directory: %s" % path) diff --git a/tests/test-rebase-inmemory.t b/tests/test-rebase-inmemory.t --- a/tests/test-rebase-inmemory.t +++ b/tests/test-rebase-inmemory.t @@ -797,5 +797,9 @@ $ hg rebase -r . -d 1 --config ui.merge=internal:merge3 rebasing 2:376089bb8d86 "remove the whitespace again" (tip) merging foo - abort: foo.orig@bb96b8f33f2a: not found in manifest! - [255] + hit merge conflicts; re-running rebase without in-memory merge + rebasing 2:376089bb8d86 "remove the whitespace again" (tip) + merging foo + warning: conflicts while merging foo! (edit, then use 'hg resolve --mark') + unresolved conflicts (see hg resolve, then hg rebase --continue) + [1]