# HG changeset patch # User Pulkit Goyal # Date 2018-09-12 14:45:43 # Node ID fa4d16daf1bed54ddf25019f34c74e7065dc14c2 # Parent aa022f8873ea0eb2571df6735e3164cd7c8dcf8f context: don't count deleted files as candidates for path conflicts in IMM This patch makes sure we don't consider the deleted files in our IMM wctx as potential conflicts while calculating paths conflicts. This fixes the bug demonstrated in previous patch. Differential Revision: https://phab.mercurial-scm.org/D4543 diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -1910,14 +1910,19 @@ class overlayworkingctx(committablectx): # 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 @@ Test reporting of path conflicts $ 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 ..