D4974: httppeer: expose API descriptor on httpv2peer

indygreg (Gregory Szorc) phabricator at mercurial-scm.org
Fri Oct 12 11:15:59 EDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rHGdac438b7346e: httppeer: expose API descriptor on httpv2peer (authored by indygreg, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D4974?vs=11840&id=11881

REVISION DETAIL
  https://phab.mercurial-scm.org/D4974

AFFECTED FILES
  mercurial/httppeer.py
  mercurial/repository.py
  tests/test-check-interfaces.py

CHANGE DETAILS

diff --git a/tests/test-check-interfaces.py b/tests/test-check-interfaces.py
--- a/tests/test-check-interfaces.py
+++ b/tests/test-check-interfaces.py
@@ -106,10 +106,7 @@
     ziverify.verifyClass(repository.ipeerbase, httppeer.httppeer)
     checkzobject(httppeer.httppeer(None, None, None, dummyopener(), None, None))
 
-    ziverify.verifyClass(repository.ipeerconnection,
-                         httppeer.httpv2peer)
-    ziverify.verifyClass(repository.ipeercapabilities,
-                         httppeer.httpv2peer)
+    ziverify.verifyClass(repository.ipeerv2, httppeer.httpv2peer)
     checkzobject(httppeer.httpv2peer(None, b'', b'', None, None, None))
 
     ziverify.verifyClass(repository.ipeerbase,
diff --git a/mercurial/repository.py b/mercurial/repository.py
--- a/mercurial/repository.py
+++ b/mercurial/repository.py
@@ -312,6 +312,12 @@
     All peer instances must conform to this interface.
     """
 
+class ipeerv2(ipeerconnection, ipeercapabilities, ipeerrequests):
+    """Unified peer interface for wire protocol version 2 peers."""
+
+    apidescriptor = interfaceutil.Attribute(
+        """Data structure holding description of server API.""")
+
 @interfaceutil.implementer(ipeerbase)
 class peer(object):
     """Base class for peer repositories."""
diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py
--- a/mercurial/httppeer.py
+++ b/mercurial/httppeer.py
@@ -744,14 +744,12 @@
         while handler.readdata(resp):
             pass
 
-# TODO implement interface for version 2 peers
- at interfaceutil.implementer(repository.ipeerconnection,
-                           repository.ipeercapabilities,
-                           repository.ipeerrequests)
+ at interfaceutil.implementer(repository.ipeerv2)
 class httpv2peer(object):
     def __init__(self, ui, repourl, apipath, opener, requestbuilder,
                  apidescriptor):
         self.ui = ui
+        self.apidescriptor = apidescriptor
 
         if repourl.endswith('/'):
             repourl = repourl[:-1]
@@ -761,7 +759,6 @@
         self._apiurl = '%s/%s' % (repourl, apipath)
         self._opener = opener
         self._requestbuilder = requestbuilder
-        self._descriptor = apidescriptor
 
         self._redirect = wireprotov2peer.supportedredirects(ui, apidescriptor)
 
@@ -806,7 +803,7 @@
 
         # Alias command-* to presence of command of that name.
         if name.startswith('command-'):
-            return name[len('command-'):] in self._descriptor['commands']
+            return name[len('command-'):] in self.apidescriptor['commands']
 
         return False
 
@@ -826,7 +823,7 @@
 
     def commandexecutor(self):
         return httpv2executor(self.ui, self._opener, self._requestbuilder,
-                              self._apiurl, self._descriptor, self._redirect)
+                              self._apiurl, self.apidescriptor, self._redirect)
 
 # Registry of API service names to metadata about peers that handle it.
 #



To: indygreg, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list