[PATCH 1 of 2] hidden: move hiddenrevs set on the repository

Pierre-Yves David pierre-yves.david at ens-lyon.org
Mon Jul 16 11:03:56 CDT 2012


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
# Date 1342453486 -7200
# Node ID 34383709336f93d2b68f1e6af7402520375688f2
# Parent  f96331cf75be39299873f4445fd9f0bfeb2462b4
hidden: move hiddenrevs set on the repository

This set is always accessed through the repo for now. Having this set carried by
the changelog make it complicated to:

- initialize it, computing hidden set may involve revset call
- lazy compute it, (1) only the changelog can detect someone access it,
                   (2) only the repo have enought knowledge to compute it.

In later version I expect he changelog to apply filtering itself and the set to
be carried by changelog again.

diff --git a/hgext/graphlog.py b/hgext/graphlog.py
--- a/hgext/graphlog.py
+++ b/hgext/graphlog.py
@@ -434,7 +434,7 @@
     if not opts.get('hidden'):
         # --hidden is still experimental and not worth a dedicated revset
         # yet. Fortunately, filtering revision number is fast.
-        revs = (r for r in revs if r not in repo.changelog.hiddenrevs)
+        revs = (r for r in revs if r not in repo.hiddenrevs)
     else:
         revs = iter(revs)
     return revs, expr, filematcher
diff --git a/mercurial/changelog.py b/mercurial/changelog.py
--- a/mercurial/changelog.py
+++ b/mercurial/changelog.py
@@ -120,8 +120,6 @@
         self._realopener = opener
         self._delayed = False
         self._divert = False
-        # hiddenrevs: revs that should be hidden by command and tools
-        self.hiddenrevs = set()
 
     def delayupdate(self):
         "delay visibility of index updates to other readers"
diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -203,7 +203,7 @@
     def mutable(self):
         return self.phase() > phases.public
     def hidden(self):
-        return self._rev in self._repo.changelog.hiddenrevs
+        return self._rev in self._repo.hiddenrevs
 
     def parents(self):
         """return contexts for each parent changeset"""
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -51,7 +51,12 @@
         # Callback are in the form: func(repo, roots) --> processed root.
         # This list it to be filled by extension during repo setup
         self._phasedefaults = []
-
+        # hiddenrevs: revs that should be hidden by command and tools
+        #
+        # This set is carried on the repo to ease initialisation and lazy
+        # loading it'll probably move back to changelog for efficienty and
+        # consistency reason
+        self.hiddenrevs = set()
         try:
             self.ui.readconfig(self.join("hgrc"), self.root)
             extensions.loadall(self.ui)
diff --git a/tests/test-glog.t b/tests/test-glog.t
--- a/tests/test-glog.t
+++ b/tests/test-glog.t
@@ -2048,7 +2048,7 @@
   > def reposetup(ui, repo):
   >     for line in repo.opener('hidden'):
   >         ctx = repo[line.strip()]
-  >         repo.changelog.hiddenrevs.add(ctx.rev())
+  >         repo.hiddenrevs.add(ctx.rev())
   > EOF
   $ echo '[extensions]' >> .hg/hgrc
   $ echo "hidden=$HGTMP/testhidden.py" >> .hg/hgrc
diff --git a/tests/test-log.t b/tests/test-log.t
--- a/tests/test-log.t
+++ b/tests/test-log.t
@@ -1146,7 +1146,7 @@
   > def reposetup(ui, repo):
   >     for line in repo.opener('hidden'):
   >         ctx = repo[line.strip()]
-  >         repo.changelog.hiddenrevs.add(ctx.rev())
+  >         repo.hiddenrevs.add(ctx.rev())
   > EOF
   $ echo '[extensions]' >> $HGRCPATH
   $ echo "hidden=$HGTMP/testhidden.py" >> $HGRCPATH


More information about the Mercurial-devel mailing list