Mercurial > hg
comparison tests/test-wireproto-command-changesetdata.t @ 39630:9c2c77c73f23
wireprotov2: define and implement "changesetdata" command
This commit introduces the "changesetdata" wire protocol command.
The role of the command is to expose data associated with changelog
revisions, including the raw revision data itself.
This command is the first piece of a new clone/pull strategy that
is built on top of domain-specific commands for data retrieval.
Instead of a monolithic "getbundle" command that transfers all of the
things, we'll be introducing commands for fetching specific pieces
of data.
Since the changeset is the fundamental unit from which we derive
pointers to other data (manifests, file nodes, etc), it makes sense
to start reimplementing pull with this data.
The command accepts as arguments a set of root and head revisions
defining the changesets that should be fetched as well as an explicit
list of nodes. By default, the command returns only the node values:
the client must explicitly request additional fields be added to the
response. Current supported fields are the list of parent nodes and
the revision fulltext.
My plan is to eventually add support for transferring other data
associated with changesets, including phases, bookmarks, obsolescence
markers, etc. Since the response format is CBOR, we'll be able to add
this data into the response object relatively easily (it should be
as simple as adding a key in a map).
The documentation captures a number of TODO items. Some of these may
require BC breaking changes. That's fine: wire protocol v2 is still
highly experimental.
Differential Revision: https://phab.mercurial-scm.org/D4481
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 12 Sep 2018 10:01:16 -0700 |
parents | |
children | c1aacb0d76ff |
comparison
equal
deleted
inserted
replaced
39629:a86d21e70b2b | 39630:9c2c77c73f23 |
---|---|
1 $ . $TESTDIR/wireprotohelpers.sh | |
2 | |
3 $ hg init server | |
4 $ enablehttpv2 server | |
5 $ cd server | |
6 $ echo a0 > a | |
7 $ echo b0 > b | |
8 | |
9 $ hg -q commit -A -m 'commit 0' | |
10 | |
11 $ echo a1 > a | |
12 $ echo b1 > b | |
13 $ hg commit -m 'commit 1' | |
14 $ echo b2 > b | |
15 $ hg commit -m 'commit 2' | |
16 | |
17 $ hg -q up -r 0 | |
18 $ echo a2 > a | |
19 $ hg commit -m 'commit 3' | |
20 created new head | |
21 | |
22 $ hg log -G -T '{rev}:{node} {desc}\n' | |
23 @ 3:eae5f82c2e622368d27daecb76b7e393d0f24211 commit 3 | |
24 | | |
25 | o 2:0bb8ad894a15b15380b2a2a5b183e20f2a4b28dd commit 2 | |
26 | | | |
27 | o 1:7592917e1c3e82677cb0a4bc715ca25dd12d28c1 commit 1 | |
28 |/ | |
29 o 0:3390ef850073fbc2f0dfff2244342c8e9229013a commit 0 | |
30 | |
31 | |
32 $ hg serve -p $HGPORT -d --pid-file hg.pid -E error.log | |
33 $ cat hg.pid > $DAEMON_PIDS | |
34 | |
35 No arguments is an invalid request | |
36 | |
37 $ sendhttpv2peer << EOF | |
38 > command changesetdata | |
39 > EOF | |
40 creating http peer for wire protocol version 2 | |
41 sending changesetdata command | |
42 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
43 s> Accept-Encoding: identity\r\n | |
44 s> accept: application/mercurial-exp-framing-0005\r\n | |
45 s> content-type: application/mercurial-exp-framing-0005\r\n | |
46 s> content-length: 28\r\n | |
47 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
48 s> user-agent: Mercurial debugwireproto\r\n | |
49 s> \r\n | |
50 s> \x14\x00\x00\x01\x00\x01\x01\x11\xa1DnameMchangesetdata | |
51 s> makefile('rb', None) | |
52 s> HTTP/1.1 200 OK\r\n | |
53 s> Server: testing stub value\r\n | |
54 s> Date: $HTTP_DATE$\r\n | |
55 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
56 s> Transfer-Encoding: chunked\r\n | |
57 s> \r\n | |
58 s> 49\r\n | |
59 s> A\x00\x00\x01\x00\x02\x012 | |
60 s> \xa2Eerror\xa1GmessageX"noderange or nodes must be definedFstatusEerror | |
61 s> \r\n | |
62 received frame(size=65; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=eos) | |
63 s> 0\r\n | |
64 s> \r\n | |
65 abort: noderange or nodes must be defined! | |
66 [255] | |
67 | |
68 Empty noderange heads results in an error | |
69 | |
70 $ sendhttpv2peer << EOF | |
71 > command changesetdata | |
72 > noderange eval:[[],[]] | |
73 > EOF | |
74 creating http peer for wire protocol version 2 | |
75 sending changesetdata command | |
76 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
77 s> Accept-Encoding: identity\r\n | |
78 s> accept: application/mercurial-exp-framing-0005\r\n | |
79 s> content-type: application/mercurial-exp-framing-0005\r\n | |
80 s> content-length: 47\r\n | |
81 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
82 s> user-agent: Mercurial debugwireproto\r\n | |
83 s> \r\n | |
84 s> \'\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1Inoderange\x82\x80\x80DnameMchangesetdata | |
85 s> makefile('rb', None) | |
86 s> HTTP/1.1 200 OK\r\n | |
87 s> Server: testing stub value\r\n | |
88 s> Date: $HTTP_DATE$\r\n | |
89 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
90 s> Transfer-Encoding: chunked\r\n | |
91 s> \r\n | |
92 s> 51\r\n | |
93 s> I\x00\x00\x01\x00\x02\x012 | |
94 s> \xa2Eerror\xa1GmessageX*heads in noderange request cannot be emptyFstatusEerror | |
95 s> \r\n | |
96 received frame(size=73; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=eos) | |
97 s> 0\r\n | |
98 s> \r\n | |
99 abort: heads in noderange request cannot be empty! | |
100 [255] | |
101 | |
102 Sending just noderange heads sends all revisions | |
103 | |
104 $ sendhttpv2peer << EOF | |
105 > command changesetdata | |
106 > noderange eval:[[], [b'\x0b\xb8\xad\x89\x4a\x15\xb1\x53\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f\x2a\x4b\x28\xdd', b'\xea\xe5\xf8\x2c\x2e\x62\x23\x68\xd2\x7d\xae\xcb\x76\xb7\xe3\x93\xd0\xf2\x42\x11']] | |
107 > EOF | |
108 creating http peer for wire protocol version 2 | |
109 sending changesetdata command | |
110 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
111 s> Accept-Encoding: identity\r\n | |
112 s> accept: application/mercurial-exp-framing-0005\r\n | |
113 s> content-type: application/mercurial-exp-framing-0005\r\n | |
114 s> content-length: 89\r\n | |
115 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
116 s> user-agent: Mercurial debugwireproto\r\n | |
117 s> \r\n | |
118 s> Q\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1Inoderange\x82\x80\x82T\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xddT\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11DnameMchangesetdata | |
119 s> makefile('rb', None) | |
120 s> HTTP/1.1 200 OK\r\n | |
121 s> Server: testing stub value\r\n | |
122 s> Date: $HTTP_DATE$\r\n | |
123 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
124 s> Transfer-Encoding: chunked\r\n | |
125 s> \r\n | |
126 s> 13\r\n | |
127 s> \x0b\x00\x00\x01\x00\x02\x011 | |
128 s> \xa1FstatusBok | |
129 s> \r\n | |
130 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
131 s> 81\r\n | |
132 s> y\x00\x00\x01\x00\x02\x001 | |
133 s> \xa1Jtotalitems\x04\xa1DnodeT3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:\xa1DnodeTu\x92\x91~\x1c>\x82g|\xb0\xa4\xbcq\\\xa2]\xd1-(\xc1\xa1DnodeT\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xdd\xa1DnodeT\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11 | |
134 s> \r\n | |
135 received frame(size=121; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
136 s> 8\r\n | |
137 s> \x00\x00\x00\x01\x00\x02\x002 | |
138 s> \r\n | |
139 s> 0\r\n | |
140 s> \r\n | |
141 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
142 response: gen[ | |
143 { | |
144 b'totalitems': 4 | |
145 }, | |
146 { | |
147 b'node': b'3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:' | |
148 }, | |
149 { | |
150 b'node': b'u\x92\x91~\x1c>\x82g|\xb0\xa4\xbcq\\\xa2]\xd1-(\xc1' | |
151 }, | |
152 { | |
153 b'node': b'\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xdd' | |
154 }, | |
155 { | |
156 b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' | |
157 } | |
158 ] | |
159 | |
160 Sending root nodes limits what data is sent | |
161 | |
162 $ sendhttpv2peer << EOF | |
163 > command changesetdata | |
164 > noderange eval:[[b'\x33\x90\xef\x85\x00\x73\xfb\xc2\xf0\xdf\xff\x22\x44\x34\x2c\x8e\x92\x29\x01\x3a'], [b'\x0b\xb8\xad\x89\x4a\x15\xb1\x53\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f\x2a\x4b\x28\xdd']] | |
165 > EOF | |
166 creating http peer for wire protocol version 2 | |
167 sending changesetdata command | |
168 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
169 s> Accept-Encoding: identity\r\n | |
170 s> accept: application/mercurial-exp-framing-0005\r\n | |
171 s> content-type: application/mercurial-exp-framing-0005\r\n | |
172 s> content-length: 89\r\n | |
173 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
174 s> user-agent: Mercurial debugwireproto\r\n | |
175 s> \r\n | |
176 s> Q\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1Inoderange\x82\x81T3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:\x81T\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xddDnameMchangesetdata | |
177 s> makefile('rb', None) | |
178 s> HTTP/1.1 200 OK\r\n | |
179 s> Server: testing stub value\r\n | |
180 s> Date: $HTTP_DATE$\r\n | |
181 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
182 s> Transfer-Encoding: chunked\r\n | |
183 s> \r\n | |
184 s> 13\r\n | |
185 s> \x0b\x00\x00\x01\x00\x02\x011 | |
186 s> \xa1FstatusBok | |
187 s> \r\n | |
188 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
189 s> 4b\r\n | |
190 s> C\x00\x00\x01\x00\x02\x001 | |
191 s> \xa1Jtotalitems\x02\xa1DnodeTu\x92\x91~\x1c>\x82g|\xb0\xa4\xbcq\\\xa2]\xd1-(\xc1\xa1DnodeT\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xdd | |
192 s> \r\n | |
193 received frame(size=67; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
194 s> 8\r\n | |
195 s> \x00\x00\x00\x01\x00\x02\x002 | |
196 s> \r\n | |
197 s> 0\r\n | |
198 s> \r\n | |
199 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
200 response: gen[ | |
201 { | |
202 b'totalitems': 2 | |
203 }, | |
204 { | |
205 b'node': b'u\x92\x91~\x1c>\x82g|\xb0\xa4\xbcq\\\xa2]\xd1-(\xc1' | |
206 }, | |
207 { | |
208 b'node': b'\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xdd' | |
209 } | |
210 ] | |
211 | |
212 Requesting data on a single node by node works | |
213 | |
214 $ sendhttpv2peer << EOF | |
215 > command changesetdata | |
216 > nodes eval:[b'\x33\x90\xef\x85\x00\x73\xfb\xc2\xf0\xdf\xff\x22\x44\x34\x2c\x8e\x92\x29\x01\x3a'] | |
217 > EOF | |
218 creating http peer for wire protocol version 2 | |
219 sending changesetdata command | |
220 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
221 s> Accept-Encoding: identity\r\n | |
222 s> accept: application/mercurial-exp-framing-0005\r\n | |
223 s> content-type: application/mercurial-exp-framing-0005\r\n | |
224 s> content-length: 62\r\n | |
225 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
226 s> user-agent: Mercurial debugwireproto\r\n | |
227 s> \r\n | |
228 s> 6\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1Enodes\x81T3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:DnameMchangesetdata | |
229 s> makefile('rb', None) | |
230 s> HTTP/1.1 200 OK\r\n | |
231 s> Server: testing stub value\r\n | |
232 s> Date: $HTTP_DATE$\r\n | |
233 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
234 s> Transfer-Encoding: chunked\r\n | |
235 s> \r\n | |
236 s> 13\r\n | |
237 s> \x0b\x00\x00\x01\x00\x02\x011 | |
238 s> \xa1FstatusBok | |
239 s> \r\n | |
240 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
241 s> 30\r\n | |
242 s> (\x00\x00\x01\x00\x02\x001 | |
243 s> \xa1Jtotalitems\x01\xa1DnodeT3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01: | |
244 s> \r\n | |
245 received frame(size=40; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
246 s> 8\r\n | |
247 s> \x00\x00\x00\x01\x00\x02\x002 | |
248 s> \r\n | |
249 s> 0\r\n | |
250 s> \r\n | |
251 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
252 response: gen[ | |
253 { | |
254 b'totalitems': 1 | |
255 }, | |
256 { | |
257 b'node': b'3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:' | |
258 } | |
259 ] | |
260 | |
261 Specifying a noderange and nodes takes union | |
262 | |
263 $ sendhttpv2peer << EOF | |
264 > command changesetdata | |
265 > noderange eval:[[b'\x75\x92\x91\x7e\x1c\x3e\x82\x67\x7c\xb0\xa4\xbc\x71\x5c\xa2\x5d\xd1\x2d\x28\xc1'], [b'\x0b\xb8\xad\x89\x4a\x15\xb1\x53\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f\x2a\x4b\x28\xdd']] | |
266 > nodes eval:[b'\xea\xe5\xf8\x2c\x2e\x62\x23\x68\xd2\x7d\xae\xcb\x76\xb7\xe3\x93\xd0\xf2\x42\x11'] | |
267 > EOF | |
268 creating http peer for wire protocol version 2 | |
269 sending changesetdata command | |
270 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
271 s> Accept-Encoding: identity\r\n | |
272 s> accept: application/mercurial-exp-framing-0005\r\n | |
273 s> content-type: application/mercurial-exp-framing-0005\r\n | |
274 s> content-length: 117\r\n | |
275 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
276 s> user-agent: Mercurial debugwireproto\r\n | |
277 s> \r\n | |
278 s> m\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa2Inoderange\x82\x81Tu\x92\x91~\x1c>\x82g|\xb0\xa4\xbcq\\\xa2]\xd1-(\xc1\x81T\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xddEnodes\x81T\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11DnameMchangesetdata | |
279 s> makefile('rb', None) | |
280 s> HTTP/1.1 200 OK\r\n | |
281 s> Server: testing stub value\r\n | |
282 s> Date: $HTTP_DATE$\r\n | |
283 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
284 s> Transfer-Encoding: chunked\r\n | |
285 s> \r\n | |
286 s> 13\r\n | |
287 s> \x0b\x00\x00\x01\x00\x02\x011 | |
288 s> \xa1FstatusBok | |
289 s> \r\n | |
290 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
291 s> 4b\r\n | |
292 s> C\x00\x00\x01\x00\x02\x001 | |
293 s> \xa1Jtotalitems\x02\xa1DnodeT\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11\xa1DnodeT\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xdd | |
294 s> \r\n | |
295 received frame(size=67; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
296 s> 8\r\n | |
297 s> \x00\x00\x00\x01\x00\x02\x002 | |
298 s> \r\n | |
299 s> 0\r\n | |
300 s> \r\n | |
301 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
302 response: gen[ | |
303 { | |
304 b'totalitems': 2 | |
305 }, | |
306 { | |
307 b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11' | |
308 }, | |
309 { | |
310 b'node': b'\x0b\xb8\xad\x89J\x15\xb1S\x80\xb2\xa2\xa5\xb1\x83\xe2\x0f*K(\xdd' | |
311 } | |
312 ] | |
313 | |
314 Parents data is transferred upon request | |
315 | |
316 $ sendhttpv2peer << EOF | |
317 > command changesetdata | |
318 > fields eval:[b'parents'] | |
319 > nodes eval:[b'\xea\xe5\xf8\x2c\x2e\x62\x23\x68\xd2\x7d\xae\xcb\x76\xb7\xe3\x93\xd0\xf2\x42\x11'] | |
320 > EOF | |
321 creating http peer for wire protocol version 2 | |
322 sending changesetdata command | |
323 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
324 s> Accept-Encoding: identity\r\n | |
325 s> accept: application/mercurial-exp-framing-0005\r\n | |
326 s> content-type: application/mercurial-exp-framing-0005\r\n | |
327 s> content-length: 78\r\n | |
328 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
329 s> user-agent: Mercurial debugwireproto\r\n | |
330 s> \r\n | |
331 s> F\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa2Ffields\x81GparentsEnodes\x81T\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11DnameMchangesetdata | |
332 s> makefile('rb', None) | |
333 s> HTTP/1.1 200 OK\r\n | |
334 s> Server: testing stub value\r\n | |
335 s> Date: $HTTP_DATE$\r\n | |
336 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
337 s> Transfer-Encoding: chunked\r\n | |
338 s> \r\n | |
339 s> 13\r\n | |
340 s> \x0b\x00\x00\x01\x00\x02\x011 | |
341 s> \xa1FstatusBok | |
342 s> \r\n | |
343 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
344 s> 63\r\n | |
345 s> [\x00\x00\x01\x00\x02\x001 | |
346 s> \xa1Jtotalitems\x01\xa2DnodeT\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11Gparents\x82T3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 | |
347 s> \r\n | |
348 received frame(size=91; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
349 s> 8\r\n | |
350 s> \x00\x00\x00\x01\x00\x02\x002 | |
351 s> \r\n | |
352 s> 0\r\n | |
353 s> \r\n | |
354 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
355 response: gen[ | |
356 { | |
357 b'totalitems': 1 | |
358 }, | |
359 { | |
360 b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11', | |
361 b'parents': [ | |
362 b'3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:', | |
363 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' | |
364 ] | |
365 } | |
366 ] | |
367 | |
368 Revision data is transferred upon request | |
369 | |
370 $ sendhttpv2peer << EOF | |
371 > command changesetdata | |
372 > fields eval:[b'revision'] | |
373 > nodes eval:[b'\xea\xe5\xf8\x2c\x2e\x62\x23\x68\xd2\x7d\xae\xcb\x76\xb7\xe3\x93\xd0\xf2\x42\x11'] | |
374 > EOF | |
375 creating http peer for wire protocol version 2 | |
376 sending changesetdata command | |
377 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
378 s> Accept-Encoding: identity\r\n | |
379 s> accept: application/mercurial-exp-framing-0005\r\n | |
380 s> content-type: application/mercurial-exp-framing-0005\r\n | |
381 s> content-length: 79\r\n | |
382 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
383 s> user-agent: Mercurial debugwireproto\r\n | |
384 s> \r\n | |
385 s> G\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa2Ffields\x81HrevisionEnodes\x81T\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11DnameMchangesetdata | |
386 s> makefile('rb', None) | |
387 s> HTTP/1.1 200 OK\r\n | |
388 s> Server: testing stub value\r\n | |
389 s> Date: $HTTP_DATE$\r\n | |
390 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
391 s> Transfer-Encoding: chunked\r\n | |
392 s> \r\n | |
393 s> 13\r\n | |
394 s> \x0b\x00\x00\x01\x00\x02\x011 | |
395 s> \xa1FstatusBok | |
396 s> \r\n | |
397 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
398 s> 7e\r\n | |
399 s> v\x00\x00\x01\x00\x02\x001 | |
400 s> \xa1Jtotalitems\x01\xa2DnodeT\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11Lrevisionsize\x18=X=1b74476799ec8318045db759b1b4bcc9b839d0aa\n | |
401 s> test\n | |
402 s> 0 0\n | |
403 s> a\n | |
404 s> \n | |
405 s> commit 3 | |
406 s> \r\n | |
407 received frame(size=118; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
408 s> 8\r\n | |
409 s> \x00\x00\x00\x01\x00\x02\x002 | |
410 s> \r\n | |
411 s> 0\r\n | |
412 s> \r\n | |
413 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
414 response: gen[ | |
415 { | |
416 b'totalitems': 1 | |
417 }, | |
418 { | |
419 b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11', | |
420 b'revisionsize': 61 | |
421 }, | |
422 b'1b74476799ec8318045db759b1b4bcc9b839d0aa\ntest\n0 0\na\n\ncommit 3' | |
423 ] | |
424 | |
425 Multiple fields can be transferred | |
426 | |
427 $ sendhttpv2peer << EOF | |
428 > command changesetdata | |
429 > fields eval:[b'parents', b'revision'] | |
430 > nodes eval:[b'\xea\xe5\xf8\x2c\x2e\x62\x23\x68\xd2\x7d\xae\xcb\x76\xb7\xe3\x93\xd0\xf2\x42\x11'] | |
431 > EOF | |
432 creating http peer for wire protocol version 2 | |
433 sending changesetdata command | |
434 s> POST /api/exp-http-v2-0001/ro/changesetdata HTTP/1.1\r\n | |
435 s> Accept-Encoding: identity\r\n | |
436 s> accept: application/mercurial-exp-framing-0005\r\n | |
437 s> content-type: application/mercurial-exp-framing-0005\r\n | |
438 s> content-length: 87\r\n | |
439 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
440 s> user-agent: Mercurial debugwireproto\r\n | |
441 s> \r\n | |
442 s> O\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa2Ffields\x82GparentsHrevisionEnodes\x81T\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11DnameMchangesetdata | |
443 s> makefile('rb', None) | |
444 s> HTTP/1.1 200 OK\r\n | |
445 s> Server: testing stub value\r\n | |
446 s> Date: $HTTP_DATE$\r\n | |
447 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
448 s> Transfer-Encoding: chunked\r\n | |
449 s> \r\n | |
450 s> 13\r\n | |
451 s> \x0b\x00\x00\x01\x00\x02\x011 | |
452 s> \xa1FstatusBok | |
453 s> \r\n | |
454 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
455 s> b1\r\n | |
456 s> \xa9\x00\x00\x01\x00\x02\x001 | |
457 s> \xa1Jtotalitems\x01\xa3DnodeT\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11Gparents\x82T3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Lrevisionsize\x18=X=1b74476799ec8318045db759b1b4bcc9b839d0aa\n | |
458 s> test\n | |
459 s> 0 0\n | |
460 s> a\n | |
461 s> \n | |
462 s> commit 3 | |
463 s> \r\n | |
464 received frame(size=169; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
465 s> 8\r\n | |
466 s> \x00\x00\x00\x01\x00\x02\x002 | |
467 s> \r\n | |
468 s> 0\r\n | |
469 s> \r\n | |
470 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
471 response: gen[ | |
472 { | |
473 b'totalitems': 1 | |
474 }, | |
475 { | |
476 b'node': b'\xea\xe5\xf8,.b#h\xd2}\xae\xcbv\xb7\xe3\x93\xd0\xf2B\x11', | |
477 b'parents': [ | |
478 b'3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:', | |
479 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' | |
480 ], | |
481 b'revisionsize': 61 | |
482 }, | |
483 b'1b74476799ec8318045db759b1b4bcc9b839d0aa\ntest\n0 0\na\n\ncommit 3' | |
484 ] | |
485 | |
486 $ cat error.log |