comparison mercurial/changelog.py @ 24030:828dc8db5515

revlog: add __contains__ for fast membership test Because revlog implements __iter__, "rev in revlog" works but does silly O(n) lookup unexpectedly. So it seems good to add fast version of __contains__. This allows "rev in repo.changelog" in the next patch.
author Yuya Nishihara <yuya@tcha.org>
date Wed, 04 Feb 2015 21:25:57 +0900
parents e44399c494ab
children b5cd8c2f6e65
comparison
equal deleted inserted replaced
24029:e1dbe0b215ae 24030:828dc8db5515
141 """filtered version of revlog.tip""" 141 """filtered version of revlog.tip"""
142 for i in xrange(len(self) -1, -2, -1): 142 for i in xrange(len(self) -1, -2, -1):
143 if i not in self.filteredrevs: 143 if i not in self.filteredrevs:
144 return self.node(i) 144 return self.node(i)
145 145
146 def __contains__(self, rev):
147 """filtered version of revlog.__contains__"""
148 return (revlog.revlog.__contains__(self, rev)
149 and rev not in self.filteredrevs)
150
146 def __iter__(self): 151 def __iter__(self):
147 """filtered version of revlog.__iter__""" 152 """filtered version of revlog.__iter__"""
148 if len(self.filteredrevs) == 0: 153 if len(self.filteredrevs) == 0:
149 return revlog.revlog.__iter__(self) 154 return revlog.revlog.__iter__(self)
150 155