Mercurial > public > mercurial-scm > hg
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 |