# HG changeset patch # User Yuya Nishihara # Date 2015-01-10 09:09:25 # Node ID 33c7a94d4dd0b28c59d34930f4b8b7d7f9459aa5 # Parent 2de9ee0164255f8d45af85dbab00fe4f6e28298d 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) diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -3318,6 +3318,11 @@ class fullreposet(spanset): 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`.