remotefilelog: consolidate and rename on-disk store requirement
authorAugie Fackler <augie@google.com>
Tue, 16 Oct 2018 17:02:48 -0400
changeset 40510 fc2766860796
parent 40509 ed19958dbf5d
child 40511 466dd4d70bff
remotefilelog: consolidate and rename on-disk store requirement The value of this constant appeared in too many places. While we're here, rename it to be more consistent with our naming conventions for experimental functionality. Differential Revision: https://phab.mercurial-scm.org/D5128
hgext/remotefilelog/__init__.py
hgext/remotefilelog/constants.py
hgext/remotefilelog/debugcommands.py
hgext/remotefilelog/fileserverclient.py
hgext/remotefilelog/remotefilelogserver.py
hgext/remotefilelog/shallowbundle.py
hgext/remotefilelog/shallowrepo.py
tests/test-remotefilelog-clone-tree.t
tests/test-remotefilelog-clone.t
tests/test-remotefilelog-log.t
--- a/hgext/remotefilelog/__init__.py	Tue Oct 16 17:30:47 2018 -0400
+++ b/hgext/remotefilelog/__init__.py	Tue Oct 16 17:02:48 2018 -0400
@@ -209,7 +209,7 @@
 testedwith = 'ships-with-hg-core'
 
 repoclass = localrepo.localrepository
