diff mercurial/context.py @ 42865:2b869a515ba6

context: filter out invalid copies from workingctx.p[12]copies() workingctx normally gets its lists of modified, added, removed files etc. based on the dirstate status. Its constructor also accepts a "changes" argument to override the status from the dirstate. This is used for partial commits. If a "changed" argument was passed, we should clearly also filter out copies to those paths, which I had previously missed. This patch adds that filtering and fixes the bugs demonstrated in the previous patch. Differential Revision: https://phab.mercurial-scm.org/D6750
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 19 Aug 2019 15:43:27 -0700
parents e75981b7ce84
children 008e74b34fb7
line wrap: on
line diff
--- a/mercurial/context.py	Mon Aug 19 12:30:02 2019 -0700
+++ b/mercurial/context.py	Mon Aug 19 15:43:27 2019 -0700
@@ -1558,9 +1558,10 @@
         parents = self._repo.dirstate.parents()
         p1manifest = self._repo[parents[0]].manifest()
         p2manifest = self._repo[parents[1]].manifest()
+        changedset = set(self.added()) | set(self.modified())
         narrowmatch = self._repo.narrowmatch()
         for dst, src in self._repo.dirstate.copies().items():
-            if not narrowmatch(dst):
+            if dst not in changedset or not narrowmatch(dst):
                 continue
             if src in p1manifest:
                 p1copies[dst] = src