# HG changeset patch # User Gregory Szorc # Date 1523469825 25200 # Node ID 01bfe5ad0c5379da027b3c25a2f82f26582d2b22 # Parent fa4b39bb0a073b669f86964fc1d9678d0dcbcc2b httppeer: implement ipeerconnection This is low hanging fruit. We might as well start somewhere. Differential Revision: https://phab.mercurial-scm.org/D3254 diff -r fa4b39bb0a07 -r 01bfe5ad0c53 mercurial/httppeer.py --- a/mercurial/httppeer.py Thu Apr 12 13:25:54 2018 -0400 +++ b/mercurial/httppeer.py Wed Apr 11 11:03:45 2018 -0700 @@ -19,11 +19,15 @@ from .thirdparty import ( cbor, ) +from .thirdparty.zope import ( + interface as zi, +) from . import ( bundle2, error, httpconnection, pycompat, + repository, statichttprepo, url as urlmod, util, @@ -513,6 +517,7 @@ raise exception # TODO implement interface for version 2 peers +@zi.implementer(repository.ipeerconnection) class httpv2peer(object): def __init__(self, ui, repourl, apipath, opener, requestbuilder, apidescriptor): @@ -521,15 +526,32 @@ if repourl.endswith('/'): repourl = repourl[:-1] - self.url = repourl + self._url = repourl self._apipath = apipath self._opener = opener self._requestbuilder = requestbuilder self._descriptor = apidescriptor + # Start of ipeerconnection. + + def url(self): + return self._url + + def local(self): + return None + + def peer(self): + return self + + def canpush(self): + # TODO change once implemented. + return False + def close(self): pass + # End of ipeerconnection. + # TODO require to be part of a batched primitive, use futures. def _call(self, name, **args): """Call a wire protocol command with arguments.""" @@ -554,7 +576,7 @@ 'pull': 'ro', }[permission] - url = '%s/%s/%s/%s' % (self.url, self._apipath, permission, name) + url = '%s/%s/%s/%s' % (self._url, self._apipath, permission, name) # TODO this should be part of a generic peer for the frame-based # protocol. diff -r fa4b39bb0a07 -r 01bfe5ad0c53 tests/test-check-interfaces.py --- a/tests/test-check-interfaces.py Thu Apr 12 13:25:54 2018 -0400 +++ b/tests/test-check-interfaces.py Wed Apr 11 11:03:45 2018 -0700 @@ -92,6 +92,10 @@ httppeer.httppeer) checkzobject(httppeer.httppeer(None, None, None, dummyopener(), None, None)) + ziverify.verifyClass(repository.ipeerconnection, + httppeer.httpv2peer) + checkzobject(httppeer.httpv2peer(None, '', None, None, None, None)) + ziverify.verifyClass(repository.ipeerbase, localrepo.localpeer) checkzobject(localrepo.localpeer(dummyrepo()))