changeset 22342:262c5cc126c1

bundle2: introduce a `getrepocaps` to retrieve the bundle2 caps of a repo This function lets extensions change the bundle2 capabilities of a repository.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Mon, 25 Aug 2014 19:21:47 +0200
parents 2d16b39601b5
children 76677a2c1cfd
files mercurial/bundle2.py mercurial/exchange.py mercurial/localrepo.py mercurial/wireproto.py
diffstat 4 files changed, 13 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/bundle2.py	Mon Aug 25 19:17:06 2014 +0200
+++ b/mercurial/bundle2.py	Mon Aug 25 19:21:47 2014 +0200
@@ -781,6 +781,14 @@
                 'b2x:changegroup': (),
                }
 
+def getrepocaps(repo):
+    """return the bundle2 capabilities for a given repo
+
+    Exists to allow extensions (like evolution) to mutate the
+    capabilities.
+    """
+    return capabilities
+
 def bundle2caps(remote):
     """return the bundlecapabilities of a peer as dict"""
     raw = remote.capable('bundle2-exp')
--- a/mercurial/exchange.py	Mon Aug 25 19:17:06 2014 +0200
+++ b/mercurial/exchange.py	Mon Aug 25 19:21:47 2014 +0200
@@ -465,7 +465,7 @@
     evolve in the future."""
     bundler = bundle2.bundle20(pushop.ui, bundle2.bundle2caps(pushop.remote))
     # create reply capability
-    capsblob = bundle2.encodecaps(bundle2.capabilities)
+    capsblob = bundle2.encodecaps(bundle2.getrepocaps(pushop.repo))
     bundler.newpart('b2x:replycaps', data=capsblob)
     replyhandlers = []
     for partgenname in b2partsgenorder:
@@ -588,7 +588,7 @@
             #
             # This will eventually be unified with the changesets bundle2 push
             bundler = bundle2.bundle20(pushop.ui, b2caps)
-            capsblob = bundle2.encodecaps(pushop.repo.bundle2caps)
+            capsblob = bundle2.encodecaps(bundle2.getrepocaps(pushop.repo))
             bundler.newpart('b2x:replycaps', data=capsblob)
             part2node = []
             enc = pushkey.encode
@@ -922,7 +922,7 @@
 def caps20to10(repo):
     """return a set with appropriate options to use bundle20 during getbundle"""
     caps = set(['HG2X'])
-    capsblob = bundle2.encodecaps(bundle2.capabilities)
+    capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo))
     caps.add('bundle2=' + urllib.quote(capsblob))
     return caps
 
--- a/mercurial/localrepo.py	Mon Aug 25 19:17:06 2014 +0200
+++ b/mercurial/localrepo.py	Mon Aug 25 19:21:47 2014 +0200
@@ -305,7 +305,7 @@
         # required by the tests (or some brave tester)
         if self.ui.configbool('experimental', 'bundle2-exp', False):
             caps = set(caps)
-            capsblob = bundle2.encodecaps(bundle2.capabilities)
+            capsblob = bundle2.encodecaps(bundle2.getrepocaps(self))
             caps.add('bundle2-exp=' + urllib.quote(capsblob))
         return caps
 
--- a/mercurial/wireproto.py	Mon Aug 25 19:17:06 2014 +0200
+++ b/mercurial/wireproto.py	Mon Aug 25 19:21:47 2014 +0200
@@ -609,7 +609,7 @@
         else:
             caps.append('streamreqs=%s' % ','.join(requiredformats))
     if repo.ui.configbool('experimental', 'bundle2-exp', False):
-        capsblob = bundle2.encodecaps(bundle2.capabilities)
+        capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo))
         caps.append('bundle2-exp=' + urllib.quote(capsblob))
     caps.append('unbundle=%s' % ','.join(changegroupmod.bundlepriority))
     caps.append('httpheader=1024')