copies: respect narrowmatcher in "parent -> working dir" case
I don't know when this case happens and we don't seem to have tests
for it, but let's fix it anyway since I happened to notice it.
Differential Revision: https://phab.mercurial-scm.org/D5987
--- a/mercurial/copies.py Wed Feb 20 15:39:01 2019 -0800
+++ b/mercurial/copies.py Tue Feb 19 10:31:06 2019 -0800
@@ -141,8 +141,8 @@
if limit >= 0 and not f.isintroducedafter(limit):
return None
-def _dirstatecopies(d, match=None):
- ds = d._repo.dirstate
+def _dirstatecopies(repo, match=None):
+ ds = repo.dirstate
c = ds.copies().copy()
for k in list(c):
if ds[k] not in 'anm' or (match and not match(k)):
@@ -221,11 +221,11 @@
if b.rev() is None:
if a == b.p1():
# short-circuit to avoid issues with merge states
- return _dirstatecopies(b, match)
+ return _dirstatecopies(b._repo, match)
cm = _committedforwardcopies(a, b.p1(), match)
# combine copies from dirstate if necessary
- return _chain(a, b, cm, _dirstatecopies(b, match))
+ return _chain(a, b, cm, _dirstatecopies(b._repo, match))
return _committedforwardcopies(a, b, match)
def _backwardrenames(a, b):
@@ -391,9 +391,11 @@
if not c1 or not c2 or c1 == c2:
return {}, {}, {}, {}, {}
+ narrowmatch = c1.repo().narrowmatch()
+
# avoid silly behavior for parent -> working dir
if c2.node() is None and c1.node() == repo.dirstate.p1():
- return repo.dirstate.copies(), {}, {}, {}, {}
+ return _dirstatecopies(repo, narrowmatch), {}, {}, {}, {}
copytracing = repo.ui.config('experimental', 'copytrace')
boolctrace = stringutil.parsebool(copytracing)