diff mercurial/copies.py @ 41754:d5edb5d3a337

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
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 14 Feb 2019 22:46:18 -0800
parents 3158cb74fbca
children 49ad315b39ee
line wrap: on
line diff
--- a/mercurial/copies.py	Tue Feb 19 10:45:22 2019 -0800
+++ b/mercurial/copies.py	Thu Feb 14 22:46:18 2019 -0800
@@ -124,10 +124,13 @@
             # 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