# HG changeset patch # User Martin von Zweigbergk # Date 2019-02-15 06:46:18 # Node ID 58d50c697dc723b1ed62fe78df8b67cb1f020b09 # Parent 3f94deee167ce20ae36ef692ae3a62f819d856f8 copies: filter out copies when target is not in destination manifest When chaining a series of commits that copied a file with a series that removed the destination file, we would still include the copy in the result. Similar to the previous patch, I have checked that `hg status --copies` is not affected by this bug, but I wouldn't be surprised if some commands are. Differential Revision: https://phab.mercurial-scm.org/D5989 diff --git a/mercurial/copies.py b/mercurial/copies.py --- a/mercurial/copies.py +++ b/mercurial/copies.py @@ -124,10 +124,13 @@ def _chain(src, dst, a, b): # file is a copy of an existing file t[k] = v - # remove criss-crossed copies for k, v in list(t.items()): + # remove criss-crossed copies if k in src and v in dst: del t[k] + # remove copies to files that were then removed + elif k not in dst: + del t[k] return t diff --git a/tests/test-copies.t b/tests/test-copies.t --- a/tests/test-copies.t +++ b/tests/test-copies.t @@ -194,9 +194,7 @@ Fork renames x to y on one side and remo |/ x y o 0 add x x -BROKEN: x doesn't exist here $ hg debugpathcopies 1 2 - y -> x Copies via null revision (there shouldn't be any) $ newrepo