Show More
@@ -0,0 +1,497 b'' | |||
|
1 | $ . $TESTDIR/wireprotohelpers.sh | |
|
2 | ||
|
3 | $ hg init server | |
|
4 | $ enablehttpv2 server | |
|
5 | $ cd server | |
|
6 | $ echo a0 > a | |
|
7 | $ echo b0 > b | |
|
8 | $ mkdir -p dir0/child0 dir0/child1 dir1 | |
|
9 | $ echo c0 > dir0/c | |
|
10 | $ echo d0 > dir0/d | |
|
11 | $ echo e0 > dir0/child0/e | |
|
12 | $ echo f0 > dir0/child1/f | |
|
13 | $ hg -q commit -A -m 'commit 0' | |
|
14 | ||
|
15 | $ echo a1 > a | |
|
16 | $ echo d1 > dir0/d | |
|
17 | $ hg commit -m 'commit 1' | |
|
18 | $ echo f0 > dir0/child1/f | |
|
19 | $ hg commit -m 'commit 2' | |
|
20 | nothing changed | |
|
21 | [1] | |
|
22 | ||
|
23 | $ hg -q up -r 0 | |
|
24 | $ echo a2 > a | |
|
25 | $ hg commit -m 'commit 3' | |
|
26 | created new head | |
|
27 | ||
|
28 | $ hg log -G -T '{rev}:{node} {desc}\n' | |
|
29 | @ 2:c8757a2ffe552850d1e0dfe60d295ebf64c196d9 commit 3 | |
|
30 | | | |
|
31 | | o 1:650165e803375748a94df471e5b58d85763e0b29 commit 1 | |
|
32 | |/ | |
|
33 | o 0:6d85ca1270b377d320098556ba5bfad34a9ee12d commit 0 | |
|
34 | ||
|
35 | ||
|
36 | $ hg --debug debugindex a | |
|
37 | rev linkrev nodeid p1 p2 | |
|
38 | 0 0 2b4eb07319bfa077a40a2f04913659aef0da42da 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 | |
|
39 | 1 1 9a38122997b3ac97be2a9aa2e556838341fdf2cc 2b4eb07319bfa077a40a2f04913659aef0da42da 0000000000000000000000000000000000000000 | |
|
40 | 2 2 0879345e39377229634b420c639454156726c6b6 2b4eb07319bfa077a40a2f04913659aef0da42da 0000000000000000000000000000000000000000 | |
|
41 | ||
|
42 | $ hg --debug debugindex dir0/child0/e | |
|
43 | rev linkrev nodeid p1 p2 | |
|
44 | 0 0 bbba6c06b30f443d34ff841bc985c4d0827c6be4 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 | |
|
45 | ||
|
46 | $ hg serve -p $HGPORT -d --pid-file hg.pid -E error.log | |
|
47 | $ cat hg.pid > $DAEMON_PIDS | |
|
48 | ||
|
49 | Missing arguments is an error | |
|
50 | ||
|
51 | $ sendhttpv2peer << EOF | |
|
52 | > command filedata | |
|
53 | > EOF | |
|
54 | creating http peer for wire protocol version 2 | |
|
55 | sending filedata command | |
|
56 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
57 | s> Accept-Encoding: identity\r\n | |
|
58 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
59 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
60 | s> content-length: 23\r\n | |
|
61 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
62 | s> user-agent: Mercurial debugwireproto\r\n | |
|
63 | s> \r\n | |
|
64 | s> \x0f\x00\x00\x01\x00\x01\x01\x11\xa1DnameHfiledata | |
|
65 | s> makefile('rb', None) | |
|
66 | s> HTTP/1.1 200 OK\r\n | |
|
67 | s> Server: testing stub value\r\n | |
|
68 | s> Date: $HTTP_DATE$\r\n | |
|
69 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
70 | s> Transfer-Encoding: chunked\r\n | |
|
71 | s> \r\n | |
|
72 | s> 45\r\n | |
|
73 | s> =\x00\x00\x01\x00\x02\x012 | |
|
74 | s> \xa2Eerror\xa1GmessageX\x1enodes argument must be definedFstatusEerror | |
|
75 | s> \r\n | |
|
76 | received frame(size=61; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=eos) | |
|
77 | s> 0\r\n | |
|
78 | s> \r\n | |
|
79 | abort: nodes argument must be defined! | |
|
80 | [255] | |
|
81 | ||
|
82 | $ sendhttpv2peer << EOF | |
|
83 | > command filedata | |
|
84 | > nodes eval:[] | |
|
85 | > EOF | |
|
86 | creating http peer for wire protocol version 2 | |
|
87 | sending filedata command | |
|
88 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
89 | s> Accept-Encoding: identity\r\n | |
|
90 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
91 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
92 | s> content-length: 36\r\n | |
|
93 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
94 | s> user-agent: Mercurial debugwireproto\r\n | |
|
95 | s> \r\n | |
|
96 | s> \x1c\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa1Enodes\x80DnameHfiledata | |
|
97 | s> makefile('rb', None) | |
|
98 | s> HTTP/1.1 200 OK\r\n | |
|
99 | s> Server: testing stub value\r\n | |
|
100 | s> Date: $HTTP_DATE$\r\n | |
|
101 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
102 | s> Transfer-Encoding: chunked\r\n | |
|
103 | s> \r\n | |
|
104 | s> 44\r\n | |
|
105 | s> <\x00\x00\x01\x00\x02\x012 | |
|
106 | s> \xa2Eerror\xa1GmessageX\x1dpath argument must be definedFstatusEerror | |
|
107 | s> \r\n | |
|
108 | received frame(size=60; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=eos) | |
|
109 | s> 0\r\n | |
|
110 | s> \r\n | |
|
111 | abort: path argument must be defined! | |
|
112 | [255] | |
|
113 | ||
|
114 | Unknown node is an error | |
|
115 | ||
|
116 | $ sendhttpv2peer << EOF | |
|
117 | > command filedata | |
|
118 | > nodes eval:[b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'] | |
|
119 | > path eval:b'a' | |
|
120 | > EOF | |
|
121 | creating http peer for wire protocol version 2 | |
|
122 | sending filedata command | |
|
123 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
124 | s> Accept-Encoding: identity\r\n | |
|
125 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
126 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
127 | s> content-length: 64\r\n | |
|
128 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
129 | s> user-agent: Mercurial debugwireproto\r\n | |
|
130 | s> \r\n | |
|
131 | s> 8\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa2Enodes\x81T\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaaDpathAaDnameHfiledata | |
|
132 | s> makefile('rb', None) | |
|
133 | s> HTTP/1.1 200 OK\r\n | |
|
134 | s> Server: testing stub value\r\n | |
|
135 | s> Date: $HTTP_DATE$\r\n | |
|
136 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
137 | s> Transfer-Encoding: chunked\r\n | |
|
138 | s> \r\n | |
|
139 | s> 6b\r\n | |
|
140 | s> c\x00\x00\x01\x00\x02\x012 | |
|
141 | s> \xa2Eerror\xa2Dargs\x81X(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGmessageUunknown file node: %sFstatusEerror | |
|
142 | s> \r\n | |
|
143 | received frame(size=99; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=eos) | |
|
144 | s> 0\r\n | |
|
145 | s> \r\n | |
|
146 | abort: unknown file node: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! | |
|
147 | [255] | |
|
148 | ||
|
149 | Fetching a single revision returns just metadata by default | |
|
150 | ||
|
151 | $ sendhttpv2peer << EOF | |
|
152 | > command filedata | |
|
153 | > nodes eval:[b'\x9a\x38\x12\x29\x97\xb3\xac\x97\xbe\x2a\x9a\xa2\xe5\x56\x83\x83\x41\xfd\xf2\xcc'] | |
|
154 | > path eval:b'a' | |
|
155 | > EOF | |
|
156 | creating http peer for wire protocol version 2 | |
|
157 | sending filedata command | |
|
158 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
159 | s> Accept-Encoding: identity\r\n | |
|
160 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
161 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
162 | s> content-length: 64\r\n | |
|
163 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
164 | s> user-agent: Mercurial debugwireproto\r\n | |
|
165 | s> \r\n | |
|
166 | s> 8\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa2Enodes\x81T\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccDpathAaDnameHfiledata | |
|
167 | s> makefile('rb', None) | |
|
168 | s> HTTP/1.1 200 OK\r\n | |
|
169 | s> Server: testing stub value\r\n | |
|
170 | s> Date: $HTTP_DATE$\r\n | |
|
171 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
172 | s> Transfer-Encoding: chunked\r\n | |
|
173 | s> \r\n | |
|
174 | s> 13\r\n | |
|
175 | s> \x0b\x00\x00\x01\x00\x02\x011 | |
|
176 | s> \xa1FstatusBok | |
|
177 | s> \r\n | |
|
178 | received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
|
179 | s> 30\r\n | |
|
180 | s> (\x00\x00\x01\x00\x02\x001 | |
|
181 | s> \xa1Jtotalitems\x01\xa1DnodeT\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xcc | |
|
182 | s> \r\n | |
|
183 | received frame(size=40; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
|
184 | s> 8\r\n | |
|
185 | s> \x00\x00\x00\x01\x00\x02\x002 | |
|
186 | s> \r\n | |
|
187 | s> 0\r\n | |
|
188 | s> \r\n | |
|
189 | received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
|
190 | response: gen[ | |
|
191 | { | |
|
192 | b'totalitems': 1 | |
|
193 | }, | |
|
194 | { | |
|
195 | b'node': b'\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xcc' | |
|
196 | } | |
|
197 | ] | |
|
198 | ||
|
199 | Requesting parents works | |
|
200 | ||
|
201 | $ sendhttpv2peer << EOF | |
|
202 | > command filedata | |
|
203 | > nodes eval:[b'\x9a\x38\x12\x29\x97\xb3\xac\x97\xbe\x2a\x9a\xa2\xe5\x56\x83\x83\x41\xfd\xf2\xcc'] | |
|
204 | > path eval:b'a' | |
|
205 | > fields eval:[b'parents'] | |
|
206 | > EOF | |
|
207 | creating http peer for wire protocol version 2 | |
|
208 | sending filedata command | |
|
209 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
210 | s> Accept-Encoding: identity\r\n | |
|
211 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
212 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
213 | s> content-length: 80\r\n | |
|
214 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
215 | s> user-agent: Mercurial debugwireproto\r\n | |
|
216 | s> \r\n | |
|
217 | s> H\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa3Ffields\x81GparentsEnodes\x81T\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccDpathAaDnameHfiledata | |
|
218 | s> makefile('rb', None) | |
|
219 | s> HTTP/1.1 200 OK\r\n | |
|
220 | s> Server: testing stub value\r\n | |
|
221 | s> Date: $HTTP_DATE$\r\n | |
|
222 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
223 | s> Transfer-Encoding: chunked\r\n | |
|
224 | s> \r\n | |
|
225 | s> 13\r\n | |
|
226 | s> \x0b\x00\x00\x01\x00\x02\x011 | |
|
227 | s> \xa1FstatusBok | |
|
228 | s> \r\n | |
|
229 | received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
|
230 | s> 63\r\n | |
|
231 | s> [\x00\x00\x01\x00\x02\x001 | |
|
232 | s> \xa1Jtotalitems\x01\xa2DnodeT\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccGparents\x82T+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
233 | s> /\x04\x916Y\xae\xf0\xdaB\xdaT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 | |
|
234 | s> \r\n | |
|
235 | received frame(size=91; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
|
236 | s> 8\r\n | |
|
237 | s> \x00\x00\x00\x01\x00\x02\x002 | |
|
238 | s> \r\n | |
|
239 | s> 0\r\n | |
|
240 | s> \r\n | |
|
241 | received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
|
242 | response: gen[ | |
|
243 | { | |
|
244 | b'totalitems': 1 | |
|
245 | }, | |
|
246 | { | |
|
247 | b'node': b'\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xcc', | |
|
248 | b'parents': [ | |
|
249 | b'+N\xb0s\x19\xbf\xa0w\xa4\n/\x04\x916Y\xae\xf0\xdaB\xda', | |
|
250 | b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' | |
|
251 | ] | |
|
252 | } | |
|
253 | ] | |
|
254 | ||
|
255 | Requesting revision data works | |
|
256 | ||
|
257 | $ sendhttpv2peer << EOF | |
|
258 | > command filedata | |
|
259 | > nodes eval:[b'\x9a\x38\x12\x29\x97\xb3\xac\x97\xbe\x2a\x9a\xa2\xe5\x56\x83\x83\x41\xfd\xf2\xcc'] | |
|
260 | > path eval:b'a' | |
|
261 | > fields eval:[b'revision'] | |
|
262 | > EOF | |
|
263 | creating http peer for wire protocol version 2 | |
|
264 | sending filedata command | |
|
265 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
266 | s> Accept-Encoding: identity\r\n | |
|
267 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
268 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
269 | s> content-length: 81\r\n | |
|
270 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
271 | s> user-agent: Mercurial debugwireproto\r\n | |
|
272 | s> \r\n | |
|
273 | s> I\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa3Ffields\x81HrevisionEnodes\x81T\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccDpathAaDnameHfiledata | |
|
274 | s> makefile('rb', None) | |
|
275 | s> HTTP/1.1 200 OK\r\n | |
|
276 | s> Server: testing stub value\r\n | |
|
277 | s> Date: $HTTP_DATE$\r\n | |
|
278 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
279 | s> Transfer-Encoding: chunked\r\n | |
|
280 | s> \r\n | |
|
281 | s> 13\r\n | |
|
282 | s> \x0b\x00\x00\x01\x00\x02\x011 | |
|
283 | s> \xa1FstatusBok | |
|
284 | s> \r\n | |
|
285 | received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
|
286 | s> 6e\r\n | |
|
287 | s> f\x00\x00\x01\x00\x02\x001 | |
|
288 | s> \xa1Jtotalitems\x01\xa3MdeltabasenodeT+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
289 | s> /\x04\x916Y\xae\xf0\xdaB\xdaIdeltasize\x0fDnodeT\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccO\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03a1\n | |
|
290 | s> \r\n | |
|
291 | received frame(size=102; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
|
292 | s> 8\r\n | |
|
293 | s> \x00\x00\x00\x01\x00\x02\x002 | |
|
294 | s> \r\n | |
|
295 | s> 0\r\n | |
|
296 | s> \r\n | |
|
297 | received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
|
298 | response: gen[ | |
|
299 | { | |
|
300 | b'totalitems': 1 | |
|
301 | }, | |
|
302 | { | |
|
303 | b'deltabasenode': b'+N\xb0s\x19\xbf\xa0w\xa4\n/\x04\x916Y\xae\xf0\xdaB\xda', | |
|
304 | b'deltasize': 15, | |
|
305 | b'node': b'\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xcc' | |
|
306 | }, | |
|
307 | b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03a1\n' | |
|
308 | ] | |
|
309 | ||
|
310 | Requesting multiple revisions works | |
|
311 | (first revision should be fulltext, subsequents are deltas) | |
|
312 | ||
|
313 | $ sendhttpv2peer << EOF | |
|
314 | > command filedata | |
|
315 | > nodes eval:['\x2b\x4e\xb0\x73\x19\xbf\xa0\x77\xa4\x0a\x2f\x04\x91\x36\x59\xae\xf0\xda\x42\xda', '\x9a\x38\x12\x29\x97\xb3\xac\x97\xbe\x2a\x9a\xa2\xe5\x56\x83\x83\x41\xfd\xf2\xcc'] | |
|
316 | > path eval:b'a' | |
|
317 | > fields eval:[b'revision'] | |
|
318 | > EOF | |
|
319 | creating http peer for wire protocol version 2 | |
|
320 | sending filedata command | |
|
321 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
322 | s> Accept-Encoding: identity\r\n | |
|
323 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
324 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
325 | s> content-length: 102\r\n | |
|
326 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
327 | s> user-agent: Mercurial debugwireproto\r\n | |
|
328 | s> \r\n | |
|
329 | s> ^\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa3Ffields\x81HrevisionEnodes\x82T+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
330 | s> /\x04\x916Y\xae\xf0\xdaB\xdaT\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccDpathAaDnameHfiledata | |
|
331 | s> makefile('rb', None) | |
|
332 | s> HTTP/1.1 200 OK\r\n | |
|
333 | s> Server: testing stub value\r\n | |
|
334 | s> Date: $HTTP_DATE$\r\n | |
|
335 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
336 | s> Transfer-Encoding: chunked\r\n | |
|
337 | s> \r\n | |
|
338 | s> 13\r\n | |
|
339 | s> \x0b\x00\x00\x01\x00\x02\x011 | |
|
340 | s> \xa1FstatusBok | |
|
341 | s> \r\n | |
|
342 | received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
|
343 | s> 9b\r\n | |
|
344 | s> \x93\x00\x00\x01\x00\x02\x001 | |
|
345 | s> \xa1Jtotalitems\x02\xa2DnodeT+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
346 | s> /\x04\x916Y\xae\xf0\xdaB\xdaLrevisionsize\x03Ca0\n | |
|
347 | s> \xa3MdeltabasenodeT+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
348 | s> /\x04\x916Y\xae\xf0\xdaB\xdaIdeltasize\x0fDnodeT\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccO\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03a1\n | |
|
349 | s> \r\n | |
|
350 | received frame(size=147; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
|
351 | s> 8\r\n | |
|
352 | s> \x00\x00\x00\x01\x00\x02\x002 | |
|
353 | s> \r\n | |
|
354 | s> 0\r\n | |
|
355 | s> \r\n | |
|
356 | received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
|
357 | response: gen[ | |
|
358 | { | |
|
359 | b'totalitems': 2 | |
|
360 | }, | |
|
361 | { | |
|
362 | b'node': b'+N\xb0s\x19\xbf\xa0w\xa4\n/\x04\x916Y\xae\xf0\xdaB\xda', | |
|
363 | b'revisionsize': 3 | |
|
364 | }, | |
|
365 | b'a0\n', | |
|
366 | { | |
|
367 | b'deltabasenode': b'+N\xb0s\x19\xbf\xa0w\xa4\n/\x04\x916Y\xae\xf0\xdaB\xda', | |
|
368 | b'deltasize': 15, | |
|
369 | b'node': b'\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xcc' | |
|
370 | }, | |
|
371 | b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03a1\n' | |
|
372 | ] | |
|
373 | ||
|
374 | Revisions are sorted by DAG order, parents first | |
|
375 | ||
|
376 | $ sendhttpv2peer << EOF | |
|
377 | > command filedata | |
|
378 | > nodes eval:['\x9a\x38\x12\x29\x97\xb3\xac\x97\xbe\x2a\x9a\xa2\xe5\x56\x83\x83\x41\xfd\xf2\xcc', '\x2b\x4e\xb0\x73\x19\xbf\xa0\x77\xa4\x0a\x2f\x04\x91\x36\x59\xae\xf0\xda\x42\xda'] | |
|
379 | > path eval:b'a' | |
|
380 | > fields eval:[b'revision'] | |
|
381 | > EOF | |
|
382 | creating http peer for wire protocol version 2 | |
|
383 | sending filedata command | |
|
384 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
385 | s> Accept-Encoding: identity\r\n | |
|
386 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
387 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
388 | s> content-length: 102\r\n | |
|
389 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
390 | s> user-agent: Mercurial debugwireproto\r\n | |
|
391 | s> \r\n | |
|
392 | s> ^\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa3Ffields\x81HrevisionEnodes\x82T\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccT+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
393 | s> /\x04\x916Y\xae\xf0\xdaB\xdaDpathAaDnameHfiledata | |
|
394 | s> makefile('rb', None) | |
|
395 | s> HTTP/1.1 200 OK\r\n | |
|
396 | s> Server: testing stub value\r\n | |
|
397 | s> Date: $HTTP_DATE$\r\n | |
|
398 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
399 | s> Transfer-Encoding: chunked\r\n | |
|
400 | s> \r\n | |
|
401 | s> 13\r\n | |
|
402 | s> \x0b\x00\x00\x01\x00\x02\x011 | |
|
403 | s> \xa1FstatusBok | |
|
404 | s> \r\n | |
|
405 | received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
|
406 | s> 9b\r\n | |
|
407 | s> \x93\x00\x00\x01\x00\x02\x001 | |
|
408 | s> \xa1Jtotalitems\x02\xa2DnodeT+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
409 | s> /\x04\x916Y\xae\xf0\xdaB\xdaLrevisionsize\x03Ca0\n | |
|
410 | s> \xa3MdeltabasenodeT+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
411 | s> /\x04\x916Y\xae\xf0\xdaB\xdaIdeltasize\x0fDnodeT\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xccO\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03a1\n | |
|
412 | s> \r\n | |
|
413 | received frame(size=147; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
|
414 | s> 8\r\n | |
|
415 | s> \x00\x00\x00\x01\x00\x02\x002 | |
|
416 | s> \r\n | |
|
417 | s> 0\r\n | |
|
418 | s> \r\n | |
|
419 | received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
|
420 | response: gen[ | |
|
421 | { | |
|
422 | b'totalitems': 2 | |
|
423 | }, | |
|
424 | { | |
|
425 | b'node': b'+N\xb0s\x19\xbf\xa0w\xa4\n/\x04\x916Y\xae\xf0\xdaB\xda', | |
|
426 | b'revisionsize': 3 | |
|
427 | }, | |
|
428 | b'a0\n', | |
|
429 | { | |
|
430 | b'deltabasenode': b'+N\xb0s\x19\xbf\xa0w\xa4\n/\x04\x916Y\xae\xf0\xdaB\xda', | |
|
431 | b'deltasize': 15, | |
|
432 | b'node': b'\x9a8\x12)\x97\xb3\xac\x97\xbe*\x9a\xa2\xe5V\x83\x83A\xfd\xf2\xcc' | |
|
433 | }, | |
|
434 | b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03a1\n' | |
|
435 | ] | |
|
436 | ||
|
437 | Requesting parents and revision data works | |
|
438 | ||
|
439 | $ sendhttpv2peer << EOF | |
|
440 | > command filedata | |
|
441 | > nodes eval:['\x08\x79\x34\x5e\x39\x37\x72\x29\x63\x4b\x42\x0c\x63\x94\x54\x15\x67\x26\xc6\xb6'] | |
|
442 | > path eval:b'a' | |
|
443 | > fields eval:[b'parents', b'revision'] | |
|
444 | > EOF | |
|
445 | creating http peer for wire protocol version 2 | |
|
446 | sending filedata command | |
|
447 | s> POST /api/exp-http-v2-0001/ro/filedata HTTP/1.1\r\n | |
|
448 | s> Accept-Encoding: identity\r\n | |
|
449 | s> accept: application/mercurial-exp-framing-0005\r\n | |
|
450 | s> content-type: application/mercurial-exp-framing-0005\r\n | |
|
451 | s> content-length: 89\r\n | |
|
452 | s> host: $LOCALIP:$HGPORT\r\n (glob) | |
|
453 | s> user-agent: Mercurial debugwireproto\r\n | |
|
454 | s> \r\n | |
|
455 | s> Q\x00\x00\x01\x00\x01\x01\x11\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81T\x08y4^97r)cKB\x0cc\x94T\x15g&\xc6\xb6DpathAaDnameHfiledata | |
|
456 | s> makefile('rb', None) | |
|
457 | s> HTTP/1.1 200 OK\r\n | |
|
458 | s> Server: testing stub value\r\n | |
|
459 | s> Date: $HTTP_DATE$\r\n | |
|
460 | s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
|
461 | s> Transfer-Encoding: chunked\r\n | |
|
462 | s> \r\n | |
|
463 | s> 13\r\n | |
|
464 | s> \x0b\x00\x00\x01\x00\x02\x011 | |
|
465 | s> \xa1FstatusBok | |
|
466 | s> \r\n | |
|
467 | received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
|
468 | s> a1\r\n | |
|
469 | s> \x99\x00\x00\x01\x00\x02\x001 | |
|
470 | s> \xa1Jtotalitems\x01\xa4MdeltabasenodeT+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
471 | s> /\x04\x916Y\xae\xf0\xdaB\xdaIdeltasize\x0fDnodeT\x08y4^97r)cKB\x0cc\x94T\x15g&\xc6\xb6Gparents\x82T+N\xb0s\x19\xbf\xa0w\xa4\n | |
|
472 | s> /\x04\x916Y\xae\xf0\xdaB\xdaT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03a2\n | |
|
473 | s> \r\n | |
|
474 | received frame(size=153; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
|
475 | s> 8\r\n | |
|
476 | s> \x00\x00\x00\x01\x00\x02\x002 | |
|
477 | s> \r\n | |
|
478 | s> 0\r\n | |
|
479 | s> \r\n | |
|
480 | received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
|
481 | response: gen[ | |
|
482 | { | |
|
483 | b'totalitems': 1 | |
|
484 | }, | |
|
485 | { | |
|
486 | b'deltabasenode': b'+N\xb0s\x19\xbf\xa0w\xa4\n/\x04\x916Y\xae\xf0\xdaB\xda', | |
|
487 | b'deltasize': 15, | |
|
488 | b'node': b'\x08y4^97r)cKB\x0cc\x94T\x15g&\xc6\xb6', | |
|
489 | b'parents': [ | |
|
490 | b'+N\xb0s\x19\xbf\xa0w\xa4\n/\x04\x916Y\xae\xf0\xdaB\xda', | |
|
491 | b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' | |
|
492 | ] | |
|
493 | }, | |
|
494 | b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03a2\n' | |
|
495 | ] | |
|
496 | ||
|
497 | $ cat error.log |
@@ -196,6 +196,79 b' TODO support depth limiting' | |||
|
196 | 196 | TODO support hgtagsfnodes cache / tags data |
|
197 | 197 | TODO support branch heads cache |
|
198 | 198 | |
|
199 | filedata | |
|
200 | -------- | |
|
201 | ||
|
202 | Obtain various data related to an individual tracked file. | |
|
203 | ||
|
204 | The command accepts the following arguments: | |
|
205 | ||
|
206 | fields | |
|
207 | (set of bytestring) Which data associated with a file to fetch. | |
|
208 | The following values are recognized: | |
|
209 | ||
|
210 | parents | |
|
211 | Parent nodes for the revision. | |
|
212 | ||
|
213 | revision | |
|
214 | The raw revision data for a file. | |
|
215 | ||
|
216 | nodes | |
|
217 | (array of bytestrings) File nodes whose data to retrieve. | |
|
218 | ||
|
219 | path | |
|
220 | (bytestring) Path of the tracked file whose data to retrieve. | |
|
221 | ||
|
222 | TODO allow specifying revisions via alternate means (such as from | |
|
223 | changeset revisions or ranges) | |
|
224 | ||
|
225 | The response bytestream starts with a CBOR map describing the data that | |
|
226 | follows. It has the following bytestream keys: | |
|
227 | ||
|
228 | totalitems | |
|
229 | (unsigned integer) Total number of file revisions whose data is | |
|
230 | being returned. | |
|
231 | ||
|
232 | Following the header map is a series of 0 or more CBOR values. The first | |
|
233 | value is always a map describing a file revision. If this map has the | |
|
234 | ``deltasize`` or ``revisionsize`` keys, a bytestring containing the delta | |
|
235 | or revision, respectively, will immediately follow the map. Otherwise | |
|
236 | the next value will be a map describing the next file revision. | |
|
237 | ||
|
238 | Each map has the following bytestring keys: | |
|
239 | ||
|
240 | node | |
|
241 | (bytestring) The node of the file revision whose data is represented. | |
|
242 | ||
|
243 | deltabasenode | |
|
244 | (bytestring) Node of the file revision the following delta is against. | |
|
245 | ||
|
246 | Only present if the ``revision`` field is requested and delta data | |
|
247 | follows this map. | |
|
248 | ||
|
249 | deltasize | |
|
250 | (unsigned integer) The size of the delta data that follows this map. | |
|
251 | ||
|
252 | Only present if the ``revision`` field is requested and delta data | |
|
253 | follows this map. | |
|
254 | ||
|
255 | parents | |
|
256 | (array of bytestring) The nodes of the parents of this file revision. | |
|
257 | ||
|
258 | Only present if the ``parents`` field is requested. | |
|
259 | ||
|
260 | revisionsize | |
|
261 | (unsigned integer) The size of the fulltext revision data that follows | |
|
262 | this map. | |
|
263 | ||
|
264 | Only present if the ``revision`` field is requested and fulltext revision | |
|
265 | data follows this map. | |
|
266 | ||
|
267 | When ``revision`` data is requested, the server chooses to emit either fulltext | |
|
268 | revision data or a delta. What the server decides can be inferred by looking | |
|
269 | for the presence of the ``deltasize`` or ``revisionsize`` keys in the map. | |
|
270 | Servers MUST NOT define both keys. | |
|
271 | ||
|
199 | 272 | heads |
|
200 | 273 | ----- |
|
201 | 274 |
@@ -10,6 +10,7 b' import contextlib' | |||
|
10 | 10 | |
|
11 | 11 | from .i18n import _ |
|
12 | 12 | from .node import ( |
|
13 | hex, | |
|
13 | 14 | nullid, |
|
14 | 15 | nullrev, |
|
15 | 16 | ) |
@@ -648,6 +649,112 b' def changesetdata(repo, proto, noderange' | |||
|
648 | 649 | b'bookmarks': sorted(marks), |
|
649 | 650 | } |
|
650 | 651 | |
|
652 | class FileAccessError(Exception): | |
|
653 | """Represents an error accessing a specific file.""" | |
|
654 | ||
|
655 | def __init__(self, path, msg, args): | |
|
656 | self.path = path | |
|
657 | self.msg = msg | |
|
658 | self.args = args | |
|
659 | ||
|
660 | def getfilestore(repo, proto, path): | |
|
661 | """Obtain a file storage object for use with wire protocol. | |
|
662 | ||
|
663 | Exists as a standalone function so extensions can monkeypatch to add | |
|
664 | access control. | |
|
665 | """ | |
|
666 | # This seems to work even if the file doesn't exist. So catch | |
|
667 | # "empty" files and return an error. | |
|
668 | fl = repo.file(path) | |
|
669 | ||
|
670 | if not len(fl): | |
|
671 | raise FileAccessError(path, 'unknown file: %s', (path,)) | |
|
672 | ||
|
673 | return fl | |
|
674 | ||
|
675 | @wireprotocommand('filedata', | |
|
676 | args={ | |
|
677 | 'nodes': [b'0123456...'], | |
|
678 | 'fields': [b'parents', b'revision'], | |
|
679 | 'path': b'foo.txt', | |
|
680 | }, | |
|
681 | permission='pull') | |
|
682 | def filedata(repo, proto, nodes=None, fields=None, path=None): | |
|
683 | fields = fields or set() | |
|
684 | ||
|
685 | if nodes is None: | |
|
686 | raise error.WireprotoCommandError('nodes argument must be defined') | |
|
687 | ||
|
688 | if path is None: | |
|
689 | raise error.WireprotoCommandError('path argument must be defined') | |
|
690 | ||
|
691 | try: | |
|
692 | # Extensions may wish to access the protocol handler. | |
|
693 | store = getfilestore(repo, proto, path) | |
|
694 | except FileAccessError as e: | |
|
695 | raise error.WireprotoCommandError(e.msg, e.args) | |
|
696 | ||
|
697 | # Validate requested nodes. | |
|
698 | for node in nodes: | |
|
699 | try: | |
|
700 | store.rev(node) | |
|
701 | except error.LookupError: | |
|
702 | raise error.WireprotoCommandError('unknown file node: %s', | |
|
703 | (hex(node),)) | |
|
704 | ||
|
705 | revs, requests = builddeltarequests(store, nodes) | |
|
706 | ||
|
707 | yield { | |
|
708 | b'totalitems': len(revs), | |
|
709 | } | |
|
710 | ||
|
711 | if b'revision' in fields: | |
|
712 | deltas = store.emitrevisiondeltas(requests) | |
|
713 | else: | |
|
714 | deltas = None | |
|
715 | ||
|
716 | for rev in revs: | |
|
717 | node = store.node(rev) | |
|
718 | ||
|
719 | if deltas is not None: | |
|
720 | delta = next(deltas) | |
|
721 | else: | |
|
722 | delta = None | |
|
723 | ||
|
724 | d = { | |
|
725 | b'node': node, | |
|
726 | } | |
|
727 | ||
|
728 | if b'parents' in fields: | |
|
729 | d[b'parents'] = store.parents(node) | |
|
730 | ||
|
731 | if b'revision' in fields: | |
|
732 | assert delta is not None | |
|
733 | assert delta.flags == 0 | |
|
734 | assert d[b'node'] == delta.node | |
|
735 | ||
|
736 | if delta.revision is not None: | |
|
737 | revisiondata = delta.revision | |
|
738 | d[b'revisionsize'] = len(revisiondata) | |
|
739 | else: | |
|
740 | d[b'deltabasenode'] = delta.basenode | |
|
741 | revisiondata = delta.delta | |
|
742 | d[b'deltasize'] = len(revisiondata) | |
|
743 | else: | |
|
744 | revisiondata = None | |
|
745 | ||
|
746 | yield d | |
|
747 | ||
|
748 | if revisiondata is not None: | |
|
749 | yield revisiondata | |
|
750 | ||
|
751 | if deltas is not None: | |
|
752 | try: | |
|
753 | next(deltas) | |
|
754 | raise error.ProgrammingError('should not have more deltas') | |
|
755 | except GeneratorExit: | |
|
756 | pass | |
|
757 | ||
|
651 | 758 | @wireprotocommand('heads', |
|
652 | 759 | args={ |
|
653 | 760 | 'publiconly': False, |
@@ -313,7 +313,7 b' Client with HTTPv2 enabled automatically' | |||
|
313 | 313 | s> Content-Type: application/mercurial-cbor\r\n |
|
314 | 314 | s> Content-Length: *\r\n (glob) |
|
315 | 315 | s> \r\n |
|
316 |
s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xa |
|
|
316 | s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullHfiledata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...DpathGfoo.txtKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xc5batch branchmap $USUAL_BUNDLE2_CAPS_SERVER$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash | |
|
317 | 317 | sending heads command |
|
318 | 318 | s> POST /api/exp-http-v2-0001/ro/heads HTTP/1.1\r\n |
|
319 | 319 | s> Accept-Encoding: identity\r\n |
@@ -212,7 +212,7 b' Request for HTTPv2 service returns infor' | |||
|
212 | 212 | s> Content-Type: application/mercurial-cbor\r\n |
|
213 | 213 | s> Content-Length: *\r\n (glob) |
|
214 | 214 | s> \r\n |
|
215 |
s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xa |
|
|
215 | s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullHfiledata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...DpathGfoo.txtKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xc5batch branchmap $USUAL_BUNDLE2_CAPS_SERVER$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash | |
|
216 | 216 | cbor> { |
|
217 | 217 | b'apibase': b'api/', |
|
218 | 218 | b'apis': { |
@@ -252,6 +252,21 b' Request for HTTPv2 service returns infor' | |||
|
252 | 252 | b'pull' |
|
253 | 253 | ] |
|
254 | 254 | }, |
|
255 | b'filedata': { | |
|
256 | b'args': { | |
|
257 | b'fields': [ | |
|
258 | b'parents', | |
|
259 | b'revision' | |
|
260 | ], | |
|
261 | b'nodes': [ | |
|
262 | b'0123456...' | |
|
263 | ], | |
|
264 | b'path': b'foo.txt' | |
|
265 | }, | |
|
266 | b'permissions': [ | |
|
267 | b'pull' | |
|
268 | ] | |
|
269 | }, | |
|
255 | 270 | b'heads': { |
|
256 | 271 | b'args': { |
|
257 | 272 | b'publiconly': False |
@@ -352,7 +367,7 b' capabilities command returns expected in' | |||
|
352 | 367 | s> Content-Type: application/mercurial-cbor\r\n |
|
353 | 368 | s> Content-Length: *\r\n (glob) |
|
354 | 369 | s> \r\n |
|
355 |
s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xa |
|
|
370 | s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0001\xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullHfiledata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...DpathGfoo.txtKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xc5batch branchmap $USUAL_BUNDLE2_CAPS_SERVER$ changegroupsubset compression=$BUNDLE2_COMPRESSIONS$ getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash | |
|
356 | 371 | sending capabilities command |
|
357 | 372 | s> POST /api/exp-http-v2-0001/ro/capabilities HTTP/1.1\r\n |
|
358 | 373 | s> Accept-Encoding: identity\r\n |
@@ -375,11 +390,11 b' capabilities command returns expected in' | |||
|
375 | 390 | s> \xa1FstatusBok |
|
376 | 391 | s> \r\n |
|
377 | 392 | received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) |
|
378 |
s> 2 |
|
|
379 |
s> \x |
|
|
380 |
s> \xa4Hcommands\xa |
|
|
393 | s> 2f4\r\n | |
|
394 | s> \xec\x02\x00\x01\x00\x02\x001 | |
|
395 | s> \xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa3Ffields\xd9\x01\x02\x82GparentsHrevisionInoderange\x82\x81J0123456...\x81Iabcdef...Enodes\x81J0123456...Kpermissions\x81DpullHfiledata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...DpathGfoo.txtKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xf4Kpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\x81HdeadbeefKpermissions\x81DpullHlistkeys\xa2Dargs\xa1InamespaceBnsKpermissions\x81DpullFlookup\xa2Dargs\xa1CkeyCfooKpermissions\x81DpullLmanifestdata\xa2Dargs\xa3Ffields\x82GparentsHrevisionEnodes\x81J0123456...Dtree@Kpermissions\x81DpullGpushkey\xa2Dargs\xa4CkeyCkeyInamespaceBnsCnewCnewColdColdKpermissions\x81DpushKcompression\x81\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Nrawrepoformats\x82LgeneraldeltaHrevlogv1 | |
|
381 | 396 | s> \r\n |
|
382 |
received frame(size= |
|
|
397 | received frame(size=748; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
|
383 | 398 | s> 8\r\n |
|
384 | 399 | s> \x00\x00\x00\x01\x00\x02\x002 |
|
385 | 400 | s> \r\n |
@@ -423,6 +438,21 b' capabilities command returns expected in' | |||
|
423 | 438 | b'pull' |
|
424 | 439 | ] |
|
425 | 440 | }, |
|
441 | b'filedata': { | |
|
442 | b'args': { | |
|
443 | b'fields': [ | |
|
444 | b'parents', | |
|
445 | b'revision' | |
|
446 | ], | |
|
447 | b'nodes': [ | |
|
448 | b'0123456...' | |
|
449 | ], | |
|
450 | b'path': b'foo.txt' | |
|
451 | }, | |
|
452 | b'permissions': [ | |
|
453 | b'pull' | |
|
454 | ] | |
|
455 | }, | |
|
426 | 456 | b'heads': { |
|
427 | 457 | b'args': { |
|
428 | 458 | b'publiconly': False |
General Comments 0
You need to be logged in to leave comments.
Login now