httppeer: use peer interface
This is similar to what we did to sshpeer. Quirks and all.
Differential Revision: https://phab.mercurial-scm.org/D337
--- a/mercurial/httppeer.py Sun Aug 06 17:59:48 2017 -0700
+++ b/mercurial/httppeer.py Sun Aug 06 18:00:19 2017 -0700
@@ -21,6 +21,7 @@
error,
httpconnection,
pycompat,
+ repository,
statichttprepo,
url,
util,
@@ -86,7 +87,7 @@
resp.__class__ = readerproxy
-class httppeer(wireproto.wirepeer):
+class httppeer(wireproto.wirepeer, repository.legacypeer):
def __init__(self, ui, path):
self._path = path
self._caps = None
@@ -100,12 +101,15 @@
# urllib cannot handle URLs with embedded user or passwd
self._url, authinfo = u.authinfo()
- self.ui = ui
- self.ui.debug('using %s\n' % self._url)
+ self._ui = ui
+ ui.debug('using %s\n' % self._url)
self._urlopener = url.opener(ui, authinfo)
self._requestbuilder = urlreq.request
+ # TODO remove once peerrepository isn't in inheritance.
+ self._capabilities = self.capabilities
+
def __del__(self):
urlopener = getattr(self, '_urlopener', None)
if urlopener:
@@ -113,15 +117,32 @@
h.close()
getattr(h, "close_all", lambda : None)()
+ # Begin of _basepeer interface.
+
+ @util.propertycache
+ def ui(self):
+ return self._ui
+
def url(self):
return self._path
- # look up capabilities only when needed
+ def local(self):
+ return None
+
+ def peer(self):
+ return self
+
+ def canpush(self):
+ return True
- def _fetchcaps(self):
- self._caps = set(self._call('capabilities').split())
+ def close(self):
+ pass
- def _capabilities(self):
+ # End of _basepeer interface.
+
+ # Begin of _basewirepeer interface.
+
+ def capabilities(self):
if self._caps is None:
try:
self._fetchcaps()
@@ -131,6 +152,13 @@
(' '.join(self._caps or ['none'])))
return self._caps
+ # End of _basewirepeer interface.
+
+ # look up capabilities only when needed
+
+ def _fetchcaps(self):
+ self._caps = set(self._call('capabilities').split())
+
def _callstream(self, cmd, _compressible=False, **args):
if cmd == 'pushkey':
args['data'] = ''