-repoclass._basesupported.add(shallowrepo.requirement)
+repoclass._basesupported.add(constants.SHALLOWREPO_REQUIREMENT)
 
 def uisetup(ui):
     """Wraps user facing Mercurial commands to swap them out with shallow
@@ -231,7 +231,8 @@
 
     # Prevent 'hg manifest --all'
     def _manifest(orig, ui, repo, *args, **opts):
-        if shallowrepo.requirement in repo.requirements and opts.get('all'):
+        if (constants.SHALLOWREPO_REQUIREMENT in repo.requirements
+            and opts.get('all')):
             raise error.Abort(_("--all is not supported in a shallow repo"))
 
         return orig(ui, repo, *args, **opts)
@@ -256,7 +257,7 @@
     if opts.get('shallow'):
         repos = []
         def pull_shallow(orig, self, *args, **kwargs):
-            if shallowrepo.requirement not in self.requirements:
+            if constants.SHALLOWREPO_REQUIREMENT not in self.requirements:
                 repos.append(self.unfiltered())
                 # set up the client hooks so the post-clone update works
                 setupclient(self.ui, self.unfiltered())
@@ -266,7 +267,7 @@
                 if isinstance(self, repoview.repoview):
                     self.__class__.__bases__ = (self.__class__.__bases__[0],
                                                 self.unfiltered().__class__)
-                self.requirements.add(shallowrepo.requirement)
+                self.requirements.add(constants.SHALLOWREPO_REQUIREMENT)
                 self._writerequirements()
 
                 # Since setupclient hadn't been called, exchange.pull was not
@@ -312,14 +313,14 @@
                     return False, None
                 supported, requirements = orig(pullop, bundle2=bundle2)
                 if requirements is not None:
-                    requirements.add(shallowrepo.requirement)
+                    requirements.add(constants.SHALLOWREPO_REQUIREMENT)
                 return supported, requirements
             extensions.wrapfunction(
                 streamclone, 'canperformstreamclone', canperformstreamclone)
         else:
             def stream_in_shallow(orig, repo, remote, requirements):
                 setup_streamout(repo, remote)
-                requirements.add(shallowrepo.requirement)
+                requirements.add(constants.SHALLOWREPO_REQUIREMENT)
                 return orig(repo, remote, requirements)
             extensions.wrapfunction(
                 localrepo.localrepository, 'stream_in', stream_in_shallow)
@@ -349,7 +350,7 @@
     ui.setconfig('hooks', 'commit.prefetch', wcpprefetch)
 
     isserverenabled = ui.configbool('remotefilelog', 'server')
-    isshallowclient = shallowrepo.requirement in repo.requirements
+    isshallowclient = constants.SHALLOWREPO_REQUIREMENT in repo.requirements
 
     if isserverenabled and isshallowclient:
         raise RuntimeError("Cannot be both a server and shallow client.")
@@ -388,7 +389,7 @@
 
     def storewrapper(orig, requirements, path, vfstype):
         s = orig(requirements, path, vfstype)
-        if shallowrepo.requirement in requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in requirements:
             s = shallowstore.wrapstore(s)
 
         return s
@@ -398,7 +399,7 @@
 
     # prefetch files before update
     def applyupdates(orig, repo, actions, wctx, mctx, overwrite, labels=None):
-        if shallowrepo.requirement in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             manifest = mctx.manifest()
             files = []
             for f, args, msg in actions['g']:
@@ -411,7 +412,7 @@
     # Prefetch merge checkunknownfiles
     def checkunknownfiles(orig, repo, wctx, mctx, force, actions,
                           *args, **kwargs):
-        if shallowrepo.requirement in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             files = []
             sparsematch = repo.maybesparsematch(mctx.rev())
             for f, (m, actionargs, msg) in actions.iteritems():
@@ -430,7 +431,7 @@
     # Prefetch files before status attempts to look at their size and contents
     def checklookup(orig, self, files):
         repo = self._repo
-        if shallowrepo.requirement in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             prefetchfiles = []
             for parent in self._parents:
                 for f in files:
@@ -443,7 +444,7 @@
 
     # Prefetch the logic that compares added and removed files for renames
     def findrenames(orig, repo, matcher, added, removed, *args, **kwargs):
-        if shallowrepo.requirement in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             files = []
             parentctx = repo['.']
             for f in removed:
@@ -456,7 +457,7 @@
     # prefetch files before mergecopies check
     def computenonoverlap(orig, repo, c1, c2, *args, **kwargs):
         u1, u2 = orig(repo, c1, c2, *args, **kwargs)
-        if shallowrepo.requirement in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             m1 = c1.manifest()
             m2 = c2.manifest()
             files = []
@@ -488,7 +489,7 @@
     def computeforwardmissing(orig, a, b, match=None):
         missing = list(orig(a, b, match=match))
         repo = a._repo
-        if shallowrepo.requirement in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             mb = b.manifest()
 
             files = []
@@ -515,7 +516,7 @@
             # repo can be None when running in chg:
             # - at startup, reposetup was called because serve is not norepo
             # - a norepo command like "help" is called
-            if repo and shallowrepo.requirement in repo.requirements:
+            if repo and constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
                 repo.fileservice.close()
     extensions.wrapfunction(dispatch, 'runcommand', runcommand)
 
@@ -527,7 +528,7 @@
 
     # prevent strip from stripping remotefilelogs
     def _collectbrokencsets(orig, repo, files, striprev):
-        if shallowrepo.requirement in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             files = list([f for f in files if not repo.shallowmatch(f)])
         return orig(repo, files, striprev)
     extensions.wrapfunction(repair, '_collectbrokencsets', _collectbrokencsets)
@@ -578,7 +579,7 @@
     def filectx(orig, self, path, fileid=None, filelog=None):
         if fileid is None:
             fileid = self.filenode(path)
-        if (shallowrepo.requirement in self._repo.requirements and
+        if (constants.SHALLOWREPO_REQUIREMENT in self._repo.requirements and
             self._repo.shallowmatch(path)):
             return remotefilectx.remotefilectx(self._repo, path,
                 fileid=fileid, changectx=self, filelog=filelog)
@@ -586,7 +587,7 @@
     extensions.wrapfunction(context.changectx, 'filectx', filectx)
 
     def workingfilectx(orig, self, path, filelog=None):
-        if (shallowrepo.requirement in self._repo.requirements and
+        if (constants.SHALLOWREPO_REQUIREMENT in self._repo.requirements and
             self._repo.shallowmatch(path)):
             return remotefilectx.remoteworkingfilectx(self._repo,
                 path, workingctx=self, filelog=filelog)
@@ -596,7 +597,7 @@
     # prefetch required revisions before a diff
     def trydiff(orig, repo, revs, ctx1, ctx2, modified, added, removed,
                 copy, getfilectx, *args, **kwargs):
-        if shallowrepo.requirement in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             prefetch = []
             mf1 = ctx1.manifest()
             for fname in modified + added + removed:
@@ -654,7 +655,7 @@
     return getrenamed
 
 def walkfilerevs(orig, repo, match, follow, revs, fncache):
-    if not shallowrepo.requirement in repo.requirements:
+    if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         return orig(repo, match, follow, revs, fncache)
 
     # remotefilelog's can't be walked in rev order, so throw.
@@ -694,7 +695,7 @@
     a slower, more accurate result, use ``file()``.
     """
 
