D2512: wireproto: add transport specific capabilities in the transport
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Fri Mar 2 14:51:10 UTC 2018
indygreg updated this revision to Diff 6341.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D2512?vs=6257&id=6341
REVISION DETAIL
https://phab.mercurial-scm.org/D2512
AFFECTED FILES
mercurial/wireproto.py
mercurial/wireprotoserver.py
mercurial/wireprototypes.py
CHANGE DETAILS
diff --git a/mercurial/wireprototypes.py b/mercurial/wireprototypes.py
--- a/mercurial/wireprototypes.py
+++ b/mercurial/wireprototypes.py
@@ -137,3 +137,12 @@
@abc.abstractmethod
def client(self):
"""Returns a string representation of this client (as bytes)."""
+
+ @abc.abstractmethod
+ def addcapabilities(self, repo, caps):
+ """Adds advertised capabilities specific to this protocol.
+
+ Receives the list of capabilities collected so far.
+
+ Returns a list of capabilities. The passed in argument can be returned.
+ """
diff --git a/mercurial/wireprotoserver.py b/mercurial/wireprotoserver.py
--- a/mercurial/wireprotoserver.py
+++ b/mercurial/wireprotoserver.py
@@ -121,6 +121,24 @@
urlreq.quote(self._req.env.get('REMOTE_HOST', '')),
urlreq.quote(self._req.env.get('REMOTE_USER', '')))
+ def addcapabilities(self, repo, caps):
+ caps.append('httpheader=%d' %
+ repo.ui.configint('server', 'maxhttpheaderlen'))
+ if repo.ui.configbool('experimental', 'httppostargs'):
+ caps.append('httppostargs')
+
+ # FUTURE advertise 0.2rx once support is implemented
+ # FUTURE advertise minrx and mintx after consulting config option
+ caps.append('httpmediatype=0.1rx,0.1tx,0.2tx')
+
+ compengines = wireproto.supportedcompengines(repo.ui, util.SERVERROLE)
+ if compengines:
+ comptypes = ','.join(urlreq.quote(e.wireprotosupport().name)
+ for e in compengines)
+ caps.append('compression=%s' % comptypes)
+
+ return caps
+
# This method exists mostly so that extensions like remotefilelog can
# disable a kludgey legacy method only over http. As of early 2018,
# there are no other known users, so with any luck we can discard this
@@ -368,6 +386,9 @@
client = encoding.environ.get('SSH_CLIENT', '').split(' ', 1)[0]
return 'remote:ssh:' + client
+ def addcapabilities(self, repo, caps):
+ return caps
+
class sshv2protocolhandler(sshv1protocolhandler):
"""Protocol handler for version 2 of the SSH protocol."""
diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
--- a/mercurial/wireproto.py
+++ b/mercurial/wireproto.py
@@ -819,23 +819,7 @@
caps.append('bundle2=' + urlreq.quote(capsblob))
caps.append('unbundle=%s' % ','.join(bundle2.bundlepriority))
- if proto.name == 'http-v1':
- caps.append('httpheader=%d' %
- repo.ui.configint('server', 'maxhttpheaderlen'))
- if repo.ui.configbool('experimental', 'httppostargs'):
- caps.append('httppostargs')
-
- # FUTURE advertise 0.2rx once support is implemented
- # FUTURE advertise minrx and mintx after consulting config option
- caps.append('httpmediatype=0.1rx,0.1tx,0.2tx')
-
- compengines = supportedcompengines(repo.ui, util.SERVERROLE)
- if compengines:
- comptypes = ','.join(urlreq.quote(e.wireprotosupport().name)
- for e in compengines)
- caps.append('compression=%s' % comptypes)
-
- return caps
+ return proto.addcapabilities(repo, caps)
# If you are writing an extension and consider wrapping this function. Wrap
# `_capabilities` instead.
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list