Mercurial > hg
comparison tests/test-wireproto-content-redirects.t @ 40023:10cf8b116dd8
wireprotov2: advertise redirect targets in capabilities
This is pretty straightforward.
Redirect targets will require an extension to support. So we've added
a function that can be wrapped to define redirect targets.
To test this, we teach our simple cache test extension to read
redirect targets from a file. It's a bit hacky. But it gets the
job done.
Differential Revision: https://phab.mercurial-scm.org/D4775
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 26 Sep 2018 17:46:48 -0700 |
parents | |
children | 86b22a4cfab1 |
comparison
equal
deleted
inserted
replaced
40022:33eb670e2834 | 40023:10cf8b116dd8 |
---|---|
1 $ . $TESTDIR/wireprotohelpers.sh | |
2 | |
3 $ hg init server | |
4 $ enablehttpv2 server | |
5 $ cd server | |
6 $ cat >> .hg/hgrc << EOF | |
7 > [extensions] | |
8 > simplecache = $TESTDIR/wireprotosimplecache.py | |
9 > EOF | |
10 | |
11 $ echo a0 > a | |
12 $ echo b0 > b | |
13 $ hg -q commit -A -m 'commit 0' | |
14 $ echo a1 > a | |
15 $ hg commit -m 'commit 1' | |
16 | |
17 $ hg --debug debugindex -m | |
18 rev linkrev nodeid p1 p2 | |
19 0 0 992f4779029a3df8d0666d00bb924f69634e2641 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 | |
20 1 1 a988fb43583e871d1ed5750ee074c6d840bbbfc8 992f4779029a3df8d0666d00bb924f69634e2641 0000000000000000000000000000000000000000 | |
21 | |
22 $ hg --config simplecache.redirectsfile=redirects.py serve -p $HGPORT -d --pid-file hg.pid -E error.log | |
23 $ cat hg.pid > $DAEMON_PIDS | |
24 | |
25 $ cat > redirects.py << EOF | |
26 > [ | |
27 > { | |
28 > b'name': b'target-a', | |
29 > b'protocol': b'http', | |
30 > b'snirequired': False, | |
31 > b'tlsversions': [b'1.2', b'1.3'], | |
32 > b'uris': [b'http://example.com/'], | |
33 > }, | |
34 > ] | |
35 > EOF | |
36 | |
37 Redirect targets advertised when configured | |
38 | |
39 $ sendhttpv2peerhandshake << EOF | |
40 > command capabilities | |
41 > EOF | |
42 creating http peer for wire protocol version 2 | |
43 s> GET /?cmd=capabilities HTTP/1.1\r\n | |
44 s> Accept-Encoding: identity\r\n | |
45 s> vary: X-HgProto-1,X-HgUpgrade-1\r\n | |
46 s> x-hgproto-1: cbor\r\n | |
47 s> x-hgupgrade-1: exp-http-v2-0002\r\n | |
48 s> accept: application/mercurial-0.1\r\n | |
49 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
50 s> user-agent: Mercurial debugwireproto\r\n | |
51 s> \r\n | |
52 s> makefile('rb', None) | |
53 s> HTTP/1.1 200 OK\r\n | |
54 s> Server: testing stub value\r\n | |
55 s> Date: $HTTP_DATE$\r\n | |
56 s> Content-Type: application/mercurial-cbor\r\n | |
57 s> Content-Length: 1970\r\n | |
58 s> \r\n | |
59 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa6Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\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\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushKcompression\x82\xa1DnameDzstd\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/Nv1capabilitiesY\x01\xd8batch 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 | |
60 sending capabilities command | |
61 s> POST /api/exp-http-v2-0002/ro/capabilities HTTP/1.1\r\n | |
62 s> Accept-Encoding: identity\r\n | |
63 s> accept: application/mercurial-exp-framing-0005\r\n | |
64 s> content-type: application/mercurial-exp-framing-0005\r\n | |
65 s> content-length: 27\r\n | |
66 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
67 s> user-agent: Mercurial debugwireproto\r\n | |
68 s> \r\n | |
69 s> \x13\x00\x00\x01\x00\x01\x01\x11\xa1DnameLcapabilities | |
70 s> makefile('rb', None) | |
71 s> HTTP/1.1 200 OK\r\n | |
72 s> Server: testing stub value\r\n | |
73 s> Date: $HTTP_DATE$\r\n | |
74 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
75 s> Transfer-Encoding: chunked\r\n | |
76 s> \r\n | |
77 s> 13\r\n | |
78 s> \x0b\x00\x00\x01\x00\x02\x011 | |
79 s> \xa1FstatusBok | |
80 s> \r\n | |
81 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
82 s> 5ab\r\n | |
83 s> \xa3\x05\x00\x01\x00\x02\x001 | |
84 s> \xa6Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\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\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushKcompression\x82\xa1DnameDzstd\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa5DnameHtarget-aHprotocolDhttpKsnirequired\xf4Ktlsversions\x82C1.2C1.3Duris\x81Shttp://example.com/ | |
85 s> \r\n | |
86 received frame(size=1443; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
87 s> 8\r\n | |
88 s> \x00\x00\x00\x01\x00\x02\x002 | |
89 s> \r\n | |
90 s> 0\r\n | |
91 s> \r\n | |
92 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
93 response: gen[ | |
94 { | |
95 b'commands': { | |
96 b'branchmap': { | |
97 b'args': {}, | |
98 b'permissions': [ | |
99 b'pull' | |
100 ] | |
101 }, | |
102 b'capabilities': { | |
103 b'args': {}, | |
104 b'permissions': [ | |
105 b'pull' | |
106 ] | |
107 }, | |
108 b'changesetdata': { | |
109 b'args': { | |
110 b'fields': { | |
111 b'default': set([]), | |
112 b'required': False, | |
113 b'type': b'set', | |
114 b'validvalues': set([ | |
115 b'bookmarks', | |
116 b'parents', | |
117 b'phase', | |
118 b'revision' | |
119 ]) | |
120 }, | |
121 b'noderange': { | |
122 b'default': None, | |
123 b'required': False, | |
124 b'type': b'list' | |
125 }, | |
126 b'nodes': { | |
127 b'default': None, | |
128 b'required': False, | |
129 b'type': b'list' | |
130 }, | |
131 b'nodesdepth': { | |
132 b'default': None, | |
133 b'required': False, | |
134 b'type': b'int' | |
135 } | |
136 }, | |
137 b'permissions': [ | |
138 b'pull' | |
139 ] | |
140 }, | |
141 b'filedata': { | |
142 b'args': { | |
143 b'fields': { | |
144 b'default': set([]), | |
145 b'required': False, | |
146 b'type': b'set', | |
147 b'validvalues': set([ | |
148 b'parents', | |
149 b'revision' | |
150 ]) | |
151 }, | |
152 b'haveparents': { | |
153 b'default': False, | |
154 b'required': False, | |
155 b'type': b'bool' | |
156 }, | |
157 b'nodes': { | |
158 b'required': True, | |
159 b'type': b'list' | |
160 }, | |
161 b'path': { | |
162 b'required': True, | |
163 b'type': b'bytes' | |
164 } | |
165 }, | |
166 b'permissions': [ | |
167 b'pull' | |
168 ] | |
169 }, | |
170 b'heads': { | |
171 b'args': { | |
172 b'publiconly': { | |
173 b'default': False, | |
174 b'required': False, | |
175 b'type': b'bool' | |
176 } | |
177 }, | |
178 b'permissions': [ | |
179 b'pull' | |
180 ] | |
181 }, | |
182 b'known': { | |
183 b'args': { | |
184 b'nodes': { | |
185 b'default': [], | |
186 b'required': False, | |
187 b'type': b'list' | |
188 } | |
189 }, | |
190 b'permissions': [ | |
191 b'pull' | |
192 ] | |
193 }, | |
194 b'listkeys': { | |
195 b'args': { | |
196 b'namespace': { | |
197 b'required': True, | |
198 b'type': b'bytes' | |
199 } | |
200 }, | |
201 b'permissions': [ | |
202 b'pull' | |
203 ] | |
204 }, | |
205 b'lookup': { | |
206 b'args': { | |
207 b'key': { | |
208 b'required': True, | |
209 b'type': b'bytes' | |
210 } | |
211 }, | |
212 b'permissions': [ | |
213 b'pull' | |
214 ] | |
215 }, | |
216 b'manifestdata': { | |
217 b'args': { | |
218 b'fields': { | |
219 b'default': set([]), | |
220 b'required': False, | |
221 b'type': b'set', | |
222 b'validvalues': set([ | |
223 b'parents', | |
224 b'revision' | |
225 ]) | |
226 }, | |
227 b'haveparents': { | |
228 b'default': False, | |
229 b'required': False, | |
230 b'type': b'bool' | |
231 }, | |
232 b'nodes': { | |
233 b'required': True, | |
234 b'type': b'list' | |
235 }, | |
236 b'tree': { | |
237 b'required': True, | |
238 b'type': b'bytes' | |
239 } | |
240 }, | |
241 b'permissions': [ | |
242 b'pull' | |
243 ] | |
244 }, | |
245 b'pushkey': { | |
246 b'args': { | |
247 b'key': { | |
248 b'required': True, | |
249 b'type': b'bytes' | |
250 }, | |
251 b'namespace': { | |
252 b'required': True, | |
253 b'type': b'bytes' | |
254 }, | |
255 b'new': { | |
256 b'required': True, | |
257 b'type': b'bytes' | |
258 }, | |
259 b'old': { | |
260 b'required': True, | |
261 b'type': b'bytes' | |
262 } | |
263 }, | |
264 b'permissions': [ | |
265 b'push' | |
266 ] | |
267 } | |
268 }, | |
269 b'compression': [ | |
270 { | |
271 b'name': b'zstd' | |
272 }, | |
273 { | |
274 b'name': b'zlib' | |
275 } | |
276 ], | |
277 b'framingmediatypes': [ | |
278 b'application/mercurial-exp-framing-0005' | |
279 ], | |
280 b'pathfilterprefixes': set([ | |
281 b'path:', | |
282 b'rootfilesin:' | |
283 ]), | |
284 b'rawrepoformats': [ | |
285 b'generaldelta', | |
286 b'revlogv1' | |
287 ], | |
288 b'redirect': { | |
289 b'hashes': [ | |
290 b'sha256', | |
291 b'sha1' | |
292 ], | |
293 b'targets': [ | |
294 { | |
295 b'name': b'target-a', | |
296 b'protocol': b'http', | |
297 b'snirequired': False, | |
298 b'tlsversions': [ | |
299 b'1.2', | |
300 b'1.3' | |
301 ], | |
302 b'uris': [ | |
303 b'http://example.com/' | |
304 ] | |
305 } | |
306 ] | |
307 } | |
308 } | |
309 ] | |
310 | |
311 $ cat > redirects.py << EOF | |
312 > [ | |
313 > { | |
314 > b'name': b'target-a', | |
315 > b'protocol': b'http', | |
316 > b'uris': [b'http://example.com/'], | |
317 > }, | |
318 > { | |
319 > b'name': b'target-b', | |
320 > b'protocol': b'unknown', | |
321 > b'uris': [b'unknown://example.com/'], | |
322 > }, | |
323 > ] | |
324 > EOF | |
325 | |
326 $ sendhttpv2peerhandshake << EOF | |
327 > command capabilities | |
328 > EOF | |
329 creating http peer for wire protocol version 2 | |
330 s> GET /?cmd=capabilities HTTP/1.1\r\n | |
331 s> Accept-Encoding: identity\r\n | |
332 s> vary: X-HgProto-1,X-HgUpgrade-1\r\n | |
333 s> x-hgproto-1: cbor\r\n | |
334 s> x-hgupgrade-1: exp-http-v2-0002\r\n | |
335 s> accept: application/mercurial-0.1\r\n | |
336 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
337 s> user-agent: Mercurial debugwireproto\r\n | |
338 s> \r\n | |
339 s> makefile('rb', None) | |
340 s> HTTP/1.1 200 OK\r\n | |
341 s> Server: testing stub value\r\n | |
342 s> Date: $HTTP_DATE$\r\n | |
343 s> Content-Type: application/mercurial-cbor\r\n | |
344 s> Content-Length: 1997\r\n | |
345 s> \r\n | |
346 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa6Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\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\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushKcompression\x82\xa1DnameDzstd\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/Nv1capabilitiesY\x01\xd8batch 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 | |
347 sending capabilities command | |
348 s> POST /api/exp-http-v2-0002/ro/capabilities HTTP/1.1\r\n | |
349 s> Accept-Encoding: identity\r\n | |
350 s> accept: application/mercurial-exp-framing-0005\r\n | |
351 s> content-type: application/mercurial-exp-framing-0005\r\n | |
352 s> content-length: 27\r\n | |
353 s> host: $LOCALIP:$HGPORT\r\n (glob) | |
354 s> user-agent: Mercurial debugwireproto\r\n | |
355 s> \r\n | |
356 s> \x13\x00\x00\x01\x00\x01\x01\x11\xa1DnameLcapabilities | |
357 s> makefile('rb', None) | |
358 s> HTTP/1.1 200 OK\r\n | |
359 s> Server: testing stub value\r\n | |
360 s> Date: $HTTP_DATE$\r\n | |
361 s> Content-Type: application/mercurial-exp-framing-0005\r\n | |
362 s> Transfer-Encoding: chunked\r\n | |
363 s> \r\n | |
364 s> 13\r\n | |
365 s> \x0b\x00\x00\x01\x00\x02\x011 | |
366 s> \xa1FstatusBok | |
367 s> \r\n | |
368 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation) | |
369 s> 5c6\r\n | |
370 s> \xbe\x05\x00\x01\x00\x02\x001 | |
371 s> \xa6Hcommands\xaaIbranchmap\xa2Dargs\xa0Kpermissions\x81DpullLcapabilities\xa2Dargs\xa0Kpermissions\x81DpullMchangesetdata\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x84IbookmarksGparentsEphaseHrevisionInoderange\xa3Gdefault\xf6Hrequired\xf4DtypeDlistEnodes\xa3Gdefault\xf6Hrequired\xf4DtypeDlistJnodesdepth\xa3Gdefault\xf6Hrequired\xf4DtypeCintKpermissions\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\xa2Dargs\xa4Ffields\xa4Gdefault\xd9\x01\x02\x80Hrequired\xf4DtypeCsetKvalidvalues\xd9\x01\x02\x82GparentsHrevisionKhaveparents\xa3Gdefault\xf4Hrequired\xf4DtypeDboolEnodes\xa2Hrequired\xf5DtypeDlistDtree\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpullGpushkey\xa2Dargs\xa4Ckey\xa2Hrequired\xf5DtypeEbytesInamespace\xa2Hrequired\xf5DtypeEbytesCnew\xa2Hrequired\xf5DtypeEbytesCold\xa2Hrequired\xf5DtypeEbytesKpermissions\x81DpushKcompression\x82\xa1DnameDzstd\xa1DnameDzlibQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x82\xa3DnameHtarget-aHprotocolDhttpDuris\x81Shttp://example.com/\xa3DnameHtarget-bHprotocolGunknownDuris\x81Vunknown://example.com/ | |
372 s> \r\n | |
373 received frame(size=1470; request=1; stream=2; streamflags=; type=command-response; flags=continuation) | |
374 s> 8\r\n | |
375 s> \x00\x00\x00\x01\x00\x02\x002 | |
376 s> \r\n | |
377 s> 0\r\n | |
378 s> \r\n | |
379 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) | |
380 response: gen[ | |
381 { | |
382 b'commands': { | |
383 b'branchmap': { | |
384 b'args': {}, | |
385 b'permissions': [ | |
386 b'pull' | |
387 ] | |
388 }, | |
389 b'capabilities': { | |
390 b'args': {}, | |
391 b'permissions': [ | |
392 b'pull' | |
393 ] | |
394 }, | |
395 b'changesetdata': { | |
396 b'args': { | |
397 b'fields': { | |
398 b'default': set([]), | |
399 b'required': False, | |
400 b'type': b'set', | |
401 b'validvalues': set([ | |
402 b'bookmarks', | |
403 b'parents', | |
404 b'phase', | |
405 b'revision' | |
406 ]) | |
407 }, | |
408 b'noderange': { | |
409 b'default': None, | |
410 b'required': False, | |
411 b'type': b'list' | |
412 }, | |
413 b'nodes': { | |
414 b'default': None, | |
415 b'required': False, | |
416 b'type': b'list' | |
417 }, | |
418 b'nodesdepth': { | |
419 b'default': None, | |
420 b'required': False, | |
421 b'type': b'int' | |
422 } | |
423 }, | |
424 b'permissions': [ | |
425 b'pull' | |
426 ] | |
427 }, | |
428 b'filedata': { | |
429 b'args': { | |
430 b'fields': { | |
431 b'default': set([]), | |
432 b'required': False, | |
433 b'type': b'set', | |
434 b'validvalues': set([ | |
435 b'parents', | |
436 b'revision' | |
437 ]) | |
438 }, | |
439 b'haveparents': { | |
440 b'default': False, | |
441 b'required': False, | |
442 b'type': b'bool' | |
443 }, | |
444 b'nodes': { | |
445 b'required': True, | |
446 b'type': b'list' | |
447 }, | |
448 b'path': { | |
449 b'required': True, | |
450 b'type': b'bytes' | |
451 } | |
452 }, | |
453 b'permissions': [ | |
454 b'pull' | |
455 ] | |
456 }, | |
457 b'heads': { | |
458 b'args': { | |
459 b'publiconly': { | |
460 b'default': False, | |
461 b'required': False, | |
462 b'type': b'bool' | |
463 } | |
464 }, | |
465 b'permissions': [ | |
466 b'pull' | |
467 ] | |
468 }, | |
469 b'known': { | |
470 b'args': { | |
471 b'nodes': { | |
472 b'default': [], | |
473 b'required': False, | |
474 b'type': b'list' | |
475 } | |
476 }, | |
477 b'permissions': [ | |
478 b'pull' | |
479 ] | |
480 }, | |
481 b'listkeys': { | |
482 b'args': { | |
483 b'namespace': { | |
484 b'required': True, | |
485 b'type': b'bytes' | |
486 } | |
487 }, | |
488 b'permissions': [ | |
489 b'pull' | |
490 ] | |
491 }, | |
492 b'lookup': { | |
493 b'args': { | |
494 b'key': { | |
495 b'required': True, | |
496 b'type': b'bytes' | |
497 } | |
498 }, | |
499 b'permissions': [ | |
500 b'pull' | |
501 ] | |
502 }, | |
503 b'manifestdata': { | |
504 b'args': { | |
505 b'fields': { | |
506 b'default': set([]), | |
507 b'required': False, | |
508 b'type': b'set', | |
509 b'validvalues': set([ | |
510 b'parents', | |
511 b'revision' | |
512 ]) | |
513 }, | |
514 b'haveparents': { | |
515 b'default': False, | |
516 b'required': False, | |
517 b'type': b'bool' | |
518 }, | |
519 b'nodes': { | |
520 b'required': True, | |
521 b'type': b'list' | |
522 }, | |
523 b'tree': { | |
524 b'required': True, | |
525 b'type': b'bytes' | |
526 } | |
527 }, | |
528 b'permissions': [ | |
529 b'pull' | |
530 ] | |
531 }, | |
532 b'pushkey': { | |
533 b'args': { | |
534 b'key': { | |
535 b'required': True, | |
536 b'type': b'bytes' | |
537 }, | |
538 b'namespace': { | |
539 b'required': True, | |
540 b'type': b'bytes' | |
541 }, | |
542 b'new': { | |
543 b'required': True, | |
544 b'type': b'bytes' | |
545 }, | |
546 b'old': { | |
547 b'required': True, | |
548 b'type': b'bytes' | |
549 } | |
550 }, | |
551 b'permissions': [ | |
552 b'push' | |
553 ] | |
554 } | |
555 }, | |
556 b'compression': [ | |
557 { | |
558 b'name': b'zstd' | |
559 }, | |
560 { | |
561 b'name': b'zlib' | |
562 } | |
563 ], | |
564 b'framingmediatypes': [ | |
565 b'application/mercurial-exp-framing-0005' | |
566 ], | |
567 b'pathfilterprefixes': set([ | |
568 b'path:', | |
569 b'rootfilesin:' | |
570 ]), | |
571 b'rawrepoformats': [ | |
572 b'generaldelta', | |
573 b'revlogv1' | |
574 ], | |
575 b'redirect': { | |
576 b'hashes': [ | |
577 b'sha256', | |
578 b'sha1' | |
579 ], | |
580 b'targets': [ | |
581 { | |
582 b'name': b'target-a', | |
583 b'protocol': b'http', | |
584 b'uris': [ | |
585 b'http://example.com/' | |
586 ] | |
587 }, | |
588 { | |
589 b'name': b'target-b', | |
590 b'protocol': b'unknown', | |
591 b'uris': [ | |
592 b'unknown://example.com/' | |
593 ] | |
594 } | |
595 ] | |
596 } | |
597 } | |
598 ] | |
599 | |
600 $ cat error.log | |
601 $ killdaemons.py |