Mercurial > public > mercurial-scm > hg
diff tests/test-http-api-httpv2.t @ 39814:d059cb669632
wireprotov2: allow multiple fields to follow revision maps
The *data wire protocol commands emit a series of CBOR values.
Because revision/delta data may be large, their data is emitted
outside the map as a top-level bytestring value.
Before this commit, we'd emit a single optional bytestring
value after the revision descriptor map. This got the job done.
But it was limiting in that we could only send a single field.
And, it required the consumer to know that the presence of a
key in the map implied the existence of a following bytestring
value.
This commit changes the encoding strategy so top-level bytestring
values in the stream are explicitly denoted in a "fieldsfollowing"
key. This key contains an array defining what fields that follow
and the expected size of each field.
By defining things this way, we can easily send N bytestring
values without any ambiguity about their order. In addition,
clients only need to know how to parse ``fieldsfollowing`` to
know if extra values are present.
Because this breaks backwards compatibility, we've bumped the version
number of the wire protocol version 2 API endpoint.
Differential Revision: https://phab.mercurial-scm.org/D4620
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 20 Sep 2018 12:57:23 -0700 |
parents | d06834e0f48e |
children | b099e6032f38 |
line wrap: on
line diff
--- a/tests/test-http-api-httpv2.t Mon Sep 17 11:54:00 2018 -0700 +++ b/tests/test-http-api-httpv2.t Thu Sep 20 12:57:23 2018 -0700 @@ -18,7 +18,7 @@ > user-agent: test > EOF using raw connection to peer - s> GET /api/exp-http-v2-0001 HTTP/1.1\r\n + s> GET /api/exp-http-v2-0002 HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) @@ -30,7 +30,7 @@ s> Content-Type: text/plain\r\n s> Content-Length: 33\r\n s> \r\n - s> API exp-http-v2-0001 not enabled\n + s> API exp-http-v2-0002 not enabled\n Restart server with support for HTTP v2 API @@ -46,7 +46,7 @@ > user-agent: test > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/badcommand HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/badcommand HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) @@ -67,7 +67,7 @@ > user-agent: test > EOF using raw connection to peer - s> GET /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> GET /api/exp-http-v2-0002/ro/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) @@ -88,7 +88,7 @@ > user-agent: test > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) @@ -110,7 +110,7 @@ > user-agent: test > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: invalid\r\n s> user-agent: test\r\n @@ -134,7 +134,7 @@ > content-type: badmedia > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: application/mercurial-exp-framing-0005\r\n s> content-type: badmedia\r\n @@ -160,7 +160,7 @@ > frame 1 1 stream-begin command-request new cbor:{b'name': b'customreadonly'} > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> *\r\n (glob) s> content-type: application/mercurial-exp-framing-0005\r\n @@ -193,7 +193,7 @@ > EOF creating http peer for wire protocol version 2 sending customreadonly command - s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: application/mercurial-exp-framing-0005\r\n s> content-type: application/mercurial-exp-framing-0005\r\n @@ -238,7 +238,7 @@ > user-agent: test > EOF using raw connection to peer - s> GET /api/exp-http-v2-0001/rw/customreadonly HTTP/1.1\r\n + s> GET /api/exp-http-v2-0002/rw/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) @@ -259,7 +259,7 @@ > user-agent: test > EOF using raw connection to peer - s> GET /api/exp-http-v2-0001/rw/badcommand HTTP/1.1\r\n + s> GET /api/exp-http-v2-0002/rw/badcommand HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) @@ -280,7 +280,7 @@ > user-agent: test > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/rw/customreadonly HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/rw/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) @@ -318,7 +318,7 @@ > frame 1 1 stream-begin command-request new cbor:{b'name': b'customreadonly'} > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/rw/customreadonly HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/rw/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: application/mercurial-exp-framing-0005\r\n s> content-type: application/mercurial-exp-framing-0005\r\n @@ -354,7 +354,7 @@ > accept: $MEDIATYPE > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/rw/badcommand HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/rw/badcommand HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: application/mercurial-exp-framing-0005\r\n s> user-agent: test\r\n @@ -376,7 +376,7 @@ > user-agent: test > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/debugreflect HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/debugreflect HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) @@ -416,7 +416,7 @@ > frame 1 1 stream-begin command-request new cbor:{b'name': b'command1', b'args': {b'foo': b'val1', b'bar1': b'val'}} > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/debugreflect HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/debugreflect HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: application/mercurial-exp-framing-0005\r\n s> content-type: application/mercurial-exp-framing-0005\r\n @@ -447,7 +447,7 @@ > frame 1 1 stream-begin command-request new cbor:{b'name': b'customreadonly'} > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: application/mercurial-exp-framing-0005\r\n s> content-type: application/mercurial-exp-framing-0005\r\n @@ -486,7 +486,7 @@ > frame 3 1 0 command-request new cbor:{b'name': b'customreadonly'} > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/multirequest HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/multirequest HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> *\r\n (glob) s> *\r\n (glob) @@ -536,7 +536,7 @@ > frame 1 1 0 command-request continuation IbookmarksDnameHlistkeys > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/multirequest HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/multirequest HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: application/mercurial-exp-framing-0005\r\n s> content-type: application/mercurial-exp-framing-0005\r\n @@ -598,7 +598,7 @@ > frame 1 1 stream-begin command-request new cbor:{b'name': b'pushkey'} > EOF using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/multirequest HTTP/1.1\r\n + s> POST /api/exp-http-v2-0002/ro/multirequest HTTP/1.1\r\n s> Accept-Encoding: identity\r\n s> accept: application/mercurial-exp-framing-0005\r\n s> content-type: application/mercurial-exp-framing-0005\r\n