-    if not shallowrepo.requirement in repo.requirements:
+    if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         return orig(repo, subset, x)
 
     # i18n: "filelog" is a keyword
@@ -802,7 +803,7 @@
         # Protect against any repo or config changes that have happened since
         # this repo was added to the repos file. We'd rather this loop succeed
         # and too much be deleted, than the loop fail and nothing gets deleted.
-        if shallowrepo.requirement not in repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT not in repo.requirements:
             continue
 
         if not util.safehasattr(repo, 'name'):
@@ -851,7 +852,7 @@
         ui.warn(_("warning: no valid repos in repofile\n"))
 
 def log(orig, ui, repo, *pats, **opts):
-    if shallowrepo.requirement not in repo.requirements:
+    if constants.SHALLOWREPO_REQUIREMENT not in repo.requirements:
         return orig(ui, repo, *pats, **opts)
 
     follow = opts.get('follow')
@@ -912,7 +913,7 @@
     """Prefetches in background revisions specified by bgprefetchrevs revset.
     Does background repack if backgroundrepack flag is set in config.
     """
-    shallow = shallowrepo.requirement in repo.requirements
+    shallow = constants.SHALLOWREPO_REQUIREMENT in repo.requirements
     bgprefetchrevs = ui.config('remotefilelog', 'bgprefetchrevs')
     isready = readytofetch(repo)
 
@@ -934,7 +935,7 @@
 def pull(orig, ui, repo, *pats, **opts):
     result = orig(ui, repo, *pats, **opts)
 
-    if shallowrepo.requirement in repo.requirements:
+    if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         # prefetch if it's configured
         prefetchrevset = ui.config('remotefilelog', 'pullprefetch')
         bgrepack = repo.ui.configbool('remotefilelog', 'backgroundrepack')
@@ -974,7 +975,7 @@
     return orig(repo, remote, *args, **kwargs)
 
 def _fileprefetchhook(repo, revs, match):
-    if shallowrepo.requirement in repo.requirements:
+    if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         allfiles = []
         for rev in revs:
             if rev == nodemod.wdirrev or rev is None:
