diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -1910,14 +1910,19 @@ # in p1 (test that p1 doesn't any paths matching `path/*`). match = matchmod.match('/', '', [path + '/'], default=b'relpath') matches = self.p1().manifest().matches(match) - if len(matches) > 0: - if len(matches) == 1 and matches.keys()[0] == path: + mfiles = matches.keys() + if len(mfiles) > 0: + if len(mfiles) == 1 and mfiles[0] == path: + return + # omit the files which are deleted in current IMM wctx + mfiles = [m for m in mfiles if self._cache[m]['exists']] + if not mfiles: return raise error.Abort("error: file '%s' cannot be written because " " '%s/' is a folder in %s (containing %d " "entries: %s)" - % (path, path, self.p1(), len(matches), - ', '.join(matches.keys()))) + % (path, path, self.p1(), len(mfiles), + ', '.join(mfiles))) def write(self, path, data, flags='', **kwargs): if data is None: 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 @@ -218,8 +218,25 @@ $ hg rebase -r . -d 5 rebasing 7:855e9797387e "added a back!" (tip) - abort: error: file 'a' cannot be written because 'a/' is a folder in 9b94b9373deb (containing 1 entries: a/a) - [255] + saved backup bundle to $TESTTMP/repo1/repo2/.hg/strip-backup/855e9797387e-81ee4c5d-rebase.hg + + $ hg tglog + @ 7: bb3f02be2688 'added a back!' + | + | o 6: d14530e5e3e6 'added bar' + | | + o | 5: 9b94b9373deb 'added foo' + |/ + o 4: c6ad37a4f250 'a/a' + | + | o 3: 844a7de3e617 'c' + | | + o | 2: 09c044d2cb43 'd' + | | + o | 1: fc055c3b4d33 'b' + |/ + o 0: b173517d0057 'a' + $ cd ..