Show More
@@ -0,0 +1,121 b'' | |||
|
1 | $ . $TESTDIR/wireprotohelpers.sh | |
|
2 | ||
|
3 | $ hg init server | |
|
4 | $ enablehttpv2 server | |
|
5 | $ cd server | |
|
6 | $ hg debugdrawdag << EOF | |
|
7 | > C D | |
|
8 | > |/ | |
|
9 | > B | |
|
10 | > | | |
|
11 | > A | |
|
12 | > EOF | |
|
13 | ||
|
14 | $ hg log -T '{rev}:{node} {desc}\n' | |
|
15 | 3:be0ef73c17ade3fc89dc41701eb9fc3a91b58282 D | |
|
16 | 2:26805aba1e600a82e93661149f2313866a221a7b C | |
|
17 | 1:112478962961147124edd43549aedd1a335e44bf B | |
|
18 | 0:426bada5c67598ca65036d57d9e4b64b0c1ce7a0 A | |
|
19 | ||
|
20 | $ hg serve -p $HGPORT -d --pid-file hg.pid -E error.log | |
|
21 | $ cat hg.pid > $DAEMON_PIDS | |
|
22 | ||
|
23 | No arguments returns something reasonable | |
|
24 | ||
|
25 | $ sendhttpv2peer << EOF | |
|
26 | > command known | |
|
27 | > EOF | |
|
28 | creating http peer for wire protocol version 2 | |
|
29 | sending known command | |
|
30 | s> POST /api/exp-http-v2-0001/ro/known HTTP/1.1\r\n | |
|
31 | s> Accept-Encoding: identity\r\n | |
|
32 | s> accept: application/mercurial-exp-framing-0003\r\n | |
|
33 | s> content-type: application/mercurial-exp-framing-0003\r\n | |
|
34 | s> content-length: 20\r\n | |
|
35 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
36 | s> user-agent: Mercurial debugwireproto\r\n | |
|
37 | s> \r\n | |
|
38 | s> \x0c\x00\x00\x01\x00\x01\x01\x11\xa1DnameEknown | |
|
39 | s> makefile('rb', None) | |
|
40 | s> HTTP/1.1 200 OK\r\n | |
|
41 | s> Server: testing stub value\r\n | |
|
42 | s> Date: $HTTP_DATE$\r\n | |
|
43 | s> Content-Type: application/mercurial-exp-framing-0003\r\n | |
|
44 | s> Transfer-Encoding: chunked\r\n | |
|
45 | s> \r\n | |
|
46 | s> 9\r\n | |
|
47 | s> \x01\x00\x00\x01\x00\x02\x01F | |
|
48 | s> @ | |
|
49 | s> \r\n | |
|
50 | received frame(size=1; request=1; stream=2; streamflags=stream-begin; type=bytes-response; flags=eos|cbor) | |
|
51 | s> 0\r\n | |
|
52 | s> \r\n | |
|
53 | response: [] | |
|
54 | ||
|
55 | Single known node works | |
|
56 | ||
|
57 | $ sendhttpv2peer << EOF | |
|
58 | > command known | |
|
59 | > nodes eval:[b'\x42\x6b\xad\xa5\xc6\x75\x98\xca\x65\x03\x6d\x57\xd9\xe4\xb6\x4b\x0c\x1c\xe7\xa0'] | |
|
60 | > EOF | |
|
61 | creating http peer for wire protocol version 2 | |
|
62 | sending known command | |
|
63 | s> POST /api/exp-http-v2-0001/ro/known HTTP/1.1\r\n | |
|
64 | s> Accept-Encoding: identity\r\n | |
|
65 | s> accept: application/mercurial-exp-framing-0003\r\n | |
|
66 | s> content-type: application/mercurial-exp-framing-0003\r\n | |
|
67 | s> content-length: 54\r\n | |
|
68 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
69 | s> user-agent: Mercurial debugwireproto\r\n | |
|
70 | s> \r\n | |
|
71 | s> .\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1Enodes\x81TBk\xad\xa5\xc6u\x98\xcae\x03mW\xd9\xe4\xb6K\x0c\x1c\xe7\xa0DnameEknown | |
|
72 | s> makefile('rb', None) | |
|
73 | s> HTTP/1.1 200 OK\r\n | |
|
74 | s> Server: testing stub value\r\n | |
|
75 | s> Date: $HTTP_DATE$\r\n | |
|
76 | s> Content-Type: application/mercurial-exp-framing-0003\r\n | |
|
77 | s> Transfer-Encoding: chunked\r\n | |
|
78 | s> \r\n | |
|
79 | s> a\r\n | |
|
80 | s> \x02\x00\x00\x01\x00\x02\x01F | |
|
81 | s> A1 | |
|
82 | s> \r\n | |
|
83 | received frame(size=2; request=1; stream=2; streamflags=stream-begin; type=bytes-response; flags=eos|cbor) | |
|
84 | s> 0\r\n | |
|
85 | s> \r\n | |
|
86 | response: [b'1'] | |
|
87 | ||
|
88 | Multiple nodes works | |
|
89 | ||
|
90 | $ sendhttpv2peer << EOF | |
|
91 | > command known | |
|
92 | > nodes eval:[b'\x42\x6b\xad\xa5\xc6\x75\x98\xca\x65\x03\x6d\x57\xd9\xe4\xb6\x4b\x0c\x1c\xe7\xa0', b'00000000000000000000', b'\x11\x24\x78\x96\x29\x61\x14\x71\x24\xed\xd4\x35\x49\xae\xdd\x1a\x33\x5e\x44\xbf'] | |
|
93 | > EOF | |
|
94 | creating http peer for wire protocol version 2 | |
|
95 | sending known command | |
|
96 | s> POST /api/exp-http-v2-0001/ro/known HTTP/1.1\r\n | |
|
97 | s> Accept-Encoding: identity\r\n | |
|
98 | s> accept: application/mercurial-exp-framing-0003\r\n | |
|
99 | s> content-type: application/mercurial-exp-framing-0003\r\n | |
|
100 | s> content-length: 96\r\n | |
|
101 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
102 | s> user-agent: Mercurial debugwireproto\r\n | |
|
103 | s> \r\n | |
|
104 | s> X\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1Enodes\x83TBk\xad\xa5\xc6u\x98\xcae\x03mW\xd9\xe4\xb6K\x0c\x1c\xe7\xa0T00000000000000000000T\x11$x\x96)a\x14q$\xed\xd45I\xae\xdd\x1a3^D\xbfDnameEknown | |
|
105 | s> makefile('rb', None) | |
|
106 | s> HTTP/1.1 200 OK\r\n | |
|
107 | s> Server: testing stub value\r\n | |
|
108 | s> Date: $HTTP_DATE$\r\n | |
|
109 | s> Content-Type: application/mercurial-exp-framing-0003\r\n | |
|
110 | s> Transfer-Encoding: chunked\r\n | |
|
111 | s> \r\n | |
|
112 | s> c\r\n | |
|
113 | s> \x04\x00\x00\x01\x00\x02\x01F | |
|
114 | s> C101 | |
|
115 | s> \r\n | |
|
116 | received frame(size=4; request=1; stream=2; streamflags=stream-begin; type=bytes-response; flags=eos|cbor) | |
|
117 | s> 0\r\n | |
|
118 | s> \r\n | |
|
119 | response: [b'101'] | |
|
120 | ||
|
121 | $ cat error.log |
@@ -1686,3 +1686,19 b' of DAG heads. The array can be empty if ' | |||
|
1686 | 1686 | changesets satisfied the request. |
|
1687 | 1687 | |
|
1688 | 1688 | TODO consider exposing phase of heads in response |
|
1689 | ||
|
1690 | known | |
|
1691 | ----- | |
|
1692 | ||
|
1693 | Determine whether a series of changeset nodes is known to the server. | |
|
1694 | ||
|
1695 | The command accepts the following arguments: | |
|
1696 | ||
|
1697 | nodes | |
|
1698 | (array of bytestrings) List of changeset nodes whose presence to | |
|
1699 | query. | |
|
1700 | ||
|
1701 | The response is a bytestring where each byte contains a 0 or 1 for the | |
|
1702 | corresponding requested node at the same index. | |
|
1703 | ||
|
1704 | TODO use a bit array for even more compact response |
@@ -1041,7 +1041,8 b' def lookup(repo, proto, key):' | |||
|
1041 | 1041 | success = 0 |
|
1042 | 1042 | return wireprototypes.bytesresponse('%d %s\n' % (success, r)) |
|
1043 | 1043 | |
|
1044 |
@wireprotocommand('known', 'nodes *', permission='pull' |
|
|
1044 | @wireprotocommand('known', 'nodes *', permission='pull', | |
|
1045 | transportpolicy=POLICY_V1_ONLY) | |
|
1045 | 1046 | def known(repo, proto, nodes, others): |
|
1046 | 1047 | v = ''.join(b and '1' or '0' for b in repo.known(decodelist(nodes))) |
|
1047 | 1048 | return wireprototypes.bytesresponse(v) |
@@ -1215,3 +1216,10 b' def headsv2(repo, proto, publiconly=Fals' | |||
|
1215 | 1216 | repo = repo.filtered('immutable') |
|
1216 | 1217 | |
|
1217 | 1218 | return wireprototypes.cborresponse(repo.heads()) |
|
1219 | ||
|
1220 | @wireprotocommand('known', 'nodes', permission='pull', | |
|
1221 | transportpolicy=POLICY_V2_ONLY) | |
|
1222 | def knownv2(repo, proto, nodes=None): | |
|
1223 | nodes = nodes or [] | |
|
1224 | result = b''.join(b'1' if n else b'0' for n in repo.known(nodes)) | |
|
1225 | return wireprototypes.cborresponse(result) |
General Comments 0
You need to be logged in to leave comments.
Login now