D320: peer: remove non iterating batcher (API)
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Thu Aug 10 06:47:42 UTC 2017
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
The last use of this API was removed in https://phab.mercurial-scm.org/rHGb6e71f8af5b8710139b64706a375b3f16eb1241e 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().
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D320
AFFECTED FILES
mercurial/peer.py
mercurial/wireproto.py
tests/test-wireproto.py
CHANGE DETAILS
diff --git a/tests/test-wireproto.py b/tests/test-wireproto.py
--- a/tests/test-wireproto.py
+++ b/tests/test-wireproto.py
@@ -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()])
diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
--- a/mercurial/wireproto.py
+++ b/mercurial/wireproto.py
@@ -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
diff --git a/mercurial/peer.py b/mercurial/peer.py
--- a/mercurial/peer.py
+++ b/mercurial/peer.py
@@ -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.
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list