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
--- 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()])