# HG changeset patch # User Martin von Zweigbergk # Date 2017-12-11 18:24:38 # Node ID 7ddc1e96d9b06694bea6780584e4c779ae406c4f # Parent fed2c040764ef8e4ee66b4832490e33a6b3c0b98 copies: always respect matcher arg to _forwardcopies() The function would ignore the matcher if the dirstate copies were requested. It doesn't matter in practice because all callers used the returned map only for looking up specific files from and those files had already been filtered by the matcher (AFACT). Still, it's a little confusing, so let's make it clearer by respecting the matcher in this case too. Differential Revision: https://phab.mercurial-scm.org/D1695 diff --git a/mercurial/copies.py b/mercurial/copies.py --- a/mercurial/copies.py +++ b/mercurial/copies.py @@ -139,11 +139,11 @@ def _tracefile(fctx, am, limit=-1): if limit >= 0 and f.linkrev() < limit and f.rev() < limit: return None -def _dirstatecopies(d): +def _dirstatecopies(d, match=None): ds = d._repo.dirstate c = ds.copies().copy() for k in list(c): - if ds[k] not in 'anm': + if ds[k] not in 'anm' or (match and not match(k)): del c[k] return c @@ -166,7 +166,7 @@ def _forwardcopies(a, b, match=None): b = w.p1() if a == b: # short-circuit to avoid issues with merge states - return _dirstatecopies(w) + return _dirstatecopies(w, match) # files might have to be traced back to the fctx parent of the last # one-side-only changeset, but not further back than that @@ -202,7 +202,7 @@ def _forwardcopies(a, b, match=None): # combine copies from dirstate if necessary if w is not None: - cm = _chain(a, w, cm, _dirstatecopies(w)) + cm = _chain(a, w, cm, _dirstatecopies(w, match)) return cm