Comments
Patch
@@ -169,6 +169,7 @@
# Otherwise your filter will have to recompute all its branches cache
# from scratch (very slow).
filtertable = {
+ b'notreally': lambda repo, visibilityexceptions=None: frozenset(),
b'visible': computehidden,
b'visible-hidden': computehidden,
b'served.hidden': computesecret,
@@ -336,6 +337,24 @@
return super(filteredchangelogmixin, self).flags(rev)
+def poisonwalktoheads(unfichangelog):
+ cl = copy.copy(unfichangelog)
+
+ def poison(*args, **kwargs):
+ raise error.ProgrammingError('called method on changelog that requries '
+ 'filtering, but filtering was not requested')
+
+ class filteredchangelog(cl.__class__):
+ tiprev = poison
+ headrevs = poison
+ __iter__ = poison
+ children = poison
+
+ cl.__class__ = filteredchangelog
+
+ return cl
+
+
class repoview(object):
"""Provide a read/write view of a repo through a filtered changelog
@@ -404,8 +423,13 @@
cl = None
# could have been made None by the previous if
if cl is None:
- # Only filter if there's something to filter
- cl = wrapchangelog(unfichangelog, revs) if revs else unfichangelog
+ if self.filtername == b'notreally':
+ cl = poisonwalktoheads(unfichangelog)
+ elif revs:
+ # Only filter if there's something to filter
+ cl = wrapchangelog(unfichangelog, revs)
+ else:
+ cl = unfichangelog
object.__setattr__(self, '_clcache', cl)
object.__setattr__(self, '_clcachekey', newkey)
return cl
@@ -174,7 +174,7 @@
if not kwargs.get(b'rev') and not kwargs.get(b'change'):
use_unfiltered = True
- return repo.unfiltered() if use_unfiltered else repo
+ return repo.filtered(b'notreally') if use_unfiltered else repo
# Commands start here, listed alphabetically