wireprotov2: add response type that serializes to indefinite length bytestring
authorGregory Szorc <gregory.szorc@gmail.com>
Tue, 16 Oct 2018 21:35:33 +0200
changeset 40328 2c55716f8a1c
parent 40327 55836a34f41b
child 40329 ed55a0077490
wireprotov2: add response type that serializes to indefinite length bytestring This will be needed in a future patch. Differential Revision: https://phab.mercurial-scm.org/D5133
mercurial/wireprotoframing.py
mercurial/wireprototypes.py
--- a/mercurial/wireprotoframing.py	Wed Sep 26 14:38:43 2018 -0700
+++ b/mercurial/wireprotoframing.py	Tue Oct 16 21:35:33 2018 +0200
@@ -1146,6 +1146,14 @@
                         for frame in emitter.send(o.data):
                             yield frame
 
+                    elif isinstance(
+                        o, wireprototypes.indefinitebytestringresponse):
+                        for chunk in cborutil.streamencodebytestringfromiter(
+                            o.chunks):
+
+                            for frame in emitter.send(chunk):
+                                yield frame
+
                     # A regular object is CBOR encoded.
                     else:
                         for chunk in cborutil.streamencode(o):
--- a/mercurial/wireprototypes.py	Wed Sep 26 14:38:43 2018 -0700
+++ b/mercurial/wireprototypes.py	Tue Oct 16 21:35:33 2018 +0200
@@ -389,3 +389,12 @@
     fullhashseed = attr.ib(default=None)
     serverdercerts = attr.ib(default=None)
     servercadercerts = attr.ib(default=None)
+
+@attr.s
+class indefinitebytestringresponse(object):
+    """Represents an object to be encoded to an indefinite length bytestring.
+
+    Instances are initialized from an iterable of chunks, with each chunk being
+    a bytes instance.
+    """
+    chunks = attr.ib()