D4543: context: don't count deleted files as candidates for path conflicts in IMM
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Wed Sep 12 14:56:09 UTC 2018
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D4543
AFFECTED FILES
mercurial/context.py
tests/test-rebase-inmemory.t
CHANGE DETAILS
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 ..
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:
To: pulkit, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list