revset: duplicate spanset.__contains__ to fullreposet for modification
1d7a2771aa36 says we should avoid function calls in __contains__, so
super(fullreposet, self).__contains__(rev) is not an option.
Actually the super call doubled the benchmark result of trivial query:
revisions:
0)
678f53865c68 (tip when I wrote this patch)
1) rev == node.nullrev or super(fullreposet, self).__contains__(rev)
revset #0: tip:0
0) wall 0.008441 comb 0.010000 user 0.010000 sys 0.000000 (best of 282)
1) wall 0.016152 comb 0.010000 user 0.010000 sys 0.000000 (best of 146)
--- a/mercurial/revset.py Sat Jan 10 14:49:50 2015 +0900
+++ b/mercurial/revset.py Sat Jan 10 18:09:25 2015 +0900
@@ -3318,6 +3318,11 @@
def __init__(self, repo):
super(fullreposet, self).__init__(repo)
+ def __contains__(self, rev):
+ hidden = self._hiddenrevs
+ return ((self._start <= rev < self._end)
+ and not (hidden and rev in hidden))
+
def __and__(self, other):
"""As self contains the whole repo, all of the other set should also be
in self. Therefore `self & other = other`.