--- 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):