Mercurial > public > mercurial-scm > hg-stable
diff tests/test-batching.py @ 37633:33a6eee08db2
wireproto: remove iterbatch() from peer interface (API)
Good riddance.
Some tests have been ported to the new API. This probably should
have been done in earlier commits. But duplicating the test coverage
would have been difficult. It was easier this way.
.. api::
The wire protocol peer's ``iterbatch()`` for bulk executing commands
has been remove.d Use ``peer.commandexecutor()`` instead.
Differential Revision: https://phab.mercurial-scm.org/D3271
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 11 Apr 2018 16:18:26 -0700 |
parents | f3dc8239e3a9 |
children | b81ca9a3f4e4 |
line wrap: on
line diff
--- a/tests/test-batching.py Fri Apr 13 11:08:46 2018 -0700 +++ b/tests/test-batching.py Wed Apr 11 16:18:26 2018 -0700 @@ -7,10 +7,10 @@ from __future__ import absolute_import, print_function +import contextlib + from mercurial import ( - error, localrepo, - util, wireprotov1peer, ) @@ -30,9 +30,14 @@ return "%s und %s" % (b, a,) def greet(self, name=None): return "Hello, %s" % name - def batchiter(self): - '''Support for local batching.''' - return localrepo.localiterbatcher(self) + + @contextlib.contextmanager + def commandexecutor(self): + e = localrepo.localcommandexecutor(self) + try: + yield e + finally: + e.close() # usage of "thing" interface def use(it): @@ -45,52 +50,15 @@ print(it.bar("Eins", "Zwei")) # Batched call to a couple of proxied methods. - batch = it.batchiter() - # The calls return futures to eventually hold results. - foo = batch.foo(one="One", two="Two") - bar = batch.bar("Eins", "Zwei") - bar2 = batch.bar(b="Uno", a="Due") - - # Future shouldn't be set until we submit(). - assert isinstance(foo, wireprotov1peer.future) - assert not util.safehasattr(foo, 'value') - assert not util.safehasattr(bar, 'value') - batch.submit() - # Call results() to obtain results as a generator. - results = batch.results() - # Future results shouldn't be set until we consume a value. - assert not util.safehasattr(foo, 'value') - foovalue = next(results) - assert util.safehasattr(foo, 'value') - assert foovalue == foo.value - print(foo.value) - next(results) - print(bar.value) - next(results) - print(bar2.value) + with it.commandexecutor() as e: + ffoo = e.callcommand('foo', {'one': 'One', 'two': 'Two'}) + fbar = e.callcommand('bar', {'b': 'Eins', 'a': 'Zwei'}) + fbar2 = e.callcommand('bar', {'b': 'Uno', 'a': 'Due'}) - # We should be at the end of the results generator. - try: - next(results) - except StopIteration: - print('proper end of results generator') - else: - print('extra emitted element!') - - # Attempting to call a non-batchable method inside a batch fails. - batch = it.batchiter() - try: - batch.greet(name='John Smith') - except error.ProgrammingError as e: - print(e) - - # Attempting to call a local method inside a batch fails. - batch = it.batchiter() - try: - batch.hello() - except error.ProgrammingError as e: - print(e) + print(ffoo.result()) + print(fbar.result()) + print(fbar2.result()) # local usage mylocal = localthing() @@ -177,8 +145,13 @@ for r in res.split(';'): yield r - def batchiter(self): - return wireprotov1peer.remoteiterbatcher(self) + @contextlib.contextmanager + def commandexecutor(self): + e = wireprotov1peer.peerexecutor(self) + try: + yield e + finally: + e.close() @wireprotov1peer.batchable def foo(self, one, two=None):