@@ -1070,7 +1071,7 @@
 
     Return 0 on success.
     """
-    if not shallowrepo.requirement in repo.requirements:
+    if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         raise error.Abort(_("repo is not shallow"))
 
     opts = resolveprefetchopts(ui, opts)
--- a/hgext/remotefilelog/constants.py	Tue Oct 16 17:30:47 2018 -0400
+++ b/hgext/remotefilelog/constants.py	Tue Oct 16 17:02:48 2018 -0400
@@ -4,9 +4,9 @@
 
 from mercurial.i18n import _
 
-REQUIREMENT = "remotefilelog"
+NETWORK_CAP_LEGACY_SSH_GETFILES = 'exp-remotefilelog-ssh-getfiles-1'
 
-NETWORK_CAP_LEGACY_SSH_GETFILES = 'exp-remotefilelog-ssh-getfiles-1'
+SHALLOWREPO_REQUIREMENT = "exp-remotefilelog-repo-req-1"
 
 BUNDLE2_CAPABLITY = "exp-remotefilelog-b2cap-1"
 
--- a/hgext/remotefilelog/debugcommands.py	Tue Oct 16 17:30:47 2018 -0400
+++ b/hgext/remotefilelog/debugcommands.py	Tue Oct 16 17:02:48 2018 -0400
@@ -24,7 +24,6 @@
     fileserverclient,
     historypack,
     repack,
-    shallowrepo,
     shallowutil,
 )
 
@@ -93,7 +92,7 @@
     if (opts.get('changelog') or
         opts.get('manifest') or
         opts.get('dir') or
-        not shallowrepo.requirement in repo.requirements or
+        not constants.SHALLOWREPO_REQUIREMENT in repo.requirements or
         not repo.shallowmatch(file_)):
         return orig(ui, repo, file_, **opts)
 
@@ -140,7 +139,7 @@
 
 def debugindexdot(orig, ui, repo, file_):
     """dump an index DAG as a graphviz dot file"""
-    if not shallowrepo.requirement in repo.requirements:
+    if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         return orig(ui, repo, file_)
 
     r = buildtemprevlog(repo, os.path.basename(file_)[:-2])
--- a/hgext/remotefilelog/fileserverclient.py	Tue Oct 16 17:30:47 2018 -0400
+++ b/hgext/remotefilelog/fileserverclient.py	Tue Oct 16 17:02:48 2018 -0400
@@ -83,7 +83,8 @@
                 return
             if not util.safehasattr(self, '_localrepo'):
                 return
-            if constants.REQUIREMENT not in self._localrepo.requirements:
+            if (constants.SHALLOWREPO_REQUIREMENT
+                not in self._localrepo.requirements):
                 return
 
             bundlecaps = opts.get('bundlecaps')
--- a/hgext/remotefilelog/remotefilelogserver.py	Tue Oct 16 17:30:47 2018 -0400
+++ b/hgext/remotefilelog/remotefilelogserver.py	Tue Oct 16 17:02:48 2018 -0400
@@ -30,7 +30,6 @@
 )
 from .  import (
     constants,
-    shallowrepo,
     shallowutil,
 )
 
@@ -133,7 +132,7 @@
     def _walkstreamfiles(orig, repo):
         if state.shallowremote:
             # if we are shallow ourselves, stream our local commits
-            if shallowrepo.requirement in repo.requirements:
+            if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
                 striplen = len(repo.store.path) + 1
                 readdir = repo.store.rawvfs.readdir
                 visit = [os.path.join(repo.store.path, 'data')]
@@ -167,7 +166,7 @@
                     continue
                 yield x
 
-        elif shallowrepo.requirement in repo.requirements:
+        elif constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             # don't allow cloning from a shallow repo to a full repo
             # since it would require fetching every version of every
             # file in order to create the revlogs.
@@ -194,7 +193,7 @@
     # expose remotefilelog capabilities
     def _capabilities(orig, repo, proto):
         caps = orig(repo, proto)
-        if ((shallowrepo.requirement in repo.requirements or
+        if ((constants.SHALLOWREPO_REQUIREMENT in repo.requirements or
             ui.configbool('remotefilelog', 'server'))):
             if isinstance(proto, _sshv1server):
                 # legacy getfiles method which only works over ssh
@@ -279,7 +278,7 @@
     data is a compressed blob with revlog flag and ancestors information. See
     createfileblob for its content.
     """
-    if shallowrepo.requirement in repo.requirements:
+    if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         return '1\0' + _('cannot fetch remote files from shallow repo')
     cachepath = repo.ui.config("remotefilelog", "servercachepath")
     if not cachepath:
@@ -292,7 +291,7 @@
 def getfiles(repo, proto):
     """A server api for requesting particular versions of particular files.
     """
-    if shallowrepo.requirement in repo.requirements:
+    if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         raise error.Abort(_('cannot fetch remote files from shallow repo'))
     if not isinstance(proto, _sshv1server):
         raise error.Abort(_('cannot fetch remote files over non-ssh protocol'))
--- a/hgext/remotefilelog/shallowbundle.py	Tue Oct 16 17:30:47 2018 -0400
+++ b/hgext/remotefilelog/shallowbundle.py	Tue Oct 16 17:02:48 2018 -0400
@@ -26,8 +26,6 @@
 LocalFiles = 1
 AllFiles = 2
 
-requirement = "remotefilelog"
-
 def shallowgroup(cls, self, nodelist, rlog, lookup, units=None, reorder=None):
     if not isinstance(rlog, remotefilelog.remotefilelog):
         for c in super(cls, self).group(nodelist, rlog, lookup,
@@ -56,7 +54,7 @@
 
 class shallowcg1packer(changegroup.cgpacker):
     def generate(self, commonrevs, clnodes, fastpathlinkrev, source):
-        if "remotefilelog" in self._repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in self._repo.requirements:
             fastpathlinkrev = False
 
         return super(shallowcg1packer, self).generate(commonrevs, clnodes,
@@ -71,7 +69,7 @@
             linknodes, commonrevs, source = args
         except ValueError:
             commonrevs, source, mfdicts, fastpathlinkrev, fnodes, clrevs = args
-        if requirement in self._repo.requirements:
+        if constants.SHALLOWREPO_REQUIREMENT in self._repo.requirements:
             repo = self._repo
             if isinstance(repo, bundlerepo.bundlerepository):
                 # If the bundle contains filelogs, we can't pull from it, since
@@ -93,7 +91,7 @@
 
     def shouldaddfilegroups(self, source):
         repo = self._repo
-        if not requirement in repo.requirements:
+        if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
             return AllFiles
 
         if source == "push" or source == "bundle":
@@ -141,7 +139,7 @@
         yield delta
 
 def makechangegroup(orig, repo, outgoing, version, source, *args, **kwargs):
-    if not requirement in repo.requirements:
+    if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         return orig(repo, outgoing, version, source, *args, **kwargs)
 
     original = repo.shallowmatch
@@ -170,7 +168,7 @@
         repo.shallowmatch = original
 
 def addchangegroupfiles(orig, repo, source, revmap, trp, expectedfiles, *args):
-    if not requirement in repo.requirements:
+    if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
         return orig(repo, source, revmap, trp, expectedfiles, *args)
 
     files = 0
--- a/hgext/remotefilelog/shallowrepo.py	Tue Oct 16 17:30:47 2018 -0400
+++ b/hgext/remotefilelog/shallowrepo.py	Tue Oct 16 17:02:48 2018 -0400
@@ -40,7 +40,6 @@
     from mercurial.utils import procutil
     _hgexecutable = procutil.hgexecutable
 
-requirement = "remotefilelog"
 _prefetching = _('prefetching')
 
 # These make*stores functions are global so that other extensions can replace
--- a/tests/test-remotefilelog-clone-tree.t	Tue Oct 16 17:30:47 2018 -0400
+++ b/tests/test-remotefilelog-clone-tree.t	Tue Oct 16 17:02:48 2018 -0400
@@ -28,9 +28,9 @@
   $ cd shallow
   $ cat .hg/requires
   dotencode
+  exp-remotefilelog-repo-req-1
   fncache
   generaldelta
-  remotefilelog
   revlogv1
   store
   treemanifest
@@ -68,9 +68,9 @@
   $ cd shallow2
   $ cat .hg/requires
   dotencode
+  exp-remotefilelog-repo-req-1
   fncache
   generaldelta
-  remotefilelog
   revlogv1
   store
   treemanifest
@@ -109,9 +109,9 @@
   $ ls shallow3/.hg/store/data
   $ cat shallow3/.hg/requires
   dotencode
+  exp-remotefilelog-repo-req-1
   fncache
   generaldelta
-  remotefilelog
   revlogv1
   store
   treemanifest
--- a/tests/test-remotefilelog-clone.t	Tue Oct 16 17:30:47 2018 -0400
+++ b/tests/test-remotefilelog-clone.t	Tue Oct 16 17:02:48 2018 -0400
@@ -25,9 +25,9 @@
   $ cd shallow
   $ cat .hg/requires
   dotencode
+  exp-remotefilelog-repo-req-1
   fncache
   generaldelta
-  remotefilelog
   revlogv1
   store
 
@@ -58,9 +58,9 @@
   $ cd shallow2
   $ cat .hg/requires
   dotencode
+  exp-remotefilelog-repo-req-1
   fncache
   generaldelta
-  remotefilelog
   revlogv1
   store
   $ ls .hg/store/data
@@ -106,8 +106,8 @@
   $ ls shallow3/.hg/store/data
   $ cat shallow3/.hg/requires
   dotencode
+  exp-remotefilelog-repo-req-1
   fncache
   generaldelta
-  remotefilelog
   revlogv1
   store
--- a/tests/test-remotefilelog-log.t	Tue Oct 16 17:30:47 2018 -0400
+++ b/tests/test-remotefilelog-log.t	Tue Oct 16 17:02:48 2018 -0400
@@ -28,9 +28,9 @@
   $ cd shallow
   $ cat .hg/requires
   dotencode
+  exp-remotefilelog-repo-req-1
   fncache
   generaldelta
-  remotefilelog
   revlogv1
   store