Details
Details
- Reviewers
yuja - Group Reviewers
hg-reviewers - Commits
- rHG68915b9f8e96: wireproto: port listkeys commands to wire protocol v2
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Lint
Lint Skipped - Unit
Unit Tests Skipped
yuja |
hg-reviewers |
Lint Skipped |
Unit Tests Skipped |
mercurial/wireproto.py | ||
---|---|---|
1231 | Nit: if namespace could be None, this would crash. |
Path | Packages | |||
---|---|---|---|---|
M | mercurial/help/internals/wireprotocol.txt (14 lines) | |||
M | mercurial/wireproto.py (12 lines) | |||
M | tests/test-http-api-httpv2.t (10 lines) | |||
A | M | tests/test-wireproto-command-listkeys.t (125 lines) |
nodes | nodes | ||||
(array of bytestrings) List of changeset nodes whose presence to | (array of bytestrings) List of changeset nodes whose presence to | ||||
query. | query. | ||||
The response is a bytestring where each byte contains a 0 or 1 for the | The response is a bytestring where each byte contains a 0 or 1 for the | ||||
corresponding requested node at the same index. | corresponding requested node at the same index. | ||||
TODO use a bit array for even more compact response | TODO use a bit array for even more compact response | ||||
listkeys | |||||
-------- | |||||
List values in a specified ``pushkey`` namespace. | |||||
The command receives the following arguments: | |||||
namespace | |||||
(bytestring) Pushkey namespace to query. | |||||
The response is a map with bytestring keys and values. | |||||
TODO consider using binary to represent nodes in certain pushkey namespaces. |
s> \x11\x00\x00\x01\x00\x01\x01\x15\xa2Dargs\xa1Inamespace\x11\x00\x00\x03\x00\x01\x00\x15\xa2Dargs\xa1Inamespace\x19\x00\x00\x03\x00\x01\x00\x12JnamespacesDnameHlistkeys\x18\x00\x00\x01\x00\x01\x00\x12IbookmarksDnameHlistkeys | s> \x11\x00\x00\x01\x00\x01\x01\x15\xa2Dargs\xa1Inamespace\x11\x00\x00\x03\x00\x01\x00\x15\xa2Dargs\xa1Inamespace\x19\x00\x00\x03\x00\x01\x00\x12JnamespacesDnameHlistkeys\x18\x00\x00\x01\x00\x01\x00\x12IbookmarksDnameHlistkeys | ||||
s> makefile('rb', None) | s> makefile('rb', None) | ||||
s> HTTP/1.1 200 OK\r\n | s> HTTP/1.1 200 OK\r\n | ||||
s> Server: testing stub value\r\n | s> Server: testing stub value\r\n | ||||
s> Date: $HTTP_DATE$\r\n | s> Date: $HTTP_DATE$\r\n | ||||
s> Content-Type: application/mercurial-exp-framing-0003\r\n | s> Content-Type: application/mercurial-exp-framing-0003\r\n | ||||
s> Transfer-Encoding: chunked\r\n | s> Transfer-Encoding: chunked\r\n | ||||
s> \r\n | s> \r\n | ||||
s> 26\r\n | s> 28\r\n | ||||
s> \x1e\x00\x00\x03\x00\x02\x01Bbookmarks\t\n | s> \x00\x00\x03\x00\x02\x01F\xa3Fphases@Ibookmarks@Jnamespaces@ | ||||
s> namespaces\t\n | |||||
s> phases\t | |||||
s> \r\n | s> \r\n | ||||
s> 8\r\n | s> 9\r\n | ||||
s> \x00\x00\x00\x01\x00\x02\x00B | s> \x01\x00\x00\x01\x00\x02\x00F\xa0 | ||||
s> \r\n | s> \r\n | ||||
s> 0\r\n | s> 0\r\n | ||||
s> \r\n | s> \r\n | ||||
Restart server to disable read-write access | Restart server to disable read-write access | ||||
$ killdaemons.py | $ killdaemons.py | ||||
$ cat > server/.hg/hgrc << EOF | $ cat > server/.hg/hgrc << EOF |
$ . $TESTDIR/wireprotohelpers.sh | |||||
$ hg init server | |||||
$ enablehttpv2 server | |||||
$ cd server | |||||
$ hg debugdrawdag << EOF | |||||
> C D | |||||
> |/ | |||||
> B | |||||
> | | |||||
> A | |||||
> EOF | |||||
$ hg phase --public -r C | |||||
$ hg book -r C @ | |||||
$ hg log -T '{rev}:{node} {desc}\n' | |||||
3:be0ef73c17ade3fc89dc41701eb9fc3a91b58282 D | |||||
2:26805aba1e600a82e93661149f2313866a221a7b C | |||||
1:112478962961147124edd43549aedd1a335e44bf B | |||||
0:426bada5c67598ca65036d57d9e4b64b0c1ce7a0 A | |||||
$ hg serve -p $HGPORT -d --pid-file hg.pid -E error.log | |||||
$ cat hg.pid > $DAEMON_PIDS | |||||
Request for namespaces works | |||||
$ sendhttpv2peer << EOF | |||||
> command listkeys | |||||
> namespace namespaces | |||||
> EOF | |||||
creating http peer for wire protocol version 2 | |||||
sending listkeys command | |||||
s> POST /api/exp-http-v2-0001/ro/listkeys HTTP/1.1\r\n | |||||
s> Accept-Encoding: identity\r\n | |||||
s> accept: application/mercurial-exp-framing-0003\r\n | |||||
s> content-type: application/mercurial-exp-framing-0003\r\n | |||||
s> content-length: 50\r\n | |||||
s> host: $LOCALIP:$HGPORT\r\n (glob) | |||||
s> user-agent: Mercurial debugwireproto\r\n | |||||
s> \r\n | |||||
s> *\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1InamespaceJnamespacesDnameHlistkeys | |||||
s> makefile('rb', None) | |||||
s> HTTP/1.1 200 OK\r\n | |||||
s> Server: testing stub value\r\n | |||||
s> Date: $HTTP_DATE$\r\n | |||||
s> Content-Type: application/mercurial-exp-framing-0003\r\n | |||||
s> Transfer-Encoding: chunked\r\n | |||||
s> \r\n | |||||
s> 28\r\n | |||||
s> \x00\x00\x01\x00\x02\x01F | |||||
s> \xa3Fphases@Ibookmarks@Jnamespaces@ | |||||
s> \r\n | |||||
received frame(size=32; request=1; stream=2; streamflags=stream-begin; type=bytes-response; flags=eos|cbor) | |||||
s> 0\r\n | |||||
s> \r\n | |||||
response: [{b'bookmarks': b'', b'namespaces': b'', b'phases': b''}] | |||||
Request for phases works | |||||
$ sendhttpv2peer << EOF | |||||
> command listkeys | |||||
> namespace phases | |||||
> EOF | |||||
creating http peer for wire protocol version 2 | |||||
sending listkeys command | |||||
s> POST /api/exp-http-v2-0001/ro/listkeys HTTP/1.1\r\n | |||||
s> Accept-Encoding: identity\r\n | |||||
s> accept: application/mercurial-exp-framing-0003\r\n | |||||
s> content-type: application/mercurial-exp-framing-0003\r\n | |||||
s> content-length: 46\r\n | |||||
s> host: $LOCALIP:$HGPORT\r\n (glob) | |||||
s> user-agent: Mercurial debugwireproto\r\n | |||||
s> \r\n | |||||
s> &\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1InamespaceFphasesDnameHlistkeys | |||||
s> makefile('rb', None) | |||||
s> HTTP/1.1 200 OK\r\n | |||||
s> Server: testing stub value\r\n | |||||
s> Date: $HTTP_DATE$\r\n | |||||
s> Content-Type: application/mercurial-exp-framing-0003\r\n | |||||
s> Transfer-Encoding: chunked\r\n | |||||
s> \r\n | |||||
s> 45\r\n | |||||
s> =\x00\x00\x01\x00\x02\x01F | |||||
s> \xa2JpublishingDTrueX(be0ef73c17ade3fc89dc41701eb9fc3a91b58282A1 | |||||
s> \r\n | |||||
received frame(size=61; request=1; stream=2; streamflags=stream-begin; type=bytes-response; flags=eos|cbor) | |||||
s> 0\r\n | |||||
s> \r\n | |||||
response: [{b'be0ef73c17ade3fc89dc41701eb9fc3a91b58282': b'1', b'publishing': b'True'}] | |||||
Request for bookmarks works | |||||
$ sendhttpv2peer << EOF | |||||
> command listkeys | |||||
> namespace bookmarks | |||||
> EOF | |||||
creating http peer for wire protocol version 2 | |||||
sending listkeys command | |||||
s> POST /api/exp-http-v2-0001/ro/listkeys HTTP/1.1\r\n | |||||
s> Accept-Encoding: identity\r\n | |||||
s> accept: application/mercurial-exp-framing-0003\r\n | |||||
s> content-type: application/mercurial-exp-framing-0003\r\n | |||||
s> content-length: 49\r\n | |||||
s> host: $LOCALIP:$HGPORT\r\n (glob) | |||||
s> user-agent: Mercurial debugwireproto\r\n | |||||
s> \r\n | |||||
s> )\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1InamespaceIbookmarksDnameHlistkeys | |||||
s> makefile('rb', None) | |||||
s> HTTP/1.1 200 OK\r\n | |||||
s> Server: testing stub value\r\n | |||||
s> Date: $HTTP_DATE$\r\n | |||||
s> Content-Type: application/mercurial-exp-framing-0003\r\n | |||||
s> Transfer-Encoding: chunked\r\n | |||||
s> \r\n | |||||
s> 35\r\n | |||||
s> -\x00\x00\x01\x00\x02\x01F | |||||
s> \xa1A@X(26805aba1e600a82e93661149f2313866a221a7b | |||||
s> \r\n | |||||
received frame(size=45; request=1; stream=2; streamflags=stream-begin; type=bytes-response; flags=eos|cbor) | |||||
s> 0\r\n | |||||
s> \r\n | |||||
response: [{b'@': b'26805aba1e600a82e93661149f2313866a221a7b'}] | |||||
$ cat error.log |
Nit: if namespace could be None, this would crash.