copies: fix duplicatecopies() with overlay context
The reasoning for this check is in 78d760aa3607 (duplicatecopies: do
not mark items not in the dirstate as copies, 2013-03-28). The check
was then moved to workingfilectx in 754b5117622f (context: add
workingfilectx.markcopied, 2017-10-15) and no corresponding check was
added later when overlayworkingfilectx was added. Rather than adding
the check there, this patch adds a more generic check on the callers
side and removes the check in workingfilectx.markcopied().
Differential Revision: https://phab.mercurial-scm.org/D6380
--- a/mercurial/context.py Wed May 15 16:10:52 2019 -0700
+++ b/mercurial/context.py Wed Jan 09 15:54:45 2019 -0800
@@ -1773,8 +1773,7 @@
def markcopied(self, src):
"""marks this file a copy of `src`"""
- if self._repo.dirstate[self._path] in "nma":
- self._repo.dirstate.copy(src, self._path)
+ self._repo.dirstate.copy(src, self._path)
def clearunknown(self):
"""Removes conflicting items in the working directory so that
--- a/mercurial/copies.py Wed May 15 16:10:52 2019 -0700
+++ b/mercurial/copies.py Wed Jan 09 15:54:45 2019 -0800
@@ -798,4 +798,5 @@
for dst, src in pathcopies(repo[fromrev], repo[rev]).iteritems():
if dst in exclude:
continue
- wctx[dst].markcopied(src)
+ if dst in wctx:
+ wctx[dst].markcopied(src)
--- a/tests/test-rebase-inmemory.t Wed May 15 16:10:52 2019 -0700
+++ b/tests/test-rebase-inmemory.t Wed Jan 09 15:54:45 2019 -0800
@@ -795,12 +795,10 @@
$ hg co -q 0
$ echo a2 > a
$ hg ci -qm 'modify a'
-BROKEN: obviously...
$ hg rebase -r . -d 1 --collapse
rebasing 2:41c4ea50d4cf "modify a" (tip)
merging b and a to b
- abort: a@b977edf6f839: not found in manifest!
- [255]
+ saved backup bundle to $TESTTMP/rebase-rename-collapse/.hg/strip-backup/41c4ea50d4cf-b90b7994-rebase.hg
$ cd ..
Test rebasing when the file we are merging in destination is empty