Mercurial > hg
changeset 33767:b47fe9733d76
peer: remove non iterating batcher (API)
The last use of this API was removed in b6e71f8af5b8 in 2016. While
not formally deprecated, as of the last commit the code is no longer
explicitly tested. I think the new API has existed long enough for
people to transition to it.
I also have plans to more formalize the peer API and removing batch()
makes that work easier.
I'm not convinced the current client-side API around batching is
great. But it's the best we have at the moment.
.. api:: remove peer.batch()
Replace with peer.iterbatch().
Differential Revision: https://phab.mercurial-scm.org/D320
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 09 Aug 2017 23:35:20 -0700 |
parents | 4c706037adef |
children | 82d564d5ac4f |
files | mercurial/peer.py mercurial/wireproto.py tests/test-wireproto.py |
diffstat | 3 files changed, 3 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/peer.py Wed Aug 09 23:29:30 2017 -0700 +++ b/mercurial/peer.py Wed Aug 09 23:35:20 2017 -0700 @@ -49,15 +49,6 @@ def results(self): raise NotImplementedError() -class localbatch(batcher): - '''performs the queued calls directly''' - def __init__(self, local): - batcher.__init__(self) - self.local = local - def submit(self): - for name, args, opts, resref in self.calls: - resref.set(getattr(self.local, name)(*args, **opts)) - class localiterbatcher(iterbatcher): def __init__(self, local): super(iterbatcher, self).__init__() @@ -106,10 +97,6 @@ return plain class peerrepository(object): - - def batch(self): - return localbatch(self) - def iterbatch(self): """Batch requests but allow iterating over the results.
--- a/mercurial/wireproto.py Wed Aug 09 23:29:30 2017 -0700 +++ b/mercurial/wireproto.py Wed Aug 09 23:35:20 2017 -0700 @@ -8,7 +8,6 @@ from __future__ import absolute_import import hashlib -import itertools import os import tempfile @@ -80,38 +79,6 @@ # """ # raise NotImplementedError() -class remotebatch(peer.batcher): - '''batches the queued calls; uses as few roundtrips as possible''' - def __init__(self, remote): - '''remote must support _submitbatch(encbatch) and - _submitone(op, encargs)''' - peer.batcher.__init__(self) - self.remote = remote - def submit(self): - req, rsp = [], [] - for name, args, opts, resref in self.calls: - mtd = getattr(self.remote, name) - batchablefn = getattr(mtd, 'batchable', None) - if batchablefn is not None: - batchable = batchablefn(mtd.im_self, *args, **opts) - encargsorres, encresref = next(batchable) - assert encresref - req.append((name, encargsorres,)) - rsp.append((batchable, encresref, resref,)) - else: - if req: - self._submitreq(req, rsp) - req, rsp = [], [] - resref.set(mtd(*args, **opts)) - if req: - self._submitreq(req, rsp) - def _submitreq(self, req, rsp): - encresults = self.remote._submitbatch(req) - for encres, r in zip(encresults, rsp): - batchable, encresref, resref = r - encresref.set(encres) - resref.set(next(batchable)) - class remoteiterbatcher(peer.iterbatcher): def __init__(self, remote): super(remoteiterbatcher, self).__init__() @@ -253,11 +220,6 @@ See also httppeer.py and sshpeer.py for protocol-specific implementations of this interface. """ - def batch(self): - if self.capable('batch'): - return remotebatch(self) - else: - return peer.localbatch(self) def _submitbatch(self, req): """run batch request <req> on the server
--- a/tests/test-wireproto.py Wed Aug 09 23:29:30 2017 -0700 +++ b/tests/test-wireproto.py Wed Aug 09 23:35:20 2017 -0700 @@ -55,7 +55,7 @@ clt = clientpeer(srv) print(clt.greet("Foobar")) -b = clt.batch() -fs = [b.greet(s) for s in ["Fo, =;:<o", "Bar"]] +b = clt.iterbatch() +map(b.greet, ('Fo, =;:<o', 'Bar')) b.submit() -print([f.value for f in fs]) +print([r for r in b.results()])