Mercurial > hg
changeset 24405:cbe9d50d9e65
treemanifest: make filesnotin() faster
Same rationale as the previous change.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 03 Mar 2015 13:50:06 -0800 |
parents | 96cccf1e3257 |
children | 1297480ed347 |
files | mercurial/manifest.py |
diffstat | 1 files changed, 14 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/manifest.py Thu Feb 19 17:13:35 2015 -0800 +++ b/mercurial/manifest.py Tue Mar 03 13:50:06 2015 -0800 @@ -482,8 +482,20 @@ def filesnotin(self, m2): '''Set of files in this manifest that are not in the other''' - files = set(self.iterkeys()) - files.difference_update(m2.iterkeys()) + files = set() + def _filesnotin(t1, t2): + for d, m1 in t1._dirs.iteritems(): + if d in t2._dirs: + m2 = t2._dirs[d] + _filesnotin(m1, m2) + else: + files.update(m1.iterkeys()) + + for fn in t1._files.iterkeys(): + if fn not in t2._files: + files.add(t1._subpath(fn)) + + _filesnotin(self, m2) return files @propertycache