##// END OF EJS Templates
wireprotov2: define and implement "filesdata" command...
Gregory Szorc -
r40214:46a40bce default
parent child Browse files
Show More
This diff has been collapsed as it changes many lines, (1058 lines changed) Show them Hide them
@@ -0,0 +1,1058 b''
1 $ . $TESTDIR/wireprotohelpers.sh
2
3 $ hg init server
4 $ enablehttpv2 server
5 $ cd server
6 $ cat > a << EOF
7 > a0
8 > 00000000000000000000000000000000000000
9 > 11111111111111111111111111111111111111
10 > EOF
11 $ cat > b << EOF
12 > b0
13 > aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14 > bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
15 > EOF
16 $ mkdir -p dir0/child0 dir0/child1 dir1
17 $ echo c0 > dir0/c
18 $ echo d0 > dir0/d
19 $ echo e0 > dir0/child0/e
20 $ echo f0 > dir0/child1/f
21 $ hg -q commit -A -m 'commit 0'
22
23 $ echo a1 >> a
24 $ echo d1 > dir0/d
25 $ echo g0 > g
26 $ echo h0 > h
27 $ hg -q commit -A -m 'commit 1'
28 $ echo f1 > dir0/child1/f
29 $ echo i0 > dir0/i
30 $ hg -q commit -A -m 'commit 2'
31
32 $ hg -q up -r 0
33 $ echo a2 >> a
34 $ hg commit -m 'commit 3'
35 created new head
36
37 $ hg log -G -T '{rev}:{node} {desc}\n'
38 @ 3:476fbf122cd82f6726f0191ff146f67140946abc commit 3
39 |
40 | o 2:b91c03cbba3519ab149b6cd0a0afbdb5cf1b5c8a commit 2
41 | |
42 | o 1:5b0b1a23577e205ea240e39c9704e28d7697cbd8 commit 1
43 |/
44 o 0:6e875ff18c227659ad6143bb3580c65700734884 commit 0
45
46
47 $ hg serve -p $HGPORT -d --pid-file hg.pid -E error.log
48 $ cat hg.pid > $DAEMON_PIDS
49
50 Missing arguments is an error
51
52 $ sendhttpv2peer << EOF
53 > command filesdata
54 > EOF
55 creating http peer for wire protocol version 2
56 sending filesdata command
57 abort: missing required arguments: revisions!
58 [255]
59
60 Bad pattern to pathfilter is rejected
61
62 $ sendhttpv2peer << EOF
63 > command filesdata
64 > revisions eval:[{
65 > b'type': b'changesetexplicit',
66 > b'nodes': [
67 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
68 > ]}]
69 > pathfilter eval:{b'include': [b'bad:foo']}
70 > EOF
71 creating http peer for wire protocol version 2
72 sending filesdata command
73 abort: include pattern must begin with `path:` or `rootfilesin:`; got bad:foo!
74 [255]
75
76 $ sendhttpv2peer << EOF
77 > command filesdata
78 > revisions eval:[{
79 > b'type': b'changesetexplicit',
80 > b'nodes': [
81 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
82 > ]}]
83 > pathfilter eval:{b'exclude': [b'glob:foo']}
84 > EOF
85 creating http peer for wire protocol version 2
86 sending filesdata command
87 abort: exclude pattern must begin with `path:` or `rootfilesin:`; got glob:foo!
88 [255]
89
90 Fetching a single changeset without parents fetches all files
91
92 $ sendhttpv2peer << EOF
93 > command filesdata
94 > revisions eval:[{
95 > b'type': b'changesetexplicit',
96 > b'nodes': [
97 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
98 > ]}]
99 > EOF
100 creating http peer for wire protocol version 2
101 sending filesdata command
102 response: gen[
103 {
104 b'totalitems': 8,
105 b'totalpaths': 8
106 },
107 {
108 b'path': b'a',
109 b'totalitems': 1
110 },
111 {
112 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
113 },
114 {
115 b'path': b'b',
116 b'totalitems': 1
117 },
118 {
119 b'node': b'\x88\xbac\xb8\xd8\xc6 :\xc6z\xc9\x98\xac\xd9\x17K\xf7\x05!\xb2'
120 },
121 {
122 b'path': b'dir0/c',
123 b'totalitems': 1
124 },
125 {
126 b'node': b'\x91DE4j\x0c\xa0b\x9b\xd4|\xeb]\xfe\x07\xe4\xd4\xcf%\x01'
127 },
128 {
129 b'path': b'dir0/child0/e',
130 b'totalitems': 1
131 },
132 {
133 b'node': b'\xbb\xbal\x06\xb3\x0fD=4\xff\x84\x1b\xc9\x85\xc4\xd0\x82|k\xe4'
134 },
135 {
136 b'path': b'dir0/child1/f',
137 b'totalitems': 1
138 },
139 {
140 b'node': b'\x12\xfc}\xcdw;Z\n\x92\x9c\xe1\x95"\x80\x83\xc6\xdd\xc9\xce\xc4'
141 },
142 {
143 b'path': b'dir0/d',
144 b'totalitems': 1
145 },
146 {
147 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
148 },
149 {
150 b'path': b'g',
151 b'totalitems': 1
152 },
153 {
154 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c'
155 },
156 {
157 b'path': b'h',
158 b'totalitems': 1
159 },
160 {
161 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
162 }
163 ]
164
165 Fetching a single changeset saying parents data is available fetches just new files
166
167 $ sendhttpv2peer << EOF
168 > command filesdata
169 > revisions eval:[{
170 > b'type': b'changesetexplicit',
171 > b'nodes': [
172 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
173 > ]}]
174 > haveparents eval:True
175 > EOF
176 creating http peer for wire protocol version 2
177 sending filesdata command
178 response: gen[
179 {
180 b'totalitems': 4,
181 b'totalpaths': 4
182 },
183 {
184 b'path': b'a',
185 b'totalitems': 1
186 },
187 {
188 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
189 },
190 {
191 b'path': b'dir0/d',
192 b'totalitems': 1
193 },
194 {
195 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
196 },
197 {
198 b'path': b'g',
199 b'totalitems': 1
200 },
201 {
202 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c'
203 },
204 {
205 b'path': b'h',
206 b'totalitems': 1
207 },
208 {
209 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
210 }
211 ]
212
213 A path filter for a sub-directory is honored
214
215 $ sendhttpv2peer << EOF
216 > command filesdata
217 > revisions eval:[{
218 > b'type': b'changesetexplicit',
219 > b'nodes': [
220 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
221 > ]}]
222 > haveparents eval:True
223 > pathfilter eval:{b'include': [b'path:dir0']}
224 > EOF
225 creating http peer for wire protocol version 2
226 sending filesdata command
227 response: gen[
228 {
229 b'totalitems': 1,
230 b'totalpaths': 1
231 },
232 {
233 b'path': b'dir0/d',
234 b'totalitems': 1
235 },
236 {
237 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
238 }
239 ]
240
241 $ sendhttpv2peer << EOF
242 > command filesdata
243 > revisions eval:[{
244 > b'type': b'changesetexplicit',
245 > b'nodes': [
246 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
247 > ]}]
248 > haveparents eval:True
249 > pathfilter eval:{b'exclude': [b'path:a', b'path:g']}
250 > EOF
251 creating http peer for wire protocol version 2
252 sending filesdata command
253 response: gen[
254 {
255 b'totalitems': 2,
256 b'totalpaths': 2
257 },
258 {
259 b'path': b'dir0/d',
260 b'totalitems': 1
261 },
262 {
263 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
264 },
265 {
266 b'path': b'h',
267 b'totalitems': 1
268 },
269 {
270 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
271 }
272 ]
273
274 Requesting multiple changeset nodes without haveparents sends all data for both
275
276 $ sendhttpv2peer << EOF
277 > command filesdata
278 > revisions eval:[{
279 > b'type': b'changesetexplicit',
280 > b'nodes': [
281 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
282 > b'\xb9\x1c\x03\xcb\xba\x35\x19\xab\x14\x9b\x6c\xd0\xa0\xaf\xbd\xb5\xcf\x1b\x5c\x8a',
283 > ]}]
284 > EOF
285 creating http peer for wire protocol version 2
286 sending filesdata command
287 response: gen[
288 {
289 b'totalitems': 10,
290 b'totalpaths': 9
291 },
292 {
293 b'path': b'a',
294 b'totalitems': 1
295 },
296 {
297 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
298 },
299 {
300 b'path': b'b',
301 b'totalitems': 1
302 },
303 {
304 b'node': b'\x88\xbac\xb8\xd8\xc6 :\xc6z\xc9\x98\xac\xd9\x17K\xf7\x05!\xb2'
305 },
306 {
307 b'path': b'dir0/c',
308 b'totalitems': 1
309 },
310 {
311 b'node': b'\x91DE4j\x0c\xa0b\x9b\xd4|\xeb]\xfe\x07\xe4\xd4\xcf%\x01'
312 },
313 {
314 b'path': b'dir0/child0/e',
315 b'totalitems': 1
316 },
317 {
318 b'node': b'\xbb\xbal\x06\xb3\x0fD=4\xff\x84\x1b\xc9\x85\xc4\xd0\x82|k\xe4'
319 },
320 {
321 b'path': b'dir0/child1/f',
322 b'totalitems': 2
323 },
324 {
325 b'node': b'\x12\xfc}\xcdw;Z\n\x92\x9c\xe1\x95"\x80\x83\xc6\xdd\xc9\xce\xc4'
326 },
327 {
328 b'node': b'(\xc7v\xae\x08\xd0\xd5^\xb4\x06H\xb4\x01\xb9\x0f\xf5DH4\x8e'
329 },
330 {
331 b'path': b'dir0/d',
332 b'totalitems': 1
333 },
334 {
335 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
336 },
337 {
338 b'path': b'dir0/i',
339 b'totalitems': 1
340 },
341 {
342 b'node': b'\xd7t\xb5\x80Jq\xfd1\xe1\xae\x05\xea\x8e2\xdd\x9b\xa3\xd8S\xd7'
343 },
344 {
345 b'path': b'g',
346 b'totalitems': 1
347 },
348 {
349 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c'
350 },
351 {
352 b'path': b'h',
353 b'totalitems': 1
354 },
355 {
356 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
357 }
358 ]
359
360 Requesting multiple changeset nodes with haveparents sends incremental data for both
361
362 $ sendhttpv2peer << EOF
363 > command filesdata
364 > revisions eval:[{
365 > b'type': b'changesetexplicit',
366 > b'nodes': [
367 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
368 > b'\xb9\x1c\x03\xcb\xba\x35\x19\xab\x14\x9b\x6c\xd0\xa0\xaf\xbd\xb5\xcf\x1b\x5c\x8a',
369 > ]}]
370 > haveparents eval:True
371 > EOF
372 creating http peer for wire protocol version 2
373 sending filesdata command
374 response: gen[
375 {
376 b'totalitems': 6,
377 b'totalpaths': 6
378 },
379 {
380 b'path': b'a',
381 b'totalitems': 1
382 },
383 {
384 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
385 },
386 {
387 b'path': b'dir0/child1/f',
388 b'totalitems': 1
389 },
390 {
391 b'node': b'(\xc7v\xae\x08\xd0\xd5^\xb4\x06H\xb4\x01\xb9\x0f\xf5DH4\x8e'
392 },
393 {
394 b'path': b'dir0/d',
395 b'totalitems': 1
396 },
397 {
398 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
399 },
400 {
401 b'path': b'dir0/i',
402 b'totalitems': 1
403 },
404 {
405 b'node': b'\xd7t\xb5\x80Jq\xfd1\xe1\xae\x05\xea\x8e2\xdd\x9b\xa3\xd8S\xd7'
406 },
407 {
408 b'path': b'g',
409 b'totalitems': 1
410 },
411 {
412 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c'
413 },
414 {
415 b'path': b'h',
416 b'totalitems': 1
417 },
418 {
419 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
420 }
421 ]
422
423 Requesting parents works
424
425 $ sendhttpv2peer << EOF
426 > command filesdata
427 > revisions eval:[{
428 > b'type': b'changesetexplicit',
429 > b'nodes': [
430 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
431 > ]}]
432 > fields eval:[b'parents']
433 > EOF
434 creating http peer for wire protocol version 2
435 sending filesdata command
436 response: gen[
437 {
438 b'totalitems': 8,
439 b'totalpaths': 8
440 },
441 {
442 b'path': b'a',
443 b'totalitems': 1
444 },
445 {
446 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11',
447 b'parents': [
448 b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9',
449 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
450 ]
451 },
452 {
453 b'path': b'b',
454 b'totalitems': 1
455 },
456 {
457 b'node': b'\x88\xbac\xb8\xd8\xc6 :\xc6z\xc9\x98\xac\xd9\x17K\xf7\x05!\xb2',
458 b'parents': [
459 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
460 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
461 ]
462 },
463 {
464 b'path': b'dir0/c',
465 b'totalitems': 1
466 },
467 {
468 b'node': b'\x91DE4j\x0c\xa0b\x9b\xd4|\xeb]\xfe\x07\xe4\xd4\xcf%\x01',
469 b'parents': [
470 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
471 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
472 ]
473 },
474 {
475 b'path': b'dir0/child0/e',
476 b'totalitems': 1
477 },
478 {
479 b'node': b'\xbb\xbal\x06\xb3\x0fD=4\xff\x84\x1b\xc9\x85\xc4\xd0\x82|k\xe4',
480 b'parents': [
481 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
482 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
483 ]
484 },
485 {
486 b'path': b'dir0/child1/f',
487 b'totalitems': 1
488 },
489 {
490 b'node': b'\x12\xfc}\xcdw;Z\n\x92\x9c\xe1\x95"\x80\x83\xc6\xdd\xc9\xce\xc4',
491 b'parents': [
492 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
493 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
494 ]
495 },
496 {
497 b'path': b'dir0/d',
498 b'totalitems': 1
499 },
500 {
501 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G',
502 b'parents': [
503 b'S\x82\x06\xdc\x97\x1eR\x15@\xd6\x84:\xbf\xe6\xd1`2\xf6\xd4&',
504 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
505 ]
506 },
507 {
508 b'path': b'g',
509 b'totalitems': 1
510 },
511 {
512 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c',
513 b'parents': [
514 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
515 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
516 ]
517 },
518 {
519 b'path': b'h',
520 b'totalitems': 1
521 },
522 {
523 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K',
524 b'parents': [
525 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
526 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
527 ]
528 }
529 ]
530
531 Requesting revision data works
532 (haveparents defaults to False, so fulltext is emitted)
533
534 $ sendhttpv2peer << EOF
535 > command filesdata
536 > revisions eval:[{
537 > b'type': b'changesetexplicit',
538 > b'nodes': [
539 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
540 > ]}]
541 > fields eval:[b'revision']
542 > EOF
543 creating http peer for wire protocol version 2
544 sending filesdata command
545 response: gen[
546 {
547 b'totalitems': 8,
548 b'totalpaths': 8
549 },
550 {
551 b'path': b'a',
552 b'totalitems': 1
553 },
554 {
555 b'fieldsfollowing': [
556 [
557 b'revision',
558 84
559 ]
560 ],
561 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
562 },
563 b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\na1\n',
564 {
565 b'path': b'b',
566 b'totalitems': 1
567 },
568 {
569 b'fieldsfollowing': [
570 [
571 b'revision',
572 81
573 ]
574 ],
575 b'node': b'\x88\xbac\xb8\xd8\xc6 :\xc6z\xc9\x98\xac\xd9\x17K\xf7\x05!\xb2'
576 },
577 b'b0\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n',
578 {
579 b'path': b'dir0/c',
580 b'totalitems': 1
581 },
582 {
583 b'fieldsfollowing': [
584 [
585 b'revision',
586 3
587 ]
588 ],
589 b'node': b'\x91DE4j\x0c\xa0b\x9b\xd4|\xeb]\xfe\x07\xe4\xd4\xcf%\x01'
590 },
591 b'c0\n',
592 {
593 b'path': b'dir0/child0/e',
594 b'totalitems': 1
595 },
596 {
597 b'fieldsfollowing': [
598 [
599 b'revision',
600 3
601 ]
602 ],
603 b'node': b'\xbb\xbal\x06\xb3\x0fD=4\xff\x84\x1b\xc9\x85\xc4\xd0\x82|k\xe4'
604 },
605 b'e0\n',
606 {
607 b'path': b'dir0/child1/f',
608 b'totalitems': 1
609 },
610 {
611 b'fieldsfollowing': [
612 [
613 b'revision',
614 3
615 ]
616 ],
617 b'node': b'\x12\xfc}\xcdw;Z\n\x92\x9c\xe1\x95"\x80\x83\xc6\xdd\xc9\xce\xc4'
618 },
619 b'f0\n',
620 {
621 b'path': b'dir0/d',
622 b'totalitems': 1
623 },
624 {
625 b'fieldsfollowing': [
626 [
627 b'revision',
628 3
629 ]
630 ],
631 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
632 },
633 b'd1\n',
634 {
635 b'path': b'g',
636 b'totalitems': 1
637 },
638 {
639 b'fieldsfollowing': [
640 [
641 b'revision',
642 3
643 ]
644 ],
645 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c'
646 },
647 b'g0\n',
648 {
649 b'path': b'h',
650 b'totalitems': 1
651 },
652 {
653 b'fieldsfollowing': [
654 [
655 b'revision',
656 3
657 ]
658 ],
659 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
660 },
661 b'h0\n'
662 ]
663
664 haveparents=False should be same as above
665
666 $ sendhttpv2peer << EOF
667 > command filesdata
668 > revisions eval:[{
669 > b'type': b'changesetexplicit',
670 > b'nodes': [
671 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
672 > ]}]
673 > fields eval:[b'revision']
674 > haveparents eval:False
675 > EOF
676 creating http peer for wire protocol version 2
677 sending filesdata command
678 response: gen[
679 {
680 b'totalitems': 8,
681 b'totalpaths': 8
682 },
683 {
684 b'path': b'a',
685 b'totalitems': 1
686 },
687 {
688 b'fieldsfollowing': [
689 [
690 b'revision',
691 84
692 ]
693 ],
694 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
695 },
696 b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\na1\n',
697 {
698 b'path': b'b',
699 b'totalitems': 1
700 },
701 {
702 b'fieldsfollowing': [
703 [
704 b'revision',
705 81
706 ]
707 ],
708 b'node': b'\x88\xbac\xb8\xd8\xc6 :\xc6z\xc9\x98\xac\xd9\x17K\xf7\x05!\xb2'
709 },
710 b'b0\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n',
711 {
712 b'path': b'dir0/c',
713 b'totalitems': 1
714 },
715 {
716 b'fieldsfollowing': [
717 [
718 b'revision',
719 3
720 ]
721 ],
722 b'node': b'\x91DE4j\x0c\xa0b\x9b\xd4|\xeb]\xfe\x07\xe4\xd4\xcf%\x01'
723 },
724 b'c0\n',
725 {
726 b'path': b'dir0/child0/e',
727 b'totalitems': 1
728 },
729 {
730 b'fieldsfollowing': [
731 [
732 b'revision',
733 3
734 ]
735 ],
736 b'node': b'\xbb\xbal\x06\xb3\x0fD=4\xff\x84\x1b\xc9\x85\xc4\xd0\x82|k\xe4'
737 },
738 b'e0\n',
739 {
740 b'path': b'dir0/child1/f',
741 b'totalitems': 1
742 },
743 {
744 b'fieldsfollowing': [
745 [
746 b'revision',
747 3
748 ]
749 ],
750 b'node': b'\x12\xfc}\xcdw;Z\n\x92\x9c\xe1\x95"\x80\x83\xc6\xdd\xc9\xce\xc4'
751 },
752 b'f0\n',
753 {
754 b'path': b'dir0/d',
755 b'totalitems': 1
756 },
757 {
758 b'fieldsfollowing': [
759 [
760 b'revision',
761 3
762 ]
763 ],
764 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
765 },
766 b'd1\n',
767 {
768 b'path': b'g',
769 b'totalitems': 1
770 },
771 {
772 b'fieldsfollowing': [
773 [
774 b'revision',
775 3
776 ]
777 ],
778 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c'
779 },
780 b'g0\n',
781 {
782 b'path': b'h',
783 b'totalitems': 1
784 },
785 {
786 b'fieldsfollowing': [
787 [
788 b'revision',
789 3
790 ]
791 ],
792 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
793 },
794 b'h0\n'
795 ]
796
797 haveparents=True should emit a delta
798
799 $ sendhttpv2peer << EOF
800 > command filesdata
801 > revisions eval:[{
802 > b'type': b'changesetexplicit',
803 > b'nodes': [
804 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
805 > ]}]
806 > fields eval:[b'revision']
807 > haveparents eval:True
808 > EOF
809 creating http peer for wire protocol version 2
810 sending filesdata command
811 response: gen[
812 {
813 b'totalitems': 4,
814 b'totalpaths': 4
815 },
816 {
817 b'path': b'a',
818 b'totalitems': 1
819 },
820 {
821 b'deltabasenode': b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9',
822 b'fieldsfollowing': [
823 [
824 b'delta',
825 15
826 ]
827 ],
828 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
829 },
830 b'\x00\x00\x00Q\x00\x00\x00Q\x00\x00\x00\x03a1\n',
831 {
832 b'path': b'dir0/d',
833 b'totalitems': 1
834 },
835 {
836 b'deltabasenode': b'S\x82\x06\xdc\x97\x1eR\x15@\xd6\x84:\xbf\xe6\xd1`2\xf6\xd4&',
837 b'fieldsfollowing': [
838 [
839 b'delta',
840 15
841 ]
842 ],
843 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
844 },
845 b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03d1\n',
846 {
847 b'path': b'g',
848 b'totalitems': 1
849 },
850 {
851 b'fieldsfollowing': [
852 [
853 b'revision',
854 3
855 ]
856 ],
857 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c'
858 },
859 b'g0\n',
860 {
861 b'path': b'h',
862 b'totalitems': 1
863 },
864 {
865 b'fieldsfollowing': [
866 [
867 b'revision',
868 3
869 ]
870 ],
871 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
872 },
873 b'h0\n'
874 ]
875
876 Requesting multiple revisions works
877 (first revision is a fulltext since haveparents=False by default)
878
879 $ sendhttpv2peer << EOF
880 > command filesdata
881 > revisions eval:[{
882 > b'type': b'changesetexplicit',
883 > b'nodes': [
884 > b'\x6e\x87\x5f\xf1\x8c\x22\x76\x59\xad\x61\x43\xbb\x35\x80\xc6\x57\x00\x73\x48\x84',
885 > b'\x5b\x0b\x1a\x23\x57\x7e\x20\x5e\xa2\x40\xe3\x9c\x97\x04\xe2\x8d\x76\x97\xcb\xd8',
886 > b'\xb9\x1c\x03\xcb\xba\x35\x19\xab\x14\x9b\x6c\xd0\xa0\xaf\xbd\xb5\xcf\x1b\x5c\x8a',
887 > ]}]
888 > fields eval:[b'revision']
889 > EOF
890 creating http peer for wire protocol version 2
891 sending filesdata command
892 response: gen[
893 {
894 b'totalitems': 12,
895 b'totalpaths': 9
896 },
897 {
898 b'path': b'a',
899 b'totalitems': 2
900 },
901 {
902 b'fieldsfollowing': [
903 [
904 b'revision',
905 81
906 ]
907 ],
908 b'node': b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9'
909 },
910 b'a0\n00000000000000000000000000000000000000\n11111111111111111111111111111111111111\n',
911 {
912 b'deltabasenode': b'd\x9d\x14\x9d\xf4=\x83\x88%#\xb7\xfb\x1ej:\xf6\xf1\x90{9',
913 b'fieldsfollowing': [
914 [
915 b'delta',
916 15
917 ]
918 ],
919 b'node': b'\n\x862\x1f\x13y\xd1\xa9\xec\xd0W\x9a"\x97z\xf7\xa5\xac\xaf\x11'
920 },
921 b'\x00\x00\x00Q\x00\x00\x00Q\x00\x00\x00\x03a1\n',
922 {
923 b'path': b'b',
924 b'totalitems': 1
925 },
926 {
927 b'fieldsfollowing': [
928 [
929 b'revision',
930 81
931 ]
932 ],
933 b'node': b'\x88\xbac\xb8\xd8\xc6 :\xc6z\xc9\x98\xac\xd9\x17K\xf7\x05!\xb2'
934 },
935 b'b0\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n',
936 {
937 b'path': b'dir0/c',
938 b'totalitems': 1
939 },
940 {
941 b'fieldsfollowing': [
942 [
943 b'revision',
944 3
945 ]
946 ],
947 b'node': b'\x91DE4j\x0c\xa0b\x9b\xd4|\xeb]\xfe\x07\xe4\xd4\xcf%\x01'
948 },
949 b'c0\n',
950 {
951 b'path': b'dir0/child0/e',
952 b'totalitems': 1
953 },
954 {
955 b'fieldsfollowing': [
956 [
957 b'revision',
958 3
959 ]
960 ],
961 b'node': b'\xbb\xbal\x06\xb3\x0fD=4\xff\x84\x1b\xc9\x85\xc4\xd0\x82|k\xe4'
962 },
963 b'e0\n',
964 {
965 b'path': b'dir0/child1/f',
966 b'totalitems': 2
967 },
968 {
969 b'fieldsfollowing': [
970 [
971 b'revision',
972 3
973 ]
974 ],
975 b'node': b'\x12\xfc}\xcdw;Z\n\x92\x9c\xe1\x95"\x80\x83\xc6\xdd\xc9\xce\xc4'
976 },
977 b'f0\n',
978 {
979 b'deltabasenode': b'\x12\xfc}\xcdw;Z\n\x92\x9c\xe1\x95"\x80\x83\xc6\xdd\xc9\xce\xc4',
980 b'fieldsfollowing': [
981 [
982 b'delta',
983 15
984 ]
985 ],
986 b'node': b'(\xc7v\xae\x08\xd0\xd5^\xb4\x06H\xb4\x01\xb9\x0f\xf5DH4\x8e'
987 },
988 b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03f1\n',
989 {
990 b'path': b'dir0/d',
991 b'totalitems': 2
992 },
993 {
994 b'fieldsfollowing': [
995 [
996 b'revision',
997 3
998 ]
999 ],
1000 b'node': b'S\x82\x06\xdc\x97\x1eR\x15@\xd6\x84:\xbf\xe6\xd1`2\xf6\xd4&'
1001 },
1002 b'd0\n',
1003 {
1004 b'deltabasenode': b'S\x82\x06\xdc\x97\x1eR\x15@\xd6\x84:\xbf\xe6\xd1`2\xf6\xd4&',
1005 b'fieldsfollowing': [
1006 [
1007 b'delta',
1008 15
1009 ]
1010 ],
1011 b'node': b'\x93\x88)\xad\x01R}2\xba\x06_\x81#6\xfe\xc7\x9d\xdd9G'
1012 },
1013 b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03d1\n',
1014 {
1015 b'path': b'dir0/i',
1016 b'totalitems': 1
1017 },
1018 {
1019 b'fieldsfollowing': [
1020 [
1021 b'revision',
1022 3
1023 ]
1024 ],
1025 b'node': b'\xd7t\xb5\x80Jq\xfd1\xe1\xae\x05\xea\x8e2\xdd\x9b\xa3\xd8S\xd7'
1026 },
1027 b'i0\n',
1028 {
1029 b'path': b'g',
1030 b'totalitems': 1
1031 },
1032 {
1033 b'fieldsfollowing': [
1034 [
1035 b'revision',
1036 3
1037 ]
1038 ],
1039 b'node': b'\xde\xca\xba5DFjI\x95r\xe9\x0f\xac\xe6\xfa\x0c!k\xba\x8c'
1040 },
1041 b'g0\n',
1042 {
1043 b'path': b'h',
1044 b'totalitems': 1
1045 },
1046 {
1047 b'fieldsfollowing': [
1048 [
1049 b'revision',
1050 3
1051 ]
1052 ],
1053 b'node': b'\x03A\xfc\x84\x1b\xb5\xb4\xba\x93\xb2mM\xdaa\xf7y6]\xb3K'
1054 },
1055 b'h0\n'
1056 ]
1057
1058 $ cat error.log
@@ -604,6 +604,9 b" coreconfigitem('experimental', 'revlogv2"
604 coreconfigitem('experimental', 'revisions.disambiguatewithin',
604 coreconfigitem('experimental', 'revisions.disambiguatewithin',
605 default=None,
605 default=None,
606 )
606 )
607 coreconfigitem('experimental', 'server.filesdata.recommended-batch-size',
608 default=50000,
609 )
607 coreconfigitem('experimental', 'server.manifestdata.recommended-batch-size',
610 coreconfigitem('experimental', 'server.manifestdata.recommended-batch-size',
608 default=100000,
611 default=100000,
609 )
612 )
@@ -340,6 +340,89 b' revision data or a delta. What the serve'
340 for the presence of the ``delta`` or ``revision`` keys in the
340 for the presence of the ``delta`` or ``revision`` keys in the
341 ``fieldsfollowing`` array.
341 ``fieldsfollowing`` array.
342
342
343 filesdata
344 ---------
345
346 Obtain various data related to multiple tracked files for specific changesets.
347
348 This command is similar to ``filedata`` with the main difference being that
349 individual requests operate on multiple file paths. This allows clients to
350 request data for multiple paths by issuing a single command.
351
352 The command accepts the following arguments:
353
354 fields
355 (set of bytestring) Which data associated with a file to fetch.
356 The following values are recognized:
357
358 parents
359 Parent nodes for the revision.
360
361 revision
362 The raw revision data for a file.
363
364 haveparents
365 (bool) Whether the client has the parent revisions of all requested
366 nodes.
367
368 pathfilter
369 (map) Defines a filter that determines what file paths are relevant.
370
371 See the *Path Filters* section for more.
372
373 If the argument is omitted, it is assumed that all paths are relevant.
374
375 revisions
376 (array of maps) Specifies revisions whose data is being requested. Each value
377 in the array is a map describing revisions. See the *Revisions Specifiers*
378 section below for the format of this map.
379
380 Data will be sent for the union of all revisions resolved by all revision
381 specifiers.
382
383 Only revision specifiers operating on changeset revisions are allowed.
384
385 The response bytestream starts with a CBOR map describing the data that
386 follows. This map has the following bytestring keys:
387
388 totalpaths
389 (unsigned integer) Total number of paths whose data is being transferred.
390
391 totalitems
392 (unsigned integer) Total number of file revisions whose data is being
393 transferred.
394
395 Following the map header are 0 or more sequences of CBOR values. Each sequence
396 represents data for a specific tracked path. Each sequence begins with a CBOR
397 map describing the file data that follows. Following that map is N CBOR values
398 describing file revision data. The format of this data is identical to that
399 returned by the ``filedata`` command.
400
401 Each sequence's map header has the following bytestring keys:
402
403 path
404 (bytestring) The tracked file path whose data follows.
405
406 totalitems
407 (unsigned integer) Total number of file revisions whose data is being
408 transferred.
409
410 The ``haveparents`` argument has significant implications on the data
411 transferred.
412
413 When ``haveparents`` is true, the command MAY only emit data for file
414 revisions introduced by the set of changeset revisions whose data is being
415 requested. In other words, the command may assume that all file revisions
416 for all relevant paths for ancestors of the requested changeset revisions
417 are present on the receiver.
418
419 When ``haveparents`` is false, the command MUST assume that the receiver
420 has no file revisions data. This means that all referenced file revisions
421 in the queried set of changeset revisions will be sent.
422
423 TODO we'll probably want a more complicated mechanism for the client to
424 specify which ancestor revisions are known.
425
343 heads
426 heads
344 -----
427 -----
345
428
@@ -559,3 +642,27 b' changesetdagrange'
559 revisions between will be used. Nodes in ``roots`` are not part of the
642 revisions between will be used. Nodes in ``roots`` are not part of the
560 resolved set. Nodes in ``heads`` are. The ``roots`` array may be empty.
643 resolved set. Nodes in ``heads`` are. The ``roots`` array may be empty.
561 The ``heads`` array MUST be defined.
644 The ``heads`` array MUST be defined.
645
646 Path Filters
647 ============
648
649 Various commands accept a *path filter* argument that defines the set of file
650 paths relevant to the request.
651
652 A *path filter* is defined as a map with the bytestring keys ``include`` and
653 ``exclude``. Each is an array of bytestring values. Each value defines a pattern
654 rule (see :hg:`help patterns`) that is used to match file paths.
655
656 A path matches the path filter if it is matched by a rule in the ``include``
657 set but doesn't match a rule in the ``exclude`` set. In other words, a path
658 matcher takes the union of all ``include`` patterns and then substracts the
659 union of all ``exclude`` patterns.
660
661 Patterns MUST be prefixed with their pattern type. Only the following pattern
662 types are allowed: ``path:``, ``rootfilesin:``.
663
664 If the ``include`` key is omitted, it is assumed that all paths are
665 relevant. The patterns from ``exclude`` will still be used, if defined.
666
667 An example value is ``path:tests/foo``, which would match a file named
668 ``tests/foo`` or a directory ``tests/foo`` and all files under it.
@@ -6,6 +6,7 b''
6
6
7 from __future__ import absolute_import
7 from __future__ import absolute_import
8
8
9 import collections
9 import contextlib
10 import contextlib
10 import hashlib
11 import hashlib
11
12
@@ -18,6 +19,7 b' from . import ('
18 discovery,
19 discovery,
19 encoding,
20 encoding,
20 error,
21 error,
22 match as matchmod,
21 narrowspec,
23 narrowspec,
22 pycompat,
24 pycompat,
23 wireprotoframing,
25 wireprotoframing,
@@ -1004,6 +1006,29 b' def emitfilerevisions(revisions, fields)'
1004 for extra in followingdata:
1006 for extra in followingdata:
1005 yield extra
1007 yield extra
1006
1008
1009 def makefilematcher(repo, pathfilter):
1010 """Construct a matcher from a path filter dict."""
1011
1012 # Validate values.
1013 if pathfilter:
1014 for key in (b'include', b'exclude'):
1015 for pattern in pathfilter.get(key, []):
1016 if not pattern.startswith((b'path:', b'rootfilesin:')):
1017 raise error.WireprotoCommandError(
1018 '%s pattern must begin with `path:` or `rootfilesin:`; '
1019 'got %s', (key, pattern))
1020
1021 if pathfilter:
1022 matcher = matchmod.match(repo.root, b'',
1023 include=pathfilter.get(b'include', []),
1024 exclude=pathfilter.get(b'exclude', []))
1025 else:
1026 matcher = matchmod.match(repo.root, b'')
1027
1028 # Requested patterns could include files not in the local store. So
1029 # filter those out.
1030 return matchmod.intersectmatchers(repo.narrowmatch(), matcher)
1031
1007 @wireprotocommand(
1032 @wireprotocommand(
1008 'filedata',
1033 'filedata',
1009 args={
1034 args={
@@ -1033,6 +1058,10 b' def emitfilerevisions(revisions, fields)'
1033 # the cache key.
1058 # the cache key.
1034 cachekeyfn=makecommandcachekeyfn('filedata', 1, allargs=True))
1059 cachekeyfn=makecommandcachekeyfn('filedata', 1, allargs=True))
1035 def filedata(repo, proto, haveparents, nodes, fields, path):
1060 def filedata(repo, proto, haveparents, nodes, fields, path):
1061 # TODO this API allows access to file revisions that are attached to
1062 # secret changesets. filesdata does not have this problem. Maybe this
1063 # API should be deleted?
1064
1036 try:
1065 try:
1037 # Extensions may wish to access the protocol handler.
1066 # Extensions may wish to access the protocol handler.
1038 store = getfilestore(repo, proto, path)
1067 store = getfilestore(repo, proto, path)
@@ -1058,6 +1087,117 b' def filedata(repo, proto, haveparents, n'
1058 for o in emitfilerevisions(revisions, fields):
1087 for o in emitfilerevisions(revisions, fields):
1059 yield o
1088 yield o
1060
1089
1090 def filesdatacapabilities(repo, proto):
1091 batchsize = repo.ui.configint(
1092 b'experimental', b'server.filesdata.recommended-batch-size')
1093 return {
1094 b'recommendedbatchsize': batchsize,
1095 }
1096
1097 @wireprotocommand(
1098 'filesdata',
1099 args={
1100 'haveparents': {
1101 'type': 'bool',
1102 'default': lambda: False,
1103 'example': True,
1104 },
1105 'fields': {
1106 'type': 'set',
1107 'default': set,
1108 'example': {b'parents', b'revision'},
1109 'validvalues': {b'firstchangeset', b'parents', b'revision'},
1110 },
1111 'pathfilter': {
1112 'type': 'dict',
1113 'default': lambda: None,
1114 'example': {b'include': [b'path:tests']},
1115 },
1116 'revisions': {
1117 'type': 'list',
1118 'example': [{
1119 b'type': b'changesetexplicit',
1120 b'nodes': [b'abcdef...'],
1121 }],
1122 },
1123 },
1124 permission='pull',
1125 # TODO censoring a file revision won't invalidate the cache.
1126 # Figure out a way to take censoring into account when deriving
1127 # the cache key.
1128 cachekeyfn=makecommandcachekeyfn('filesdata', 1, allargs=True),
1129 extracapabilitiesfn=filesdatacapabilities)
1130 def filesdata(repo, proto, haveparents, fields, pathfilter, revisions):
1131 # TODO This should operate on a repo that exposes obsolete changesets. There
1132 # is a race between a client making a push that obsoletes a changeset and
1133 # another client fetching files data for that changeset. If a client has a
1134 # changeset, it should probably be allowed to access files data for that
1135 # changeset.
1136
1137 cl = repo.changelog
1138 outgoing = resolvenodes(repo, revisions)
1139 filematcher = makefilematcher(repo, pathfilter)
1140
1141 # Figure out what needs to be emitted.
1142 changedpaths = set()
1143 fnodes = collections.defaultdict(set)
1144
1145 for node in outgoing:
1146 ctx = repo[node]
1147 changedpaths.update(ctx.files())
1148
1149 changedpaths = sorted(p for p in changedpaths if filematcher(p))
1150
1151 # If ancestors are known, we send file revisions having a linkrev in the
1152 # outgoing set of changeset revisions.
1153 if haveparents:
1154 outgoingclrevs = set(cl.rev(n) for n in outgoing)
1155
1156 for path in changedpaths:
1157 try:
1158 store = getfilestore(repo, proto, path)
1159 except FileAccessError as e:
1160 raise error.WireprotoCommandError(e.msg, e.args)
1161
1162 for rev in store:
1163 linkrev = store.linkrev(rev)
1164
1165 if linkrev in outgoingclrevs:
1166 fnodes[path].add(store.node(rev))
1167
1168 # If ancestors aren't known, we walk the manifests and send all
1169 # encountered file revisions.
1170 else:
1171 for node in outgoing:
1172 mctx = repo[node].manifestctx()
1173
1174 for path, fnode in mctx.read().items():
1175 if filematcher(path):
1176 fnodes[path].add(fnode)
1177
1178 yield {
1179 b'totalpaths': len(fnodes),
1180 b'totalitems': sum(len(v) for v in fnodes.values())
1181 }
1182
1183 for path, filenodes in sorted(fnodes.items()):
1184 try:
1185 store = getfilestore(repo, proto, path)
1186 except FileAccessError as e:
1187 raise error.WireprotoCommandError(e.msg, e.args)
1188
1189 yield {
1190 b'path': path,
1191 b'totalitems': len(filenodes),
1192 }
1193
1194 revisions = store.emitrevisions(filenodes,
1195 revisiondata=b'revision' in fields,
1196 assumehaveparentrevisions=haveparents)
1197
1198 for o in emitfilerevisions(revisions, fields):
1199 yield o
1200
1061 @wireprotocommand(
1201 @wireprotocommand(
1062 'heads',
1202 'heads',
1063 args={
1203 args={
@@ -315,7 +315,7 b' Client with HTTPv2 enabled automatically'
315 s> Content-Type: application/mercurial-cbor\r\n
315 s> Content-Type: application/mercurial-cbor\r\n
316 s> Content-Length: *\r\n (glob)
316 s> Content-Length: *\r\n (glob)
317 s> \r\n
317 s> \r\n
318 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
318 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa4Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
319 sending heads command
319 sending heads command
320 s> POST /api/exp-http-v2-0003/ro/heads HTTP/1.1\r\n
320 s> POST /api/exp-http-v2-0003/ro/heads HTTP/1.1\r\n
321 s> Accept-Encoding: identity\r\n
321 s> Accept-Encoding: identity\r\n
@@ -273,6 +273,38 b' A non-cacheable command does not instant'
273 b'pull'
273 b'pull'
274 ]
274 ]
275 },
275 },
276 b'filesdata': {
277 b'args': {
278 b'fields': {
279 b'default': set([]),
280 b'required': False,
281 b'type': b'set',
282 b'validvalues': set([
283 b'firstchangeset',
284 b'parents',
285 b'revision'
286 ])
287 },
288 b'haveparents': {
289 b'default': False,
290 b'required': False,
291 b'type': b'bool'
292 },
293 b'pathfilter': {
294 b'default': None,
295 b'required': False,
296 b'type': b'dict'
297 },
298 b'revisions': {
299 b'required': True,
300 b'type': b'list'
301 }
302 },
303 b'permissions': [
304 b'pull'
305 ],
306 b'recommendedbatchsize': 50000
307 },
276 b'heads': {
308 b'heads': {
277 b'args': {
309 b'args': {
278 b'publiconly': {
310 b'publiconly': {
@@ -216,7 +216,7 b' Request for HTTPv2 service returns infor'
216 s> Content-Type: application/mercurial-cbor\r\n
216 s> Content-Type: application/mercurial-cbor\r\n
217 s> Content-Length: *\r\n (glob)
217 s> Content-Length: *\r\n (glob)
218 s> \r\n
218 s> \r\n
219 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
219 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa4Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
220 cbor> [
220 cbor> [
221 {
221 {
222 b'apibase': b'api/',
222 b'apibase': b'api/',
@@ -286,6 +286,38 b' Request for HTTPv2 service returns infor'
286 b'pull'
286 b'pull'
287 ]
287 ]
288 },
288 },
289 b'filesdata': {
290 b'args': {
291 b'fields': {
292 b'default': set([]),
293 b'required': False,
294 b'type': b'set',
295 b'validvalues': set([
296 b'firstchangeset',
297 b'parents',
298 b'revision'
299 ])
300 },
301 b'haveparents': {
302 b'default': False,
303 b'required': False,
304 b'type': b'bool'
305 },
306 b'pathfilter': {
307 b'default': None,
308 b'required': False,
309 b'type': b'dict'
310 },
311 b'revisions': {
312 b'required': True,
313 b'type': b'list'
314 }
315 },
316 b'permissions': [
317 b'pull'
318 ],
319 b'recommendedbatchsize': 50000
320 },
289 b'heads': {
321 b'heads': {
290 b'args': {
322 b'args': {
291 b'publiconly': {
323 b'publiconly': {
@@ -425,7 +457,7 b' capabilities command returns expected in'
425 s> Content-Type: application/mercurial-cbor\r\n
457 s> Content-Type: application/mercurial-cbor\r\n
426 s> Content-Length: *\r\n (glob)
458 s> Content-Length: *\r\n (glob)
427 s> \r\n
459 s> \r\n
428 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
460 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa4Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
429 sending capabilities command
461 sending capabilities command
430 s> POST /api/exp-http-v2-0003/ro/capabilities HTTP/1.1\r\n
462 s> POST /api/exp-http-v2-0003/ro/capabilities HTTP/1.1\r\n
431 s> Accept-Encoding: identity\r\n
463 s> Accept-Encoding: identity\r\n
@@ -453,11 +485,11 b' capabilities command returns expected in'
453 s> \xa1FstatusBok
485 s> \xa1FstatusBok
454 s> \r\n
486 s> \r\n
455 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
487 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
456 s> 4cd\r\n
488 s> 5d1\r\n
457 s> \xc5\x04\x00\x01\x00\x02\x041
489 s> \xc9\x05\x00\x01\x00\x02\x041
458 s> \xa4Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1
490 s> \xa4Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1
459 s> \r\n
491 s> \r\n
460 received frame(size=1221; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
492 received frame(size=1481; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
461 s> 8\r\n
493 s> 8\r\n
462 s> \x00\x00\x00\x01\x00\x02\x002
494 s> \x00\x00\x00\x01\x00\x02\x002
463 s> \r\n
495 s> \r\n
@@ -530,6 +562,38 b' capabilities command returns expected in'
530 b'pull'
562 b'pull'
531 ]
563 ]
532 },
564 },
565 b'filesdata': {
566 b'args': {
567 b'fields': {
568 b'default': set([]),
569 b'required': False,
570 b'type': b'set',
571 b'validvalues': set([
572 b'firstchangeset',
573 b'parents',
574 b'revision'
575 ])
576 },
577 b'haveparents': {
578 b'default': False,
579 b'required': False,
580 b'type': b'bool'
581 },
582 b'pathfilter': {
583 b'default': None,
584 b'required': False,
585 b'type': b'dict'
586 },
587 b'revisions': {
588 b'required': True,
589 b'type': b'list'
590 }
591 },
592 b'permissions': [
593 b'pull'
594 ],
595 b'recommendedbatchsize': 50000
596 },
533 b'heads': {
597 b'heads': {
534 b'args': {
598 b'args': {
535 b'publiconly': {
599 b'publiconly': {
@@ -65,9 +65,9 b' Redirect targets advertised when configu'
65 s> Server: testing stub value\r\n
65 s> Server: testing stub value\r\n
66 s> Date: $HTTP_DATE$\r\n
66 s> Date: $HTTP_DATE$\r\n
67 s> Content-Type: application/mercurial-cbor\r\n
67 s> Content-Type: application/mercurial-cbor\r\n
68 s> Content-Length: 1871\r\n
68 s> Content-Length: 2131\r\n
69 s> \r\n
69 s> \r\n
70 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
70 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa5Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
71 (remote redirect target target-a is compatible)
71 (remote redirect target target-a is compatible)
72 sending capabilities command
72 sending capabilities command
73 s> POST /api/exp-http-v2-0003/ro/capabilities HTTP/1.1\r\n
73 s> POST /api/exp-http-v2-0003/ro/capabilities HTTP/1.1\r\n
@@ -96,11 +96,11 b' Redirect targets advertised when configu'
96 s> \xa1FstatusBok
96 s> \xa1FstatusBok
97 s> \r\n
97 s> \r\n
98 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
98 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
99 s> 54d\r\n
99 s> 651\r\n
100 s> E\x05\x00\x01\x00\x02\x041
100 s> I\x06\x00\x01\x00\x02\x041
101 s> \xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/
101 s> \xa5Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/
102 s> \r\n
102 s> \r\n
103 received frame(size=1349; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
103 received frame(size=1609; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
104 s> 8\r\n
104 s> 8\r\n
105 s> \x00\x00\x00\x01\x00\x02\x002
105 s> \x00\x00\x00\x01\x00\x02\x002
106 s> \r\n
106 s> \r\n
@@ -173,6 +173,38 b' Redirect targets advertised when configu'
173 b'pull'
173 b'pull'
174 ]
174 ]
175 },
175 },
176 b'filesdata': {
177 b'args': {
178 b'fields': {
179 b'default': set([]),
180 b'required': False,
181 b'type': b'set',
182 b'validvalues': set([
183 b'firstchangeset',
184 b'parents',
185 b'revision'
186 ])
187 },
188 b'haveparents': {
189 b'default': False,
190 b'required': False,
191 b'type': b'bool'
192 },
193 b'pathfilter': {
194 b'default': None,
195 b'required': False,
196 b'type': b'dict'
197 },
198 b'revisions': {
199 b'required': True,
200 b'type': b'list'
201 }
202 },
203 b'permissions': [
204 b'pull'
205 ],
206 b'recommendedbatchsize': 50000
207 },
176 b'heads': {
208 b'heads': {
177 b'args': {
209 b'args': {
178 b'publiconly': {
210 b'publiconly': {
@@ -343,9 +375,9 b' Unknown protocol is filtered from compat'
343 s> Server: testing stub value\r\n
375 s> Server: testing stub value\r\n
344 s> Date: $HTTP_DATE$\r\n
376 s> Date: $HTTP_DATE$\r\n
345 s> Content-Type: application/mercurial-cbor\r\n
377 s> Content-Type: application/mercurial-cbor\r\n
346 s> Content-Length: 1898\r\n
378 s> Content-Length: 2158\r\n
347 s> \r\n
379 s> \r\n
348 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
380 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa5Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
349 (remote redirect target target-a is compatible)
381 (remote redirect target target-a is compatible)
350 (remote redirect target target-b uses unsupported protocol: unknown)
382 (remote redirect target target-b uses unsupported protocol: unknown)
351 sending capabilities command
383 sending capabilities command
@@ -375,11 +407,11 b' Unknown protocol is filtered from compat'
375 s> \xa1FstatusBok
407 s> \xa1FstatusBok
376 s> \r\n
408 s> \r\n
377 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
409 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
378 s> 568\r\n
410 s> 66c\r\n
379 s> `\x05\x00\x01\x00\x02\x041
411 s> d\x06\x00\x01\x00\x02\x041
380 s> \xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/
412 s> \xa5Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/
381 s> \r\n
413 s> \r\n
382 received frame(size=1376; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
414 received frame(size=1636; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
383 s> 8\r\n
415 s> 8\r\n
384 s> \x00\x00\x00\x01\x00\x02\x002
416 s> \x00\x00\x00\x01\x00\x02\x002
385 s> \r\n
417 s> \r\n
@@ -452,6 +484,38 b' Unknown protocol is filtered from compat'
452 b'pull'
484 b'pull'
453 ]
485 ]
454 },
486 },
487 b'filesdata': {
488 b'args': {
489 b'fields': {
490 b'default': set([]),
491 b'required': False,
492 b'type': b'set',
493 b'validvalues': set([
494 b'firstchangeset',
495 b'parents',
496 b'revision'
497 ])
498 },
499 b'haveparents': {
500 b'default': False,
501 b'required': False,
502 b'type': b'bool'
503 },
504 b'pathfilter': {
505 b'default': None,
506 b'required': False,
507 b'type': b'dict'
508 },
509 b'revisions': {
510 b'required': True,
511 b'type': b'list'
512 }
513 },
514 b'permissions': [
515 b'pull'
516 ],
517 b'recommendedbatchsize': 50000
518 },
455 b'heads': {
519 b'heads': {
456 b'args': {
520 b'args': {
457 b'publiconly': {
521 b'publiconly': {
@@ -629,9 +693,9 b' Missing SNI support filters targets that'
629 s> Server: testing stub value\r\n
693 s> Server: testing stub value\r\n
630 s> Date: $HTTP_DATE$\r\n
694 s> Date: $HTTP_DATE$\r\n
631 s> Content-Type: application/mercurial-cbor\r\n
695 s> Content-Type: application/mercurial-cbor\r\n
632 s> Content-Length: 1858\r\n
696 s> Content-Length: 2118\r\n
633 s> \r\n
697 s> \r\n
634 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKsnirequired\xf5Duris\x81Thttps://example.com/Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
698 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa5Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKsnirequired\xf5Duris\x81Thttps://example.com/Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
635 (redirect target target-bad-tls requires SNI, which is unsupported)
699 (redirect target target-bad-tls requires SNI, which is unsupported)
636 sending capabilities command
700 sending capabilities command
637 s> POST /api/exp-http-v2-0003/ro/capabilities HTTP/1.1\r\n
701 s> POST /api/exp-http-v2-0003/ro/capabilities HTTP/1.1\r\n
@@ -660,11 +724,11 b' Missing SNI support filters targets that'
660 s> \xa1FstatusBok
724 s> \xa1FstatusBok
661 s> \r\n
725 s> \r\n
662 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
726 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
663 s> 540\r\n
727 s> 644\r\n
664 s> 8\x05\x00\x01\x00\x02\x041
728 s> <\x06\x00\x01\x00\x02\x041
665 s> \xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKsnirequired\xf5Duris\x81Thttps://example.com/
729 s> \xa5Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKsnirequired\xf5Duris\x81Thttps://example.com/
666 s> \r\n
730 s> \r\n
667 received frame(size=1336; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
731 received frame(size=1596; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
668 s> 8\r\n
732 s> 8\r\n
669 s> \x00\x00\x00\x01\x00\x02\x002
733 s> \x00\x00\x00\x01\x00\x02\x002
670 s> \r\n
734 s> \r\n
@@ -737,6 +801,38 b' Missing SNI support filters targets that'
737 b'pull'
801 b'pull'
738 ]
802 ]
739 },
803 },
804 b'filesdata': {
805 b'args': {
806 b'fields': {
807 b'default': set([]),
808 b'required': False,
809 b'type': b'set',
810 b'validvalues': set([
811 b'firstchangeset',
812 b'parents',
813 b'revision'
814 ])
815 },
816 b'haveparents': {
817 b'default': False,
818 b'required': False,
819 b'type': b'bool'
820 },
821 b'pathfilter': {
822 b'default': None,
823 b'required': False,
824 b'type': b'dict'
825 },
826 b'revisions': {
827 b'required': True,
828 b'type': b'list'
829 }
830 },
831 b'permissions': [
832 b'pull'
833 ],
834 b'recommendedbatchsize': 50000
835 },
740 b'heads': {
836 b'heads': {
741 b'args': {
837 b'args': {
742 b'publiconly': {
838 b'publiconly': {
@@ -904,9 +1000,9 b' Unknown tls value is filtered from compa'
904 s> Server: testing stub value\r\n
1000 s> Server: testing stub value\r\n
905 s> Date: $HTTP_DATE$\r\n
1001 s> Date: $HTTP_DATE$\r\n
906 s> Content-Type: application/mercurial-cbor\r\n
1002 s> Content-Type: application/mercurial-cbor\r\n
907 s> Content-Length: 1864\r\n
1003 s> Content-Length: 2124\r\n
908 s> \r\n
1004 s> \r\n
909 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKtlsversions\x82B42B39Duris\x81Thttps://example.com/Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
1005 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0003\xa5Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKtlsversions\x82B42B39Duris\x81Thttps://example.com/Nv1capabilitiesY\x01\xd3batch branchmap $USUAL_BUNDLE2_CAPS$ 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
910 (remote redirect target target-bad-tls requires unsupported TLS versions: 39, 42)
1006 (remote redirect target target-bad-tls requires unsupported TLS versions: 39, 42)
911 sending capabilities command
1007 sending capabilities command
912 s> POST /api/exp-http-v2-0003/ro/capabilities HTTP/1.1\r\n
1008 s> POST /api/exp-http-v2-0003/ro/capabilities HTTP/1.1\r\n
@@ -935,11 +1031,11 b' Unknown tls value is filtered from compa'
935 s> \xa1FstatusBok
1031 s> \xa1FstatusBok
936 s> \r\n
1032 s> \r\n
937 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
1033 received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
938 s> 546\r\n
1034 s> 64a\r\n
939 s> >\x05\x00\x01\x00\x02\x041
1035 s> B\x06\x00\x01\x00\x02\x041
940 s> \xa5Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKtlsversions\x82B42B39Duris\x81Thttps://example.com/
1036 s> \xa5Hcommands\xabIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa2Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullHfiledata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDpath\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullIfilesdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x83NfirstchangesetGparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolJpathfilter\xa3Gdefault\xf6Hrequired\xf4DtypeDdictIrevisions\xa2Hrequired\xf5DtypeDlistKpermissions\x81DpullTrecommendedbatchsize\x19\xc3PEheads\xa2Dargs\xa1Jpubliconly\xa3Gdefault\xf4Hrequired\xf4DtypeDboolKpermissions\x81DpullEknown\xa2Dargs\xa1Enodes\xa3Gdefault\x80Hrequired\xf4DtypeDlistKpermissions\x81DpullHlistkeys\xa2Dargs\xa1Inamespace\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullFlookup\xa2Dargs\xa1Ckey\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullLmanifestdata\xa3Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullTrecommendedbatchsize\x1a\x00\x01\x86\xa0Gpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0006Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKtlsversions\x82B42B39Duris\x81Thttps://example.com/
941 s> \r\n
1037 s> \r\n
942 received frame(size=1342; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
1038 received frame(size=1602; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
943 s> 8\r\n
1039 s> 8\r\n
944 s> \x00\x00\x00\x01\x00\x02\x002
1040 s> \x00\x00\x00\x01\x00\x02\x002
945 s> \r\n
1041 s> \r\n
@@ -1012,6 +1108,38 b' Unknown tls value is filtered from compa'
1012 b'pull'
1108 b'pull'
1013 ]
1109 ]
1014 },
1110 },
1111 b'filesdata': {
1112 b'args': {
1113 b'fields': {
1114 b'default': set([]),
1115 b'required': False,
1116 b'type': b'set',
1117 b'validvalues': set([
1118 b'firstchangeset',
1119 b'parents',
1120 b'revision'
1121 ])
1122 },
1123 b'haveparents': {
1124 b'default': False,
1125 b'required': False,
1126 b'type': b'bool'
1127 },
1128 b'pathfilter': {
1129 b'default': None,
1130 b'required': False,
1131 b'type': b'dict'
1132 },
1133 b'revisions': {
1134 b'required': True,
1135 b'type': b'list'
1136 }
1137 },
1138 b'permissions': [
1139 b'pull'
1140 ],
1141 b'recommendedbatchsize': 50000
1142 },
1015 b'heads': {
1143 b'heads': {
1016 b'args': {
1144 b'args': {
1017 b'publiconly': {
1145 b'publiconly': {
General Comments 0
You need to be logged in to leave comments. Login now