diff --git a/mercurial/wireprotoframing.py b/mercurial/wireprotoframing.py --- a/mercurial/wireprotoframing.py +++ b/mercurial/wireprotoframing.py @@ -368,17 +368,46 @@ def createcommandresponseokframe(stream, requestid): overall = b''.join(cborutil.streamencode({b'status': b'ok'})) + if stream.streamsettingssent: + overall = stream.encode(overall) + encoded = True + + if not overall: + return None + else: + encoded = False + return stream.makeframe(requestid=requestid, typeid=FRAME_TYPE_COMMAND_RESPONSE, flags=FLAG_COMMAND_RESPONSE_CONTINUATION, - payload=overall) + payload=overall, + encoded=encoded) -def createcommandresponseeosframe(stream, requestid): +def createcommandresponseeosframes(stream, requestid, + maxframesize=DEFAULT_MAX_FRAME_SIZE): """Create an empty payload frame representing command end-of-stream.""" - return stream.makeframe(requestid=requestid, - typeid=FRAME_TYPE_COMMAND_RESPONSE, - flags=FLAG_COMMAND_RESPONSE_EOS, - payload=b'') + payload = stream.flush() + + offset = 0 + while True: + chunk = payload[offset:offset + maxframesize] + offset += len(chunk) + + done = offset == len(payload) + + if done: + flags = FLAG_COMMAND_RESPONSE_EOS + else: + flags = FLAG_COMMAND_RESPONSE_CONTINUATION + + yield stream.makeframe(requestid=requestid, + typeid=FRAME_TYPE_COMMAND_RESPONSE, + flags=flags, + payload=chunk, + encoded=payload != b'') + + if done: + break def createalternatelocationresponseframe(stream, requestid, location): data = { @@ -395,10 +424,19 @@ if value is not None: data[b'location'][pycompat.bytestr(a)] = value + payload = b''.join(cborutil.streamencode(data)) + + if stream.streamsettingssent: + payload = stream.encode(payload) + encoded = True + else: + encoded = False + return stream.makeframe(requestid=requestid, typeid=FRAME_TYPE_COMMAND_RESPONSE, flags=FLAG_COMMAND_RESPONSE_CONTINUATION, - payload=b''.join(cborutil.streamencode(data))) + payload=payload, + encoded=encoded) def createcommanderrorresponse(stream, requestid, message, args=None): # TODO should this be using a list of {'msg': ..., 'args': {}} so atom @@ -519,6 +557,8 @@ yield frame return + data = self._stream.encode(data) + # There is a ton of potential to do more complicated things here. # Our immediate goal is to coalesce small chunks into big frames, # not achieve the fewest number of frames possible. So we go with @@ -548,7 +588,8 @@ self._requestid, typeid=FRAME_TYPE_COMMAND_RESPONSE, flags=FLAG_COMMAND_RESPONSE_CONTINUATION, - payload=chunk) + payload=chunk, + encoded=True) if offset == len(data): return @@ -583,7 +624,8 @@ self._requestid, typeid=FRAME_TYPE_COMMAND_RESPONSE, flags=FLAG_COMMAND_RESPONSE_CONTINUATION, - payload=payload) + payload=payload, + encoded=True) # TODO consider defining encoders/decoders using the util.compressionengine # mechanism. @@ -776,7 +818,9 @@ def __init__(self, streamid, active=False): super(outputstream, self).__init__(streamid, active=active) + self.streamsettingssent = False self._encoder = None + self._encodername = None def setencoder(self, ui, name): """Set the encoder for this stream. @@ -787,6 +831,7 @@ raise error.Abort(_('unknown stream encoder: %s') % name) self._encoder = STREAM_ENCODERS[name][0](ui) + self._encodername = name def encode(self, data): if not self._encoder: @@ -806,6 +851,45 @@ self._encoder.finish() + def makeframe(self, requestid, typeid, flags, payload, + encoded=False): + """Create a frame to be sent out over this stream. + + Only returns the frame instance. Does not actually send it. + """ + streamflags = 0 + if not self._active: + streamflags |= STREAM_FLAG_BEGIN_STREAM + self._active = True + + if encoded: + if not self.streamsettingssent: + raise error.ProgrammingError( + b'attempting to send encoded frame without sending stream ' + b'settings') + + streamflags |= STREAM_FLAG_ENCODING_APPLIED + + if (typeid == FRAME_TYPE_STREAM_SETTINGS + and flags & FLAG_STREAM_ENCODING_SETTINGS_EOS): + self.streamsettingssent = True + + return makeframe(requestid, self.streamid, streamflags, typeid, flags, + payload) + + def makestreamsettingsframe(self, requestid): + """Create a stream settings frame for this stream. + + Returns frame data or None if no stream settings frame is needed or has + already been sent. + """ + if not self._encoder or self.streamsettingssent: + return None + + payload = b''.join(cborutil.streamencode(self._encodername)) + return self.makeframe(requestid, FRAME_TYPE_STREAM_SETTINGS, + FLAG_STREAM_ENCODING_SETTINGS_EOS, payload) + def ensureserverstream(stream): if stream.streamid % 2: raise error.ProgrammingError('server should only write to even ' @@ -995,7 +1079,9 @@ yield frame if emitted: - yield createcommandresponseeosframe(stream, requestid) + for frame in createcommandresponseeosframes( + stream, requestid): + yield frame break except error.WireprotoCommandError as e: @@ -1022,6 +1108,10 @@ 'alternatelocationresponse seen after initial ' 'output object') + frame = stream.makestreamsettingsframe(requestid) + if frame: + yield frame + yield createalternatelocationresponseframe( stream, requestid, o) @@ -1034,7 +1124,16 @@ 'object follows alternatelocationresponse') if not emitted: - yield createcommandresponseokframe(stream, requestid) + # Frame is optional. + frame = stream.makestreamsettingsframe(requestid) + if frame: + yield frame + + # May be None if empty frame (due to encoding). + frame = createcommandresponseokframe(stream, requestid) + if frame: + yield frame + emitted = True # Objects emitted by command functions can be serializable @@ -1121,13 +1220,25 @@ return self._handlesendframes(sendframes()) def makeoutputstream(self): - """Create a stream to be used for sending data to the client.""" + """Create a stream to be used for sending data to the client. + + If this is called before protocol settings frames are received, we + don't know what stream encodings are supported by the client and + we will default to identity. + """ streamid = self._nextoutgoingstreamid self._nextoutgoingstreamid += 2 s = outputstream(streamid) self._outgoingstreams[streamid] = s + # Always use the *server's* preferred encoder over the client's, + # as servers have more to lose from sub-optimal encoders being used. + for name in STREAM_ENCODERS_ORDER: + if name in self._sendersettings['contentencodings']: + s.setencoder(self._ui, name) + break + return s def _makeerrorresult(self, msg): diff --git a/mercurial/wireprotov2server.py b/mercurial/wireprotov2server.py --- a/mercurial/wireprotov2server.py +++ b/mercurial/wireprotov2server.py @@ -194,7 +194,7 @@ reactor = wireprotoframing.serverreactor(ui, deferoutput=True) seencommand = False - outstream = reactor.makeoutputstream() + outstream = None while True: frame = wireprotoframing.readframe(req.bodyfh) @@ -207,6 +207,11 @@ # Need more data before we can do anything. continue elif action == 'runcommand': + # Defer creating output stream because we need to wait for + # protocol settings frames so proper encoding can be applied. + if not outstream: + outstream = reactor.makeoutputstream() + sentoutput = _httpv2runcommand(ui, repo, req, res, authedperm, reqcommand, reactor, outstream, meta, issubsequent=seencommand) diff --git a/tests/test-http-api-httpv2.t b/tests/test-http-api-httpv2.t --- a/tests/test-http-api-httpv2.t +++ b/tests/test-http-api-httpv2.t @@ -176,11 +176,14 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92Hidentity + s> \r\n s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011\xa1FstatusBok + s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok s> \r\n s> 27\r\n - s> \x1f\x00\x00\x01\x00\x02\x001X\x1dcustomreadonly bytes response + s> \x1f\x00\x00\x01\x00\x02\x041X\x1dcustomreadonly bytes response s> \r\n s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 @@ -209,16 +212,21 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hidentity + s> \r\n + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 + s> \x0b\x00\x00\x01\x00\x02\x041 s> \xa1FstatusBok s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 27\r\n - s> \x1f\x00\x00\x01\x00\x02\x001 + s> \x1f\x00\x00\x01\x00\x02\x041 s> X\x1dcustomreadonly bytes response s> \r\n - received frame(size=31; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=31; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n @@ -335,11 +343,14 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92Hidentity + s> \r\n s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011\xa1FstatusBok + s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok s> \r\n s> 27\r\n - s> \x1f\x00\x00\x01\x00\x02\x001X\x1dcustomreadonly bytes response + s> \x1f\x00\x00\x01\x00\x02\x041X\x1dcustomreadonly bytes response s> \r\n s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 @@ -464,11 +475,14 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92Hidentity + s> \r\n s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011\xa1FstatusBok + s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok s> \r\n s> 27\r\n - s> \x1f\x00\x00\x01\x00\x02\x001X\x1dcustomreadonly bytes response + s> \x1f\x00\x00\x01\x00\x02\x041X\x1dcustomreadonly bytes response s> \r\n s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 @@ -503,20 +517,23 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92Hidentity + s> \r\n s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011\xa1FstatusBok + s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok s> \r\n s> 27\r\n - s> \x1f\x00\x00\x01\x00\x02\x001X\x1dcustomreadonly bytes response + s> \x1f\x00\x00\x01\x00\x02\x041X\x1dcustomreadonly bytes response s> \r\n s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n s> 13\r\n - s> \x0b\x00\x00\x03\x00\x02\x001\xa1FstatusBok + s> \x0b\x00\x00\x03\x00\x02\x041\xa1FstatusBok s> \r\n s> 27\r\n - s> \x1f\x00\x00\x03\x00\x02\x001X\x1dcustomreadonly bytes response + s> \x1f\x00\x00\x03\x00\x02\x041X\x1dcustomreadonly bytes response s> \r\n s> 8\r\n s> \x00\x00\x00\x03\x00\x02\x002 @@ -553,20 +570,23 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x03\x00\x02\x01\x92Hidentity + s> \r\n s> 13\r\n - s> \x0b\x00\x00\x03\x00\x02\x011\xa1FstatusBok + s> \x0b\x00\x00\x03\x00\x02\x041\xa1FstatusBok s> \r\n s> 28\r\n - s> \x00\x00\x03\x00\x02\x001\xa3Ibookmarks@Jnamespaces@Fphases@ + s> \x00\x00\x03\x00\x02\x041\xa3Ibookmarks@Jnamespaces@Fphases@ s> \r\n s> 8\r\n s> \x00\x00\x00\x03\x00\x02\x002 s> \r\n s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x001\xa1FstatusBok + s> \x0b\x00\x00\x01\x00\x02\x041\xa1FstatusBok s> \r\n s> 9\r\n - s> \x01\x00\x00\x01\x00\x02\x001\xa0 + s> \x01\x00\x00\x01\x00\x02\x041\xa0 s> \r\n s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 @@ -641,16 +661,21 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hidentity + s> \r\n + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 + s> \x0b\x00\x00\x01\x00\x02\x041 s> \xa1FstatusBok s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 1e\r\n - s> \x16\x00\x00\x01\x00\x02\x001 + s> \x16\x00\x00\x01\x00\x02\x041 s> \x81T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 s> \r\n - received frame(size=22; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=22; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n @@ -685,22 +710,18 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n - s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 - s> \xa1FstatusBok + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hzstd-8mb s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - s> 1e\r\n - s> \x16\x00\x00\x01\x00\x02\x001 - s> \x81T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + s> 25\r\n + s> \x1d\x00\x00\x01\x00\x02\x042 + s> (\xb5/\xfd\x00P\xa4\x00\x00p\xa1FstatusBok\x81T\x00\x01\x00\tP\x02 s> \r\n - received frame(size=22; request=1; stream=2; streamflags=; type=command-response; flags=continuation) - s> 8\r\n - s> \x00\x00\x00\x01\x00\x02\x002 - s> \r\n + received frame(size=29; request=1; stream=2; streamflags=encoded; type=command-response; flags=eos) s> 0\r\n s> \r\n - received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) response: [ b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ] diff --git a/tests/test-http-protocol.t b/tests/test-http-protocol.t --- a/tests/test-http-protocol.t +++ b/tests/test-http-protocol.t @@ -333,16 +333,21 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hidentity + s> \r\n + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 + s> \x0b\x00\x00\x01\x00\x02\x041 s> \xa1FstatusBok s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 1e\r\n - s> \x16\x00\x00\x01\x00\x02\x001 + s> \x16\x00\x00\x01\x00\x02\x041 s> \x81T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 s> \r\n - received frame(size=22; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=22; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n diff --git a/tests/test-wireproto-command-capabilities.t b/tests/test-wireproto-command-capabilities.t --- a/tests/test-wireproto-command-capabilities.t +++ b/tests/test-wireproto-command-capabilities.t @@ -453,16 +453,21 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hidentity + s> \r\n + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 + s> \x0b\x00\x00\x01\x00\x02\x041 s> \xa1FstatusBok s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 508\r\n - s> \x00\x05\x00\x01\x00\x02\x001 + s> \x00\x05\x00\x01\x00\x02\x041 s> \xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1 s> \r\n - received frame(size=1280; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=1280; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n diff --git a/tests/test-wireproto-content-redirects.t b/tests/test-wireproto-content-redirects.t --- a/tests/test-wireproto-content-redirects.t +++ b/tests/test-wireproto-content-redirects.t @@ -86,16 +86,21 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hidentity + s> \r\n + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 + s> \x0b\x00\x00\x01\x00\x02\x041 s> \xa1FstatusBok s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 588\r\n - s> \x80\x05\x00\x01\x00\x02\x001 + s> \x80\x05\x00\x01\x00\x02\x041 s> \xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/ s> \r\n - received frame(size=1408; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=1408; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n @@ -370,16 +375,21 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hidentity + s> \r\n + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 + s> \x0b\x00\x00\x01\x00\x02\x041 s> \xa1FstatusBok s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 5a3\r\n - s> \x9b\x05\x00\x01\x00\x02\x001 + s> \x9b\x05\x00\x01\x00\x02\x041 s> \xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/ s> \r\n - received frame(size=1435; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=1435; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n @@ -660,16 +670,21 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hidentity + s> \r\n + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 + s> \x0b\x00\x00\x01\x00\x02\x041 s> \xa1FstatusBok s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 57b\r\n - s> s\x05\x00\x01\x00\x02\x001 + s> s\x05\x00\x01\x00\x02\x041 s> \xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKsnirequired\xf5Duris\x81Thttps://example.com/ s> \r\n - received frame(size=1395; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=1395; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n @@ -940,16 +955,21 @@ s> Content-Type: application/mercurial-exp-framing-0006\r\n s> Transfer-Encoding: chunked\r\n s> \r\n + s> 11\r\n + s> \t\x00\x00\x01\x00\x02\x01\x92 + s> Hidentity + s> \r\n + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) s> 13\r\n - s> \x0b\x00\x00\x01\x00\x02\x011 + s> \x0b\x00\x00\x01\x00\x02\x041 s> \xa1FstatusBok s> \r\n - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 581\r\n - s> y\x05\x00\x01\x00\x02\x001 + s> y\x05\x00\x01\x00\x02\x041 s> \xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKtlsversions\x82B42B39Duris\x81Thttps://example.com/ s> \r\n - received frame(size=1401; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=1401; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) s> 8\r\n s> \x00\x00\x00\x01\x00\x02\x002 s> \r\n diff --git a/tests/test-wireproto-exchangev2.t b/tests/test-wireproto-exchangev2.t --- a/tests/test-wireproto-exchangev2.t +++ b/tests/test-wireproto-exchangev2.t @@ -45,11 +45,12 @@ sending command known: { 'nodes': [] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=43; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=1; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=1; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) sending 1 commands sending command changesetdata: { @@ -67,8 +68,9 @@ ] ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=941; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=941; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) add changeset 3390ef850073 add changeset 4432d83626e8 @@ -92,8 +94,9 @@ ], 'tree': '' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=992; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=992; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) sending 2 commands sending command filedata: { @@ -122,11 +125,12 @@ ], 'path': 'b' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=431; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=431; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=431; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=431; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) updating the branch cache new changesets 3390ef850073:caa2a465451d (3 drafts) @@ -173,8 +177,9 @@ sending command lookup: { 'key': '4432d83626e8' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=21; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=21; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) query 1; heads sending 2 commands @@ -182,11 +187,12 @@ sending command known: { 'nodes': [] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=43; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=1; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=1; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) sending 1 commands sending command changesetdata: { @@ -203,8 +209,9 @@ ] ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=381; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=381; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) add changeset 3390ef850073 add changeset 4432d83626e8 @@ -222,8 +229,9 @@ ], 'tree': '' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=404; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=404; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) sending 2 commands sending command filedata: { @@ -249,11 +257,12 @@ ], 'path': 'b' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=277; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=277; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=123; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=123; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) updating the branch cache new changesets 3390ef850073:4432d83626e8 @@ -286,11 +295,12 @@ 'D2\xd86&\xe8\xa9\x86U\xf0b\xec\x1f*C\xb0\x7f\x7f\xbb\xb0' ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=43; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=2; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=2; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) searching for changes all local heads known remotely @@ -312,8 +322,9 @@ ] ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=613; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=613; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) add changeset cd2534766bec add changeset e96ae20f4188 @@ -333,8 +344,9 @@ ], 'tree': '' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=601; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=601; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) sending 2 commands sending command filedata: { @@ -362,11 +374,12 @@ ], 'path': 'b' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=277; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=277; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=431; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=431; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) updating the branch cache new changesets cd2534766bec:caa2a465451d (3 drafts) @@ -409,11 +422,12 @@ '\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1' ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=43; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=3; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=3; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) searching for changes all remote heads known locally @@ -436,8 +450,9 @@ ] ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=92; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=92; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) checking for updated bookmarks 2 local changesets published @@ -472,11 +487,12 @@ sending command known: { 'nodes': [] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=43; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=1; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=1; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) sending 1 commands sending command changesetdata: { @@ -494,8 +510,9 @@ ] ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=979; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=979; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) add changeset 3390ef850073 add changeset 4432d83626e8 @@ -521,8 +538,9 @@ ], 'tree': '' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=992; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=992; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) sending 2 commands sending command filedata: { @@ -551,11 +569,12 @@ ], 'path': 'b' } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=431; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=431; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=431; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=431; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) updating the branch cache new changesets 3390ef850073:caa2a465451d (1 drafts) @@ -583,11 +602,12 @@ '\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1' ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=43; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) - received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation) - received frame(size=3; request=3; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=11; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=3; request=3; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos) searching for changes all remote heads known locally @@ -610,8 +630,9 @@ ] ] } - received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) - received frame(size=144; request=1; stream=2; streamflags=; type=command-response; flags=continuation) + received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos) + received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) + received frame(size=144; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation) received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) checking for updated bookmarks updating bookmark book-1 diff --git a/tests/test-wireproto-serverreactor.py b/tests/test-wireproto-serverreactor.py --- a/tests/test-wireproto-serverreactor.py +++ b/tests/test-wireproto-serverreactor.py @@ -371,8 +371,9 @@ outstream, 1, [b'response']) self.assertaction(result, b'sendframes') self.assertframesequal(result[1][b'framegen'], [ - b'1 2 stream-begin command-response continuation %s' % OK, - b'1 2 0 command-response continuation cbor:b"response"', + b'1 2 stream-begin stream-settings eos cbor:b"identity"', + b'1 2 encoded command-response continuation %s' % OK, + b'1 2 encoded command-response continuation cbor:b"response"', b'1 2 0 command-response eos ', ]) @@ -390,10 +391,11 @@ outstream, 1, [first + second]) self.assertaction(result, b'sendframes') self.assertframesequal(result[1][b'framegen'], [ - b'1 2 stream-begin command-response continuation %s' % OK, - b'1 2 0 command-response continuation Y\x80d', - b'1 2 0 command-response continuation %s' % first, - b'1 2 0 command-response continuation %s' % second, + b'1 2 stream-begin stream-settings eos cbor:b"identity"', + b'1 2 encoded command-response continuation %s' % OK, + b'1 2 encoded command-response continuation Y\x80d', + b'1 2 encoded command-response continuation %s' % first, + b'1 2 encoded command-response continuation %s' % second, b'1 2 0 command-response eos ' ]) @@ -427,8 +429,9 @@ result = reactor.oninputeof() self.assertaction(result, b'sendframes') self.assertframesequal(result[1][b'framegen'], [ - b'1 2 stream-begin command-response continuation %s' % OK, - b'1 2 0 command-response continuation cbor:b"response"', + b'1 2 stream-begin stream-settings eos cbor:b"identity"', + b'1 2 encoded command-response continuation %s' % OK, + b'1 2 encoded command-response continuation cbor:b"response"', b'1 2 0 command-response eos ', ]) @@ -448,11 +451,12 @@ result = reactor.oninputeof() self.assertaction(result, b'sendframes') self.assertframesequal(result[1][b'framegen'], [ - b'1 2 stream-begin command-response continuation %s' % OK, - b'1 2 0 command-response continuation cbor:b"response1"', + b'1 2 stream-begin stream-settings eos cbor:b"identity"', + b'1 2 encoded command-response continuation %s' % OK, + b'1 2 encoded command-response continuation cbor:b"response1"', b'1 2 0 command-response eos ', - b'3 2 0 command-response continuation %s' % OK, - b'3 2 0 command-response continuation cbor:b"response2"', + b'3 2 encoded command-response continuation %s' % OK, + b'3 2 encoded command-response continuation cbor:b"response2"', b'3 2 0 command-response eos ', ]) @@ -472,14 +476,15 @@ result = reactor.oninputeof() self.assertaction(result, b'sendframes') self.assertframesequal(result[1][b'framegen'], [ - b'3 2 stream-begin command-response continuation %s' % OK, - b'3 2 0 command-response continuation cbor:b"response3"', + b'3 2 stream-begin stream-settings eos cbor:b"identity"', + b'3 2 encoded command-response continuation %s' % OK, + b'3 2 encoded command-response continuation cbor:b"response3"', b'3 2 0 command-response eos ', - b'1 2 0 command-response continuation %s' % OK, - b'1 2 0 command-response continuation cbor:b"response1"', + b'1 2 encoded command-response continuation %s' % OK, + b'1 2 encoded command-response continuation cbor:b"response1"', b'1 2 0 command-response eos ', - b'5 2 0 command-response continuation %s' % OK, - b'5 2 0 command-response continuation cbor:b"response5"', + b'5 2 encoded command-response continuation %s' % OK, + b'5 2 encoded command-response continuation cbor:b"response5"', b'5 2 0 command-response eos ', ])