diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py --- a/mercurial/httppeer.py +++ b/mercurial/httppeer.py @@ -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 --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 @@ -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()))