239 """filtered version of revlog.__contains__""" |
238 """filtered version of revlog.__contains__""" |
240 return 0 <= rev < len(self) and rev not in self.filteredrevs |
239 return 0 <= rev < len(self) and rev not in self.filteredrevs |
241 |
240 |
242 def __iter__(self): |
241 def __iter__(self): |
243 """filtered version of revlog.__iter__""" |
242 """filtered version of revlog.__iter__""" |
244 if len(self.filteredrevs) == 0: |
|
245 return revlog.revlog.__iter__(self) |
|
246 |
|
247 |
243 |
248 def filterediter(): |
244 def filterediter(): |
249 for i in pycompat.xrange(len(self)): |
245 for i in pycompat.xrange(len(self)): |
250 if i not in self.filteredrevs: |
246 if i not in self.filteredrevs: |
251 yield i |
247 yield i |
278 for rev in offenders: |
274 for rev in offenders: |
279 raise error.FilteredIndexError(rev) |
275 raise error.FilteredIndexError(rev) |
280 return revs |
276 return revs |
281 |
277 |
282 def headrevs(self, revs=None): |
278 def headrevs(self, revs=None): |
283 if revs is None and self.filteredrevs: |
279 if revs is None: |
284 try: |
280 try: |
285 return self.index.headrevsfiltered(self.filteredrevs) |
281 return self.index.headrevsfiltered(self.filteredrevs) |
286 # AttributeError covers non-c-extension environments and |
282 # AttributeError covers non-c-extension environments and |
287 # old c extensions without filter handling. |
283 # old c extensions without filter handling. |
288 except AttributeError: |
284 except AttributeError: |
289 return self._headrevs() |
285 return self._headrevs() |
290 |
286 |
291 if self.filteredrevs: |
287 revs = self._checknofilteredinrevs(revs) |
292 revs = self._checknofilteredinrevs(revs) |
|
293 return super(filteredchangelog, self).headrevs(revs) |
288 return super(filteredchangelog, self).headrevs(revs) |
294 |
289 |
295 def strip(self, *args, **kwargs): |
290 def strip(self, *args, **kwargs): |
296 # XXX make something better than assert |
291 # XXX make something better than assert |
297 # We can't expect proper strip behavior if we are filtered. |
292 # We can't expect proper strip behavior if we are filtered. |
402 cl.index is not unfiindex or newkey != self._clcachekey |
397 cl.index is not unfiindex or newkey != self._clcachekey |
403 ): |
398 ): |
404 cl = None |
399 cl = None |
405 # could have been made None by the previous if |
400 # could have been made None by the previous if |
406 if cl is None: |
401 if cl is None: |
407 cl = wrapchangelog(unfichangelog, revs) |
402 # Only filter if there's something to filter |
|
403 cl = wrapchangelog(unfichangelog, revs) if revs else unfichangelog |
408 object.__setattr__(self, r'_clcache', cl) |
404 object.__setattr__(self, r'_clcache', cl) |
409 object.__setattr__(self, r'_clcachekey', newkey) |
405 object.__setattr__(self, r'_clcachekey', newkey) |
410 return cl |
406 return cl |
411 |
407 |
412 def unfiltered(self): |
408 def unfiltered(self): |