diff -r 176736afa886 -r 8d38eab2777a mercurial/wireproto.py --- a/mercurial/wireproto.py Wed Mar 02 14:18:43 2016 -0500 +++ b/mercurial/wireproto.py Tue Mar 01 18:39:25 2016 -0500 @@ -114,6 +114,25 @@ encresref.set(encres) resref.set(batchable.next()) +class remoteiterbatcher(peer.iterbatcher): + def __init__(self, remote): + super(remoteiterbatcher, self).__init__() + self._remote = remote + + def submit(self): + """Break the batch request into many patch calls and pipeline them. + + This is mostly valuable over http where request sizes can be + limited, but can be used in other places as well. + """ + rb = self._remote.batch() + rb.calls = self.calls + rb.submit() + + def results(self): + for name, args, opts, resref in self.calls: + yield resref.value + # Forward a couple of names from peer to make wireproto interactions # slightly more sensible. batchable = peer.batchable @@ -193,6 +212,9 @@ def _submitone(self, op, args): return self._call(op, **args) + def iterbatch(self): + return remoteiterbatcher(self) + @batchable def lookup(self, key): self.requirecap('lookup', _('look up remote revision'))