diff -r 176736afa886 -r 8d38eab2777a mercurial/peer.py --- a/mercurial/peer.py Wed Mar 02 14:18:43 2016 -0500 +++ b/mercurial/peer.py Tue Mar 01 18:39:25 2016 -0500 @@ -41,6 +41,14 @@ def submit(self): raise NotImplementedError() +class iterbatcher(batcher): + + def submit(self): + raise NotImplementedError() + + def results(self): + raise NotImplementedError() + class localbatch(batcher): '''performs the queued calls directly''' def __init__(self, local): @@ -50,6 +58,19 @@ 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__() + self.local = local + + def submit(self): + # submit for a local iter batcher is a noop + pass + + def results(self): + for name, args, opts, resref in self.calls: + yield getattr(self.local, name)(*args, **opts) + def batchable(f): '''annotation for batchable methods @@ -91,6 +112,14 @@ def batch(self): return localbatch(self) + def iterbatch(self): + """Batch requests but allow iterating over the results. + + This is to allow interleaving responses with things like + progress updates for clients. + """ + return localiterbatcher(self) + def capable(self, name): '''tell whether repo supports named capability. return False if not supported.