diff -r fed2c040764e -r 7ddc1e96d9b0 mercurial/copies.py --- a/mercurial/copies.py Wed Dec 13 11:21:25 2017 -0800 +++ b/mercurial/copies.py Mon Dec 11 10:24:38 2017 -0800 @@ -139,11 +139,11 @@ 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 @@ 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 @@ # 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