comparison mercurial/context.py @ 42859: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
comparison
equal deleted inserted replaced
42858:170b070ec6a5 42859:2b869a515ba6
1556 p1copies = {} 1556 p1copies = {}
1557 p2copies = {} 1557 p2copies = {}
1558 parents = self._repo.dirstate.parents() 1558 parents = self._repo.dirstate.parents()
1559 p1manifest = self._repo[parents[0]].manifest() 1559 p1manifest = self._repo[parents[0]].manifest()
1560 p2manifest = self._repo[parents[1]].manifest() 1560 p2manifest = self._repo[parents[1]].manifest()
1561 changedset = set(self.added()) | set(self.modified())
1561 narrowmatch = self._repo.narrowmatch() 1562 narrowmatch = self._repo.narrowmatch()
1562 for dst, src in self._repo.dirstate.copies().items(): 1563 for dst, src in self._repo.dirstate.copies().items():
1563 if not narrowmatch(dst): 1564 if dst not in changedset or not narrowmatch(dst):
1564 continue 1565 continue
1565 if src in p1manifest: 1566 if src in p1manifest:
1566 p1copies[dst] = src 1567 p1copies[dst] = src
1567 elif src in p2manifest: 1568 elif src in p2manifest:
1568 p2copies[dst] = src 1569 p2copies[dst] = src