mirror of
https://github.com/facebook/sapling.git
synced 2025-01-07 14:10:42 +03:00
d5338b2208
The wirepeer class provides concrete implementations of peer interface methods for calling wire protocol commands. It makes sense for this class to inherit from the peer abstract base class. So we change that. Since httppeer and sshpeer have already been converted to the new interface, peerrepository is no longer adding any value. So it has been removed. httppeer and sshpeer have been updated to reflect the loss of peerrepository and the inheritance of the abstract base class in wirepeer. The code changes in wirepeer are reordering of methods to group by interface. Some Python code in tests was updated to reflect changed APIs. .. api:: peer.peerrepository has been removed. Use repository.peer abstract base class to represent a peer repository. Differential Revision: https://phab.mercurial-scm.org/D338
81 lines
1.7 KiB
Python
81 lines
1.7 KiB
Python
from __future__ import absolute_import, print_function
|
|
|
|
from mercurial import (
|
|
util,
|
|
wireproto,
|
|
)
|
|
stringio = util.stringio
|
|
|
|
class proto(object):
|
|
def __init__(self, args):
|
|
self.args = args
|
|
def getargs(self, spec):
|
|
args = self.args
|
|
args.setdefault('*', {})
|
|
names = spec.split()
|
|
return [args[n] for n in names]
|
|
|
|
class clientpeer(wireproto.wirepeer):
|
|
def __init__(self, serverrepo):
|
|
self.serverrepo = serverrepo
|
|
|
|
@property
|
|
def ui(self):
|
|
return self.serverrepo.ui
|
|
|
|
def url(self):
|
|
return 'test'
|
|
|
|
def local(self):
|
|
return None
|
|
|
|
def peer(self):
|
|
return self
|
|
|
|
def canpush(self):
|
|
return True
|
|
|
|
def close(self):
|
|
pass
|
|
|
|
def capabilities(self):
|
|
return ['batch']
|
|
|
|
def _call(self, cmd, **args):
|
|
return wireproto.dispatch(self.serverrepo, proto(args), cmd)
|
|
|
|
def _callstream(self, cmd, **args):
|
|
return stringio(self._call(cmd, **args))
|
|
|
|
@wireproto.batchable
|
|
def greet(self, name):
|
|
f = wireproto.future()
|
|
yield {'name': mangle(name)}, f
|
|
yield unmangle(f.value)
|
|
|
|
class serverrepo(object):
|
|
def greet(self, name):
|
|
return "Hello, " + name
|
|
|
|
def filtered(self, name):
|
|
return self
|
|
|
|
def mangle(s):
|
|
return ''.join(chr(ord(c) + 1) for c in s)
|
|
def unmangle(s):
|
|
return ''.join(chr(ord(c) - 1) for c in s)
|
|
|
|
def greet(repo, proto, name):
|
|
return mangle(repo.greet(unmangle(name)))
|
|
|
|
wireproto.commands['greet'] = (greet, 'name',)
|
|
|
|
srv = serverrepo()
|
|
clt = clientpeer(srv)
|
|
|
|
print(clt.greet("Foobar"))
|
|
b = clt.iterbatch()
|
|
map(b.greet, ('Fo, =;:<o', 'Bar'))
|
|
b.submit()
|
|
print([r for r in b.results()])
|