mercurial/repoview.py
changeset 43454 c8e5b3094a1d
parent 43453 61c372100008
child 43492 bad4a26b4607
equal deleted inserted replaced
43453:61c372100008 43454:c8e5b3094a1d
    24 from . import (
    24 from . import (
    25     error,
    25     error,
    26     obsolete,
    26     obsolete,
    27     phases,
    27     phases,
    28     pycompat,
    28     pycompat,
    29     revlog,
       
    30     tags as tagsmod,
    29     tags as tagsmod,
    31     util,
    30     util,
    32 )
    31 )
    33 from .utils import repoviewutil
    32 from .utils import repoviewutil
    34 
    33 
   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):