D1746: repoview: add visibilityexceptions as an optional argument to repo.filtered()
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Fri Dec 22 17:56:52 UTC 2017
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
This will help us in having an API where we can pass the filtername and the
visibilityexceptions to get a new repo object.
Visibility exceptions are the revs which must be visible even they should in
theory belong to the hidden set. They are required as there has been desire to
have a functionality to access hidden changesets using certain commands without
passing --hidden. After this patch we can make those changesets visibility
exceptions so that we can access them without requiring a unfiltered repo.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D1746
AFFECTED FILES
mercurial/localrepo.py
mercurial/repoview.py
CHANGE DETAILS
diff --git a/mercurial/repoview.py b/mercurial/repoview.py
--- a/mercurial/repoview.py
+++ b/mercurial/repoview.py
@@ -187,11 +187,13 @@
subclasses of `localrepo`. Eg: `bundlerepo` or `statichttprepo`.
"""
- def __init__(self, repo, filtername):
+ def __init__(self, repo, filtername, visibilityexceptions=None):
object.__setattr__(self, r'_unfilteredrepo', repo)
object.__setattr__(self, r'filtername', filtername)
object.__setattr__(self, r'_clcachekey', None)
object.__setattr__(self, r'_clcache', None)
+ # revs which are exceptions and must not be hidden
+ self._visibilityexceptions = visibilityexceptions
# not a propertycache on purpose we shall implement a proper cache later
@property
@@ -227,11 +229,11 @@
"""Return an unfiltered version of a repo"""
return self._unfilteredrepo
- def filtered(self, name):
+ def filtered(self, name, visibilityexceptions=None):
"""Return a filtered version of a repository"""
- if name == self.filtername:
+ if name == self.filtername and not visibilityexceptions:
return self
- return self.unfiltered().filtered(name)
+ return self.unfiltered().filtered(name, visibilityexceptions)
def __repr__(self):
return r'<%s:%s %r>' % (self.__class__.__name__,
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -675,10 +675,10 @@
Intended to be overwritten by filtered repo."""
return self
- def filtered(self, name):
+ def filtered(self, name, visibilityexceptions=None):
"""Return a filtered version of a repository"""
cls = repoview.newtype(self.unfiltered().__class__)
- return cls(self, name)
+ return cls(self, name, visibilityexceptions)
@repofilecache('bookmarks', 'bookmarks.current')
def _bookmarks(self):
To: pulkit, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list