##// END OF EJS Templates
tests: disable zstd in test...
Gregory Szorc -
r40159:627b0f9b default
parent child Browse files
Show More
@@ -1,1288 +1,1290
1 1 $ . $TESTDIR/wireprotohelpers.sh
2 2
3 3 $ cat >> $HGRCPATH << EOF
4 4 > [extensions]
5 5 > blackbox =
6 6 > [blackbox]
7 7 > track = simplecache
8 8 > EOF
9 9
10 10 $ hg init server
11 11 $ enablehttpv2 server
12 12 $ cd server
13 13 $ cat >> .hg/hgrc << EOF
14 > [server]
15 > compressionengines = zlib
14 16 > [extensions]
15 17 > simplecache = $TESTDIR/wireprotosimplecache.py
16 18 > [simplecache]
17 19 > cacheapi = true
18 20 > EOF
19 21
20 22 $ echo a0 > a
21 23 $ echo b0 > b
22 24 $ hg -q commit -A -m 'commit 0'
23 25 $ echo a1 > a
24 26 $ hg commit -m 'commit 1'
25 27
26 28 $ hg --debug debugindex -m
27 29 rev linkrev nodeid p1 p2
28 30 0 0 992f4779029a3df8d0666d00bb924f69634e2641 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
29 31 1 1 a988fb43583e871d1ed5750ee074c6d840bbbfc8 992f4779029a3df8d0666d00bb924f69634e2641 0000000000000000000000000000000000000000
30 32
31 33 $ hg --config simplecache.redirectsfile=redirects.py serve -p $HGPORT -d --pid-file hg.pid -E error.log
32 34 $ cat hg.pid > $DAEMON_PIDS
33 35
34 36 $ cat > redirects.py << EOF
35 37 > [
36 38 > {
37 39 > b'name': b'target-a',
38 40 > b'protocol': b'http',
39 41 > b'snirequired': False,
40 42 > b'tlsversions': [b'1.2', b'1.3'],
41 43 > b'uris': [b'http://example.com/'],
42 44 > },
43 45 > ]
44 46 > EOF
45 47
46 48 Redirect targets advertised when configured
47 49
48 50 $ sendhttpv2peerhandshake << EOF
49 51 > command capabilities
50 52 > EOF
51 53 creating http peer for wire protocol version 2
52 54 s> GET /?cmd=capabilities HTTP/1.1\r\n
53 55 s> Accept-Encoding: identity\r\n
54 56 s> vary: X-HgProto-1,X-HgUpgrade-1\r\n
55 57 s> x-hgproto-1: cbor\r\n
56 58 s> x-hgupgrade-1: exp-http-v2-0002\r\n
57 59 s> accept: application/mercurial-0.1\r\n
58 60 s> host: $LOCALIP:$HGPORT\r\n (glob)
59 61 s> user-agent: Mercurial debugwireproto\r\n
60 62 s> \r\n
61 63 s> makefile('rb', None)
62 64 s> HTTP/1.1 200 OK\r\n
63 65 s> Server: testing stub value\r\n
64 66 s> Date: $HTTP_DATE$\r\n
65 67 s> Content-Type: application/mercurial-cbor\r\n
66 s> Content-Length: 1935\r\n
68 s> Content-Length: 1930\r\n
67 69 s> \r\n
68 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa5Hcommands\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\x81DpushQframingmediatypes\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
70 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa5Hcommands\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\x81DpushQframingmediatypes\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\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
69 71 (remote redirect target target-a is compatible)
70 72 sending capabilities command
71 73 s> POST /api/exp-http-v2-0002/ro/capabilities HTTP/1.1\r\n
72 74 s> Accept-Encoding: identity\r\n
73 75 s> accept: application/mercurial-exp-framing-0005\r\n
74 76 s> content-type: application/mercurial-exp-framing-0005\r\n
75 77 s> content-length: 75\r\n
76 78 s> host: $LOCALIP:$HGPORT\r\n (glob)
77 79 s> user-agent: Mercurial debugwireproto\r\n
78 80 s> \r\n
79 81 s> C\x00\x00\x01\x00\x01\x01\x11\xa2DnameLcapabilitiesHredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81Htarget-a
80 82 s> makefile('rb', None)
81 83 s> HTTP/1.1 200 OK\r\n
82 84 s> Server: testing stub value\r\n
83 85 s> Date: $HTTP_DATE$\r\n
84 86 s> Content-Type: application/mercurial-exp-framing-0005\r\n
85 87 s> Transfer-Encoding: chunked\r\n
86 88 s> \r\n
87 89 s> 13\r\n
88 90 s> \x0b\x00\x00\x01\x00\x02\x011
89 91 s> \xa1FstatusBok
90 92 s> \r\n
91 93 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
92 94 s> 588\r\n
93 95 s> \x80\x05\x00\x01\x00\x02\x001
94 96 s> \xa5Hcommands\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\x81DpushQframingmediatypes\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/
95 97 s> \r\n
96 98 received frame(size=1408; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
97 99 s> 8\r\n
98 100 s> \x00\x00\x00\x01\x00\x02\x002
99 101 s> \r\n
100 102 s> 0\r\n
101 103 s> \r\n
102 104 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
103 105 response: gen[
104 106 {
105 107 b'commands': {
106 108 b'branchmap': {
107 109 b'args': {},
108 110 b'permissions': [
109 111 b'pull'
110 112 ]
111 113 },
112 114 b'capabilities': {
113 115 b'args': {},
114 116 b'permissions': [
115 117 b'pull'
116 118 ]
117 119 },
118 120 b'changesetdata': {
119 121 b'args': {
120 122 b'fields': {
121 123 b'default': set([]),
122 124 b'required': False,
123 125 b'type': b'set',
124 126 b'validvalues': set([
125 127 b'bookmarks',
126 128 b'parents',
127 129 b'phase',
128 130 b'revision'
129 131 ])
130 132 },
131 133 b'noderange': {
132 134 b'default': None,
133 135 b'required': False,
134 136 b'type': b'list'
135 137 },
136 138 b'nodes': {
137 139 b'default': None,
138 140 b'required': False,
139 141 b'type': b'list'
140 142 },
141 143 b'nodesdepth': {
142 144 b'default': None,
143 145 b'required': False,
144 146 b'type': b'int'
145 147 }
146 148 },
147 149 b'permissions': [
148 150 b'pull'
149 151 ]
150 152 },
151 153 b'filedata': {
152 154 b'args': {
153 155 b'fields': {
154 156 b'default': set([]),
155 157 b'required': False,
156 158 b'type': b'set',
157 159 b'validvalues': set([
158 160 b'parents',
159 161 b'revision'
160 162 ])
161 163 },
162 164 b'haveparents': {
163 165 b'default': False,
164 166 b'required': False,
165 167 b'type': b'bool'
166 168 },
167 169 b'nodes': {
168 170 b'required': True,
169 171 b'type': b'list'
170 172 },
171 173 b'path': {
172 174 b'required': True,
173 175 b'type': b'bytes'
174 176 }
175 177 },
176 178 b'permissions': [
177 179 b'pull'
178 180 ]
179 181 },
180 182 b'heads': {
181 183 b'args': {
182 184 b'publiconly': {
183 185 b'default': False,
184 186 b'required': False,
185 187 b'type': b'bool'
186 188 }
187 189 },
188 190 b'permissions': [
189 191 b'pull'
190 192 ]
191 193 },
192 194 b'known': {
193 195 b'args': {
194 196 b'nodes': {
195 197 b'default': [],
196 198 b'required': False,
197 199 b'type': b'list'
198 200 }
199 201 },
200 202 b'permissions': [
201 203 b'pull'
202 204 ]
203 205 },
204 206 b'listkeys': {
205 207 b'args': {
206 208 b'namespace': {
207 209 b'required': True,
208 210 b'type': b'bytes'
209 211 }
210 212 },
211 213 b'permissions': [
212 214 b'pull'
213 215 ]
214 216 },
215 217 b'lookup': {
216 218 b'args': {
217 219 b'key': {
218 220 b'required': True,
219 221 b'type': b'bytes'
220 222 }
221 223 },
222 224 b'permissions': [
223 225 b'pull'
224 226 ]
225 227 },
226 228 b'manifestdata': {
227 229 b'args': {
228 230 b'fields': {
229 231 b'default': set([]),
230 232 b'required': False,
231 233 b'type': b'set',
232 234 b'validvalues': set([
233 235 b'parents',
234 236 b'revision'
235 237 ])
236 238 },
237 239 b'haveparents': {
238 240 b'default': False,
239 241 b'required': False,
240 242 b'type': b'bool'
241 243 },
242 244 b'nodes': {
243 245 b'required': True,
244 246 b'type': b'list'
245 247 },
246 248 b'tree': {
247 249 b'required': True,
248 250 b'type': b'bytes'
249 251 }
250 252 },
251 253 b'permissions': [
252 254 b'pull'
253 255 ]
254 256 },
255 257 b'pushkey': {
256 258 b'args': {
257 259 b'key': {
258 260 b'required': True,
259 261 b'type': b'bytes'
260 262 },
261 263 b'namespace': {
262 264 b'required': True,
263 265 b'type': b'bytes'
264 266 },
265 267 b'new': {
266 268 b'required': True,
267 269 b'type': b'bytes'
268 270 },
269 271 b'old': {
270 272 b'required': True,
271 273 b'type': b'bytes'
272 274 }
273 275 },
274 276 b'permissions': [
275 277 b'push'
276 278 ]
277 279 }
278 280 },
279 281 b'framingmediatypes': [
280 282 b'application/mercurial-exp-framing-0005'
281 283 ],
282 284 b'pathfilterprefixes': set([
283 285 b'path:',
284 286 b'rootfilesin:'
285 287 ]),
286 288 b'rawrepoformats': [
287 289 b'generaldelta',
288 290 b'revlogv1'
289 291 ],
290 292 b'redirect': {
291 293 b'hashes': [
292 294 b'sha256',
293 295 b'sha1'
294 296 ],
295 297 b'targets': [
296 298 {
297 299 b'name': b'target-a',
298 300 b'protocol': b'http',
299 301 b'snirequired': False,
300 302 b'tlsversions': [
301 303 b'1.2',
302 304 b'1.3'
303 305 ],
304 306 b'uris': [
305 307 b'http://example.com/'
306 308 ]
307 309 }
308 310 ]
309 311 }
310 312 }
311 313 ]
312 314 (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob)
313 315
314 316 Unknown protocol is filtered from compatible targets
315 317
316 318 $ cat > redirects.py << EOF
317 319 > [
318 320 > {
319 321 > b'name': b'target-a',
320 322 > b'protocol': b'http',
321 323 > b'uris': [b'http://example.com/'],
322 324 > },
323 325 > {
324 326 > b'name': b'target-b',
325 327 > b'protocol': b'unknown',
326 328 > b'uris': [b'unknown://example.com/'],
327 329 > },
328 330 > ]
329 331 > EOF
330 332
331 333 $ sendhttpv2peerhandshake << EOF
332 334 > command capabilities
333 335 > EOF
334 336 creating http peer for wire protocol version 2
335 337 s> GET /?cmd=capabilities HTTP/1.1\r\n
336 338 s> Accept-Encoding: identity\r\n
337 339 s> vary: X-HgProto-1,X-HgUpgrade-1\r\n
338 340 s> x-hgproto-1: cbor\r\n
339 341 s> x-hgupgrade-1: exp-http-v2-0002\r\n
340 342 s> accept: application/mercurial-0.1\r\n
341 343 s> host: $LOCALIP:$HGPORT\r\n (glob)
342 344 s> user-agent: Mercurial debugwireproto\r\n
343 345 s> \r\n
344 346 s> makefile('rb', None)
345 347 s> HTTP/1.1 200 OK\r\n
346 348 s> Server: testing stub value\r\n
347 349 s> Date: $HTTP_DATE$\r\n
348 350 s> Content-Type: application/mercurial-cbor\r\n
349 s> Content-Length: 1962\r\n
351 s> Content-Length: 1957\r\n
350 352 s> \r\n
351 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa5Hcommands\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\x81DpushQframingmediatypes\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
353 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa5Hcommands\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\x81DpushQframingmediatypes\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\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
352 354 (remote redirect target target-a is compatible)
353 355 (remote redirect target target-b uses unsupported protocol: unknown)
354 356 sending capabilities command
355 357 s> POST /api/exp-http-v2-0002/ro/capabilities HTTP/1.1\r\n
356 358 s> Accept-Encoding: identity\r\n
357 359 s> accept: application/mercurial-exp-framing-0005\r\n
358 360 s> content-type: application/mercurial-exp-framing-0005\r\n
359 361 s> content-length: 75\r\n
360 362 s> host: $LOCALIP:$HGPORT\r\n (glob)
361 363 s> user-agent: Mercurial debugwireproto\r\n
362 364 s> \r\n
363 365 s> C\x00\x00\x01\x00\x01\x01\x11\xa2DnameLcapabilitiesHredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81Htarget-a
364 366 s> makefile('rb', None)
365 367 s> HTTP/1.1 200 OK\r\n
366 368 s> Server: testing stub value\r\n
367 369 s> Date: $HTTP_DATE$\r\n
368 370 s> Content-Type: application/mercurial-exp-framing-0005\r\n
369 371 s> Transfer-Encoding: chunked\r\n
370 372 s> \r\n
371 373 s> 13\r\n
372 374 s> \x0b\x00\x00\x01\x00\x02\x011
373 375 s> \xa1FstatusBok
374 376 s> \r\n
375 377 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
376 378 s> 5a3\r\n
377 379 s> \x9b\x05\x00\x01\x00\x02\x001
378 380 s> \xa5Hcommands\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\x81DpushQframingmediatypes\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/
379 381 s> \r\n
380 382 received frame(size=1435; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
381 383 s> 8\r\n
382 384 s> \x00\x00\x00\x01\x00\x02\x002
383 385 s> \r\n
384 386 s> 0\r\n
385 387 s> \r\n
386 388 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
387 389 response: gen[
388 390 {
389 391 b'commands': {
390 392 b'branchmap': {
391 393 b'args': {},
392 394 b'permissions': [
393 395 b'pull'
394 396 ]
395 397 },
396 398 b'capabilities': {
397 399 b'args': {},
398 400 b'permissions': [
399 401 b'pull'
400 402 ]
401 403 },
402 404 b'changesetdata': {
403 405 b'args': {
404 406 b'fields': {
405 407 b'default': set([]),
406 408 b'required': False,
407 409 b'type': b'set',
408 410 b'validvalues': set([
409 411 b'bookmarks',
410 412 b'parents',
411 413 b'phase',
412 414 b'revision'
413 415 ])
414 416 },
415 417 b'noderange': {
416 418 b'default': None,
417 419 b'required': False,
418 420 b'type': b'list'
419 421 },
420 422 b'nodes': {
421 423 b'default': None,
422 424 b'required': False,
423 425 b'type': b'list'
424 426 },
425 427 b'nodesdepth': {
426 428 b'default': None,
427 429 b'required': False,
428 430 b'type': b'int'
429 431 }
430 432 },
431 433 b'permissions': [
432 434 b'pull'
433 435 ]
434 436 },
435 437 b'filedata': {
436 438 b'args': {
437 439 b'fields': {
438 440 b'default': set([]),
439 441 b'required': False,
440 442 b'type': b'set',
441 443 b'validvalues': set([
442 444 b'parents',
443 445 b'revision'
444 446 ])
445 447 },
446 448 b'haveparents': {
447 449 b'default': False,
448 450 b'required': False,
449 451 b'type': b'bool'
450 452 },
451 453 b'nodes': {
452 454 b'required': True,
453 455 b'type': b'list'
454 456 },
455 457 b'path': {
456 458 b'required': True,
457 459 b'type': b'bytes'
458 460 }
459 461 },
460 462 b'permissions': [
461 463 b'pull'
462 464 ]
463 465 },
464 466 b'heads': {
465 467 b'args': {
466 468 b'publiconly': {
467 469 b'default': False,
468 470 b'required': False,
469 471 b'type': b'bool'
470 472 }
471 473 },
472 474 b'permissions': [
473 475 b'pull'
474 476 ]
475 477 },
476 478 b'known': {
477 479 b'args': {
478 480 b'nodes': {
479 481 b'default': [],
480 482 b'required': False,
481 483 b'type': b'list'
482 484 }
483 485 },
484 486 b'permissions': [
485 487 b'pull'
486 488 ]
487 489 },
488 490 b'listkeys': {
489 491 b'args': {
490 492 b'namespace': {
491 493 b'required': True,
492 494 b'type': b'bytes'
493 495 }
494 496 },
495 497 b'permissions': [
496 498 b'pull'
497 499 ]
498 500 },
499 501 b'lookup': {
500 502 b'args': {
501 503 b'key': {
502 504 b'required': True,
503 505 b'type': b'bytes'
504 506 }
505 507 },
506 508 b'permissions': [
507 509 b'pull'
508 510 ]
509 511 },
510 512 b'manifestdata': {
511 513 b'args': {
512 514 b'fields': {
513 515 b'default': set([]),
514 516 b'required': False,
515 517 b'type': b'set',
516 518 b'validvalues': set([
517 519 b'parents',
518 520 b'revision'
519 521 ])
520 522 },
521 523 b'haveparents': {
522 524 b'default': False,
523 525 b'required': False,
524 526 b'type': b'bool'
525 527 },
526 528 b'nodes': {
527 529 b'required': True,
528 530 b'type': b'list'
529 531 },
530 532 b'tree': {
531 533 b'required': True,
532 534 b'type': b'bytes'
533 535 }
534 536 },
535 537 b'permissions': [
536 538 b'pull'
537 539 ]
538 540 },
539 541 b'pushkey': {
540 542 b'args': {
541 543 b'key': {
542 544 b'required': True,
543 545 b'type': b'bytes'
544 546 },
545 547 b'namespace': {
546 548 b'required': True,
547 549 b'type': b'bytes'
548 550 },
549 551 b'new': {
550 552 b'required': True,
551 553 b'type': b'bytes'
552 554 },
553 555 b'old': {
554 556 b'required': True,
555 557 b'type': b'bytes'
556 558 }
557 559 },
558 560 b'permissions': [
559 561 b'push'
560 562 ]
561 563 }
562 564 },
563 565 b'framingmediatypes': [
564 566 b'application/mercurial-exp-framing-0005'
565 567 ],
566 568 b'pathfilterprefixes': set([
567 569 b'path:',
568 570 b'rootfilesin:'
569 571 ]),
570 572 b'rawrepoformats': [
571 573 b'generaldelta',
572 574 b'revlogv1'
573 575 ],
574 576 b'redirect': {
575 577 b'hashes': [
576 578 b'sha256',
577 579 b'sha1'
578 580 ],
579 581 b'targets': [
580 582 {
581 583 b'name': b'target-a',
582 584 b'protocol': b'http',
583 585 b'uris': [
584 586 b'http://example.com/'
585 587 ]
586 588 },
587 589 {
588 590 b'name': b'target-b',
589 591 b'protocol': b'unknown',
590 592 b'uris': [
591 593 b'unknown://example.com/'
592 594 ]
593 595 }
594 596 ]
595 597 }
596 598 }
597 599 ]
598 600 (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob)
599 601
600 602 Missing SNI support filters targets that require SNI
601 603
602 604 $ cat > nosni.py << EOF
603 605 > from mercurial import sslutil
604 606 > sslutil.hassni = False
605 607 > EOF
606 608 $ cat >> $HGRCPATH << EOF
607 609 > [extensions]
608 610 > nosni=`pwd`/nosni.py
609 611 > EOF
610 612
611 613 $ cat > redirects.py << EOF
612 614 > [
613 615 > {
614 616 > b'name': b'target-bad-tls',
615 617 > b'protocol': b'https',
616 618 > b'uris': [b'https://example.com/'],
617 619 > b'snirequired': True,
618 620 > },
619 621 > ]
620 622 > EOF
621 623
622 624 $ sendhttpv2peerhandshake << EOF
623 625 > command capabilities
624 626 > EOF
625 627 creating http peer for wire protocol version 2
626 628 s> GET /?cmd=capabilities HTTP/1.1\r\n
627 629 s> Accept-Encoding: identity\r\n
628 630 s> vary: X-HgProto-1,X-HgUpgrade-1\r\n
629 631 s> x-hgproto-1: cbor\r\n
630 632 s> x-hgupgrade-1: exp-http-v2-0002\r\n
631 633 s> accept: application/mercurial-0.1\r\n
632 634 s> host: $LOCALIP:$HGPORT\r\n (glob)
633 635 s> user-agent: Mercurial debugwireproto\r\n
634 636 s> \r\n
635 637 s> makefile('rb', None)
636 638 s> HTTP/1.1 200 OK\r\n
637 639 s> Server: testing stub value\r\n
638 640 s> Date: $HTTP_DATE$\r\n
639 641 s> Content-Type: application/mercurial-cbor\r\n
640 s> Content-Length: 1922\r\n
642 s> Content-Length: 1917\r\n
641 643 s> \r\n
642 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKsnirequired\xf5Duris\x81Thttps://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
644 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\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
643 645 (redirect target target-bad-tls requires SNI, which is unsupported)
644 646 sending capabilities command
645 647 s> POST /api/exp-http-v2-0002/ro/capabilities HTTP/1.1\r\n
646 648 s> Accept-Encoding: identity\r\n
647 649 s> accept: application/mercurial-exp-framing-0005\r\n
648 650 s> content-type: application/mercurial-exp-framing-0005\r\n
649 651 s> content-length: 66\r\n
650 652 s> host: $LOCALIP:$HGPORT\r\n (glob)
651 653 s> user-agent: Mercurial debugwireproto\r\n
652 654 s> \r\n
653 655 s> :\x00\x00\x01\x00\x01\x01\x11\xa2DnameLcapabilitiesHredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x80
654 656 s> makefile('rb', None)
655 657 s> HTTP/1.1 200 OK\r\n
656 658 s> Server: testing stub value\r\n
657 659 s> Date: $HTTP_DATE$\r\n
658 660 s> Content-Type: application/mercurial-exp-framing-0005\r\n
659 661 s> Transfer-Encoding: chunked\r\n
660 662 s> \r\n
661 663 s> 13\r\n
662 664 s> \x0b\x00\x00\x01\x00\x02\x011
663 665 s> \xa1FstatusBok
664 666 s> \r\n
665 667 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
666 668 s> 57b\r\n
667 669 s> s\x05\x00\x01\x00\x02\x001
668 670 s> \xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKsnirequired\xf5Duris\x81Thttps://example.com/
669 671 s> \r\n
670 672 received frame(size=1395; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
671 673 s> 8\r\n
672 674 s> \x00\x00\x00\x01\x00\x02\x002
673 675 s> \r\n
674 676 s> 0\r\n
675 677 s> \r\n
676 678 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
677 679 response: gen[
678 680 {
679 681 b'commands': {
680 682 b'branchmap': {
681 683 b'args': {},
682 684 b'permissions': [
683 685 b'pull'
684 686 ]
685 687 },
686 688 b'capabilities': {
687 689 b'args': {},
688 690 b'permissions': [
689 691 b'pull'
690 692 ]
691 693 },
692 694 b'changesetdata': {
693 695 b'args': {
694 696 b'fields': {
695 697 b'default': set([]),
696 698 b'required': False,
697 699 b'type': b'set',
698 700 b'validvalues': set([
699 701 b'bookmarks',
700 702 b'parents',
701 703 b'phase',
702 704 b'revision'
703 705 ])
704 706 },
705 707 b'noderange': {
706 708 b'default': None,
707 709 b'required': False,
708 710 b'type': b'list'
709 711 },
710 712 b'nodes': {
711 713 b'default': None,
712 714 b'required': False,
713 715 b'type': b'list'
714 716 },
715 717 b'nodesdepth': {
716 718 b'default': None,
717 719 b'required': False,
718 720 b'type': b'int'
719 721 }
720 722 },
721 723 b'permissions': [
722 724 b'pull'
723 725 ]
724 726 },
725 727 b'filedata': {
726 728 b'args': {
727 729 b'fields': {
728 730 b'default': set([]),
729 731 b'required': False,
730 732 b'type': b'set',
731 733 b'validvalues': set([
732 734 b'parents',
733 735 b'revision'
734 736 ])
735 737 },
736 738 b'haveparents': {
737 739 b'default': False,
738 740 b'required': False,
739 741 b'type': b'bool'
740 742 },
741 743 b'nodes': {
742 744 b'required': True,
743 745 b'type': b'list'
744 746 },
745 747 b'path': {
746 748 b'required': True,
747 749 b'type': b'bytes'
748 750 }
749 751 },
750 752 b'permissions': [
751 753 b'pull'
752 754 ]
753 755 },
754 756 b'heads': {
755 757 b'args': {
756 758 b'publiconly': {
757 759 b'default': False,
758 760 b'required': False,
759 761 b'type': b'bool'
760 762 }
761 763 },
762 764 b'permissions': [
763 765 b'pull'
764 766 ]
765 767 },
766 768 b'known': {
767 769 b'args': {
768 770 b'nodes': {
769 771 b'default': [],
770 772 b'required': False,
771 773 b'type': b'list'
772 774 }
773 775 },
774 776 b'permissions': [
775 777 b'pull'
776 778 ]
777 779 },
778 780 b'listkeys': {
779 781 b'args': {
780 782 b'namespace': {
781 783 b'required': True,
782 784 b'type': b'bytes'
783 785 }
784 786 },
785 787 b'permissions': [
786 788 b'pull'
787 789 ]
788 790 },
789 791 b'lookup': {
790 792 b'args': {
791 793 b'key': {
792 794 b'required': True,
793 795 b'type': b'bytes'
794 796 }
795 797 },
796 798 b'permissions': [
797 799 b'pull'
798 800 ]
799 801 },
800 802 b'manifestdata': {
801 803 b'args': {
802 804 b'fields': {
803 805 b'default': set([]),
804 806 b'required': False,
805 807 b'type': b'set',
806 808 b'validvalues': set([
807 809 b'parents',
808 810 b'revision'
809 811 ])
810 812 },
811 813 b'haveparents': {
812 814 b'default': False,
813 815 b'required': False,
814 816 b'type': b'bool'
815 817 },
816 818 b'nodes': {
817 819 b'required': True,
818 820 b'type': b'list'
819 821 },
820 822 b'tree': {
821 823 b'required': True,
822 824 b'type': b'bytes'
823 825 }
824 826 },
825 827 b'permissions': [
826 828 b'pull'
827 829 ]
828 830 },
829 831 b'pushkey': {
830 832 b'args': {
831 833 b'key': {
832 834 b'required': True,
833 835 b'type': b'bytes'
834 836 },
835 837 b'namespace': {
836 838 b'required': True,
837 839 b'type': b'bytes'
838 840 },
839 841 b'new': {
840 842 b'required': True,
841 843 b'type': b'bytes'
842 844 },
843 845 b'old': {
844 846 b'required': True,
845 847 b'type': b'bytes'
846 848 }
847 849 },
848 850 b'permissions': [
849 851 b'push'
850 852 ]
851 853 }
852 854 },
853 855 b'framingmediatypes': [
854 856 b'application/mercurial-exp-framing-0005'
855 857 ],
856 858 b'pathfilterprefixes': set([
857 859 b'path:',
858 860 b'rootfilesin:'
859 861 ]),
860 862 b'rawrepoformats': [
861 863 b'generaldelta',
862 864 b'revlogv1'
863 865 ],
864 866 b'redirect': {
865 867 b'hashes': [
866 868 b'sha256',
867 869 b'sha1'
868 870 ],
869 871 b'targets': [
870 872 {
871 873 b'name': b'target-bad-tls',
872 874 b'protocol': b'https',
873 875 b'snirequired': True,
874 876 b'uris': [
875 877 b'https://example.com/'
876 878 ]
877 879 }
878 880 ]
879 881 }
880 882 }
881 883 ]
882 884 (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob)
883 885
884 886 $ cat >> $HGRCPATH << EOF
885 887 > [extensions]
886 888 > nosni=!
887 889 > EOF
888 890
889 891 Unknown tls value is filtered from compatible targets
890 892
891 893 $ cat > redirects.py << EOF
892 894 > [
893 895 > {
894 896 > b'name': b'target-bad-tls',
895 897 > b'protocol': b'https',
896 898 > b'uris': [b'https://example.com/'],
897 899 > b'tlsversions': [b'42', b'39'],
898 900 > },
899 901 > ]
900 902 > EOF
901 903
902 904 $ sendhttpv2peerhandshake << EOF
903 905 > command capabilities
904 906 > EOF
905 907 creating http peer for wire protocol version 2
906 908 s> GET /?cmd=capabilities HTTP/1.1\r\n
907 909 s> Accept-Encoding: identity\r\n
908 910 s> vary: X-HgProto-1,X-HgUpgrade-1\r\n
909 911 s> x-hgproto-1: cbor\r\n
910 912 s> x-hgupgrade-1: exp-http-v2-0002\r\n
911 913 s> accept: application/mercurial-0.1\r\n
912 914 s> host: $LOCALIP:$HGPORT\r\n (glob)
913 915 s> user-agent: Mercurial debugwireproto\r\n
914 916 s> \r\n
915 917 s> makefile('rb', None)
916 918 s> HTTP/1.1 200 OK\r\n
917 919 s> Server: testing stub value\r\n
918 920 s> Date: $HTTP_DATE$\r\n
919 921 s> Content-Type: application/mercurial-cbor\r\n
920 s> Content-Length: 1928\r\n
922 s> Content-Length: 1923\r\n
921 923 s> \r\n
922 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKtlsversions\x82B42B39Duris\x81Thttps://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
924 s> \xa3GapibaseDapi/Dapis\xa1Pexp-http-v2-0002\xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\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
923 925 (remote redirect target target-bad-tls requires unsupported TLS versions: 39, 42)
924 926 sending capabilities command
925 927 s> POST /api/exp-http-v2-0002/ro/capabilities HTTP/1.1\r\n
926 928 s> Accept-Encoding: identity\r\n
927 929 s> accept: application/mercurial-exp-framing-0005\r\n
928 930 s> content-type: application/mercurial-exp-framing-0005\r\n
929 931 s> content-length: 66\r\n
930 932 s> host: $LOCALIP:$HGPORT\r\n (glob)
931 933 s> user-agent: Mercurial debugwireproto\r\n
932 934 s> \r\n
933 935 s> :\x00\x00\x01\x00\x01\x01\x11\xa2DnameLcapabilitiesHredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x80
934 936 s> makefile('rb', None)
935 937 s> HTTP/1.1 200 OK\r\n
936 938 s> Server: testing stub value\r\n
937 939 s> Date: $HTTP_DATE$\r\n
938 940 s> Content-Type: application/mercurial-exp-framing-0005\r\n
939 941 s> Transfer-Encoding: chunked\r\n
940 942 s> \r\n
941 943 s> 13\r\n
942 944 s> \x0b\x00\x00\x01\x00\x02\x011
943 945 s> \xa1FstatusBok
944 946 s> \r\n
945 947 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
946 948 s> 581\r\n
947 949 s> y\x05\x00\x01\x00\x02\x001
948 950 s> \xa5Hcommands\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\x81DpushQframingmediatypes\x81X&application/mercurial-exp-framing-0005Rpathfilterprefixes\xd9\x01\x02\x82Epath:Lrootfilesin:Nrawrepoformats\x82LgeneraldeltaHrevlogv1Hredirect\xa2Fhashes\x82Fsha256Dsha1Gtargets\x81\xa4DnameNtarget-bad-tlsHprotocolEhttpsKtlsversions\x82B42B39Duris\x81Thttps://example.com/
949 951 s> \r\n
950 952 received frame(size=1401; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
951 953 s> 8\r\n
952 954 s> \x00\x00\x00\x01\x00\x02\x002
953 955 s> \r\n
954 956 s> 0\r\n
955 957 s> \r\n
956 958 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
957 959 response: gen[
958 960 {
959 961 b'commands': {
960 962 b'branchmap': {
961 963 b'args': {},
962 964 b'permissions': [
963 965 b'pull'
964 966 ]
965 967 },
966 968 b'capabilities': {
967 969 b'args': {},
968 970 b'permissions': [
969 971 b'pull'
970 972 ]
971 973 },
972 974 b'changesetdata': {
973 975 b'args': {
974 976 b'fields': {
975 977 b'default': set([]),
976 978 b'required': False,
977 979 b'type': b'set',
978 980 b'validvalues': set([
979 981 b'bookmarks',
980 982 b'parents',
981 983 b'phase',
982 984 b'revision'
983 985 ])
984 986 },
985 987 b'noderange': {
986 988 b'default': None,
987 989 b'required': False,
988 990 b'type': b'list'
989 991 },
990 992 b'nodes': {
991 993 b'default': None,
992 994 b'required': False,
993 995 b'type': b'list'
994 996 },
995 997 b'nodesdepth': {
996 998 b'default': None,
997 999 b'required': False,
998 1000 b'type': b'int'
999 1001 }
1000 1002 },
1001 1003 b'permissions': [
1002 1004 b'pull'
1003 1005 ]
1004 1006 },
1005 1007 b'filedata': {
1006 1008 b'args': {
1007 1009 b'fields': {
1008 1010 b'default': set([]),
1009 1011 b'required': False,
1010 1012 b'type': b'set',
1011 1013 b'validvalues': set([
1012 1014 b'parents',
1013 1015 b'revision'
1014 1016 ])
1015 1017 },
1016 1018 b'haveparents': {
1017 1019 b'default': False,
1018 1020 b'required': False,
1019 1021 b'type': b'bool'
1020 1022 },
1021 1023 b'nodes': {
1022 1024 b'required': True,
1023 1025 b'type': b'list'
1024 1026 },
1025 1027 b'path': {
1026 1028 b'required': True,
1027 1029 b'type': b'bytes'
1028 1030 }
1029 1031 },
1030 1032 b'permissions': [
1031 1033 b'pull'
1032 1034 ]
1033 1035 },
1034 1036 b'heads': {
1035 1037 b'args': {
1036 1038 b'publiconly': {
1037 1039 b'default': False,
1038 1040 b'required': False,
1039 1041 b'type': b'bool'
1040 1042 }
1041 1043 },
1042 1044 b'permissions': [
1043 1045 b'pull'
1044 1046 ]
1045 1047 },
1046 1048 b'known': {
1047 1049 b'args': {
1048 1050 b'nodes': {
1049 1051 b'default': [],
1050 1052 b'required': False,
1051 1053 b'type': b'list'
1052 1054 }
1053 1055 },
1054 1056 b'permissions': [
1055 1057 b'pull'
1056 1058 ]
1057 1059 },
1058 1060 b'listkeys': {
1059 1061 b'args': {
1060 1062 b'namespace': {
1061 1063 b'required': True,
1062 1064 b'type': b'bytes'
1063 1065 }
1064 1066 },
1065 1067 b'permissions': [
1066 1068 b'pull'
1067 1069 ]
1068 1070 },
1069 1071 b'lookup': {
1070 1072 b'args': {
1071 1073 b'key': {
1072 1074 b'required': True,
1073 1075 b'type': b'bytes'
1074 1076 }
1075 1077 },
1076 1078 b'permissions': [
1077 1079 b'pull'
1078 1080 ]
1079 1081 },
1080 1082 b'manifestdata': {
1081 1083 b'args': {
1082 1084 b'fields': {
1083 1085 b'default': set([]),
1084 1086 b'required': False,
1085 1087 b'type': b'set',
1086 1088 b'validvalues': set([
1087 1089 b'parents',
1088 1090 b'revision'
1089 1091 ])
1090 1092 },
1091 1093 b'haveparents': {
1092 1094 b'default': False,
1093 1095 b'required': False,
1094 1096 b'type': b'bool'
1095 1097 },
1096 1098 b'nodes': {
1097 1099 b'required': True,
1098 1100 b'type': b'list'
1099 1101 },
1100 1102 b'tree': {
1101 1103 b'required': True,
1102 1104 b'type': b'bytes'
1103 1105 }
1104 1106 },
1105 1107 b'permissions': [
1106 1108 b'pull'
1107 1109 ]
1108 1110 },
1109 1111 b'pushkey': {
1110 1112 b'args': {
1111 1113 b'key': {
1112 1114 b'required': True,
1113 1115 b'type': b'bytes'
1114 1116 },
1115 1117 b'namespace': {
1116 1118 b'required': True,
1117 1119 b'type': b'bytes'
1118 1120 },
1119 1121 b'new': {
1120 1122 b'required': True,
1121 1123 b'type': b'bytes'
1122 1124 },
1123 1125 b'old': {
1124 1126 b'required': True,
1125 1127 b'type': b'bytes'
1126 1128 }
1127 1129 },
1128 1130 b'permissions': [
1129 1131 b'push'
1130 1132 ]
1131 1133 }
1132 1134 },
1133 1135 b'framingmediatypes': [
1134 1136 b'application/mercurial-exp-framing-0005'
1135 1137 ],
1136 1138 b'pathfilterprefixes': set([
1137 1139 b'path:',
1138 1140 b'rootfilesin:'
1139 1141 ]),
1140 1142 b'rawrepoformats': [
1141 1143 b'generaldelta',
1142 1144 b'revlogv1'
1143 1145 ],
1144 1146 b'redirect': {
1145 1147 b'hashes': [
1146 1148 b'sha256',
1147 1149 b'sha1'
1148 1150 ],
1149 1151 b'targets': [
1150 1152 {
1151 1153 b'name': b'target-bad-tls',
1152 1154 b'protocol': b'https',
1153 1155 b'tlsversions': [
1154 1156 b'42',
1155 1157 b'39'
1156 1158 ],
1157 1159 b'uris': [
1158 1160 b'https://example.com/'
1159 1161 ]
1160 1162 }
1161 1163 ]
1162 1164 }
1163 1165 }
1164 1166 ]
1165 1167 (sent 2 HTTP requests and * bytes; received * bytes in responses) (glob)
1166 1168
1167 1169 Set up the server to issue content redirects to its built-in API server.
1168 1170
1169 1171 $ cat > redirects.py << EOF
1170 1172 > [
1171 1173 > {
1172 1174 > b'name': b'local',
1173 1175 > b'protocol': b'http',
1174 1176 > b'uris': [b'http://example.com/'],
1175 1177 > },
1176 1178 > ]
1177 1179 > EOF
1178 1180
1179 1181 Request to eventual cache URL should return 404 (validating the cache server works)
1180 1182
1181 1183 $ sendhttpraw << EOF
1182 1184 > httprequest GET api/simplecache/missingkey
1183 1185 > user-agent: test
1184 1186 > EOF
1185 1187 using raw connection to peer
1186 1188 s> GET /api/simplecache/missingkey HTTP/1.1\r\n
1187 1189 s> Accept-Encoding: identity\r\n
1188 1190 s> user-agent: test\r\n
1189 1191 s> host: $LOCALIP:$HGPORT\r\n (glob)
1190 1192 s> \r\n
1191 1193 s> makefile('rb', None)
1192 1194 s> HTTP/1.1 404 Not Found\r\n
1193 1195 s> Server: testing stub value\r\n
1194 1196 s> Date: $HTTP_DATE$\r\n
1195 1197 s> Content-Type: text/plain\r\n
1196 1198 s> Content-Length: 22\r\n
1197 1199 s> \r\n
1198 1200 s> key not found in cache
1199 1201
1200 1202 Send a cacheable request
1201 1203
1202 1204 $ sendhttpv2peer << EOF
1203 1205 > command manifestdata
1204 1206 > nodes eval:[b'\x99\x2f\x47\x79\x02\x9a\x3d\xf8\xd0\x66\x6d\x00\xbb\x92\x4f\x69\x63\x4e\x26\x41']
1205 1207 > tree eval:b''
1206 1208 > fields eval:[b'parents']
1207 1209 > EOF
1208 1210 creating http peer for wire protocol version 2
1209 1211 sending manifestdata command
1210 1212 response: gen[
1211 1213 {
1212 1214 b'totalitems': 1
1213 1215 },
1214 1216 {
1215 1217 b'node': b'\x99/Gy\x02\x9a=\xf8\xd0fm\x00\xbb\x92OicN&A',
1216 1218 b'parents': [
1217 1219 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
1218 1220 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
1219 1221 ]
1220 1222 }
1221 1223 ]
1222 1224
1223 1225 Cached entry should be available on server
1224 1226
1225 1227 $ sendhttpraw << EOF
1226 1228 > httprequest GET api/simplecache/c045a581599d58608efd3d93d8129841f2af04a0
1227 1229 > user-agent: test
1228 1230 > EOF
1229 1231 using raw connection to peer
1230 1232 s> GET /api/simplecache/c045a581599d58608efd3d93d8129841f2af04a0 HTTP/1.1\r\n
1231 1233 s> Accept-Encoding: identity\r\n
1232 1234 s> user-agent: test\r\n
1233 1235 s> host: $LOCALIP:$HGPORT\r\n (glob)
1234 1236 s> \r\n
1235 1237 s> makefile('rb', None)
1236 1238 s> HTTP/1.1 200 OK\r\n
1237 1239 s> Server: testing stub value\r\n
1238 1240 s> Date: $HTTP_DATE$\r\n
1239 1241 s> Content-Type: application/mercurial-cbor\r\n
1240 1242 s> Content-Length: 91\r\n
1241 1243 s> \r\n
1242 1244 s> \xa1Jtotalitems\x01\xa2DnodeT\x99/Gy\x02\x9a=\xf8\xd0fm\x00\xbb\x92OicN&AGparents\x82T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
1243 1245 cbor> [
1244 1246 {
1245 1247 b'totalitems': 1
1246 1248 },
1247 1249 {
1248 1250 b'node': b'\x99/Gy\x02\x9a=\xf8\xd0fm\x00\xbb\x92OicN&A',
1249 1251 b'parents': [
1250 1252 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
1251 1253 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
1252 1254 ]
1253 1255 }
1254 1256 ]
1255 1257
1256 1258 2nd request should result in content redirect response
1257 1259
1258 1260 $ sendhttpv2peer << EOF
1259 1261 > command manifestdata
1260 1262 > nodes eval:[b'\x99\x2f\x47\x79\x02\x9a\x3d\xf8\xd0\x66\x6d\x00\xbb\x92\x4f\x69\x63\x4e\x26\x41']
1261 1263 > tree eval:b''
1262 1264 > fields eval:[b'parents']
1263 1265 > EOF
1264 1266 creating http peer for wire protocol version 2
1265 1267 sending manifestdata command
1266 1268 response: gen[
1267 1269 {
1268 1270 b'totalitems': 1
1269 1271 },
1270 1272 {
1271 1273 b'node': b'\x99/Gy\x02\x9a=\xf8\xd0fm\x00\xbb\x92OicN&A',
1272 1274 b'parents': [
1273 1275 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
1274 1276 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
1275 1277 ]
1276 1278 }
1277 1279 ]
1278 1280
1279 1281 $ cat error.log
1280 1282 $ killdaemons.py
1281 1283
1282 1284 $ cat .hg/blackbox.log
1283 1285 *> cacher constructed for manifestdata (glob)
1284 1286 *> cache miss for c045a581599d58608efd3d93d8129841f2af04a0 (glob)
1285 1287 *> storing cache entry for c045a581599d58608efd3d93d8129841f2af04a0 (glob)
1286 1288 *> cacher constructed for manifestdata (glob)
1287 1289 *> cache hit for c045a581599d58608efd3d93d8129841f2af04a0 (glob)
1288 1290 *> sending content redirect for c045a581599d58608efd3d93d8129841f2af04a0 to http://*:$HGPORT/api/simplecache/c045a581599d58608efd3d93d8129841f2af04a0 (glob)
General Comments 0
You need to be logged in to leave comments. Login now