Patchwork D318: wireproto: remove support for local results in @batchable (API)

login
register
mail settings
Submitter phabricator
Date Aug. 10, 2017, 6:47 a.m.
Message ID <differential-rev-PHID-DREV-ymqydqkiuhqsedrrvuji-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/22828/
State Superseded
Headers show

Comments

phabricator - Aug. 10, 2017, 6:47 a.m.
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  @peer.batchable decorated generator functions have two forms:
  
    yield value, None
  
  and
  
    yield args, future
    yield value
  
  These forms have been present since the decorator was introduced.
  
  There are currently no in-repo consumers of the first form. So this
  commit removes support for it.
  
  Note that remoteiterbatcher.submit() asserts the 2nd form. And
  https://phab.mercurial-scm.org/rHGb6e71f8af5b8710139b64706a375b3f16eb1241e removed the last user of remotebatcher, forcing everyone
  to remoteiterbatcher. So anything relying on this in the wild would
  have been broken since https://phab.mercurial-scm.org/rHGb6e71f8af5b8710139b64706a375b3f16eb1241e.
  
  .. api::
  
    @peer.batchable can no longer emit local values

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D318

AFFECTED FILES
  mercurial/peer.py
  mercurial/wireproto.py
  tests/test-batching.py
  tests/test-batching.py.out

CHANGE DETAILS




To: indygreg, #hg-reviewers
Cc: mercurial-devel
phabricator - Aug. 13, 2017, 6:31 a.m.
yuja added inline comments.

INLINE COMMENTS

> peer.py:99
>          encargsorres, encresref = next(batchable)
>          if not encresref:
>              return encargsorres # a local result in this case

Perhaps this could be deleted too.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D318

To: indygreg, #hg-reviewers
Cc: yuja, mercurial-devel

Patch

diff --git a/tests/test-batching.py.out b/tests/test-batching.py.out
--- a/tests/test-batching.py.out
+++ b/tests/test-batching.py.out
@@ -4,7 +4,6 @@ 
 Un and Deux
 Eins und Zwei
 One and Two
-Nope
 Eins und Zwei
 Hello, John Smith
 Ready.
@@ -25,7 +24,6 @@ 
 REQ: batch?cmds=bar:b=Vop,a=Evf
   -> Vop!voe!Evf
 One and Two
-Nope
 Eins und Zwei
 Hello, John Smith
 Ready.
diff --git a/tests/test-batching.py b/tests/test-batching.py
--- a/tests/test-batching.py
+++ b/tests/test-batching.py
@@ -45,7 +45,6 @@ 
     batch = it.batch()
     # The calls return futures to eventually hold results.
     foo = batch.foo(one="One", two="Two")
-    foo2 = batch.foo(None)
     bar = batch.bar("Eins", "Zwei")
     # We can call non-batchable proxy methods, but the break the current batch
     # request and cause additional roundtrips.
@@ -58,7 +57,6 @@ 
     batch.submit()
     # After the call to submit, the futures actually contain values.
     print(foo.value)
-    print(foo2.value)
     print(bar.value)
     print(greet.value)
     print(hello.value)
@@ -153,8 +151,6 @@ 
 
     @peer.batchable
     def foo(self, one, two=None):
-        if not one:
-            yield "Nope", None
         encargs = [('one', mangle(one),), ('two', mangle(two),)]
         encresref = peer.future()
         yield encargs, encresref
diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
--- a/mercurial/wireproto.py
+++ b/mercurial/wireproto.py
@@ -95,11 +95,9 @@ 
             if batchablefn is not None:
                 batchable = batchablefn(mtd.im_self, *args, **opts)
                 encargsorres, encresref = next(batchable)
-                if encresref:
-                    req.append((name, encargsorres,))
-                    rsp.append((batchable, encresref, resref,))
-                else:
-                    resref.set(encargsorres)
+                assert encresref
+                req.append((name, encargsorres,))
+                rsp.append((batchable, encresref, resref,))
             else:
                 if req:
                     self._submitreq(req, rsp)
diff --git a/mercurial/peer.py b/mercurial/peer.py
--- a/mercurial/peer.py
+++ b/mercurial/peer.py
@@ -78,9 +78,6 @@ 
 
     @batchable
     def sample(self, one, two=None):
-        # Handle locally computable results first:
-        if not one:
-            yield "a local result", None
         # Build list of encoded arguments suitable for your wire protocol:
         encargs = [('one', encode(one),), ('two', encode(two),)]
         # Create future for injection of encoded result: