##// END OF EJS Templates
tests: followup on network related errors on Debian 9...
Boris Feld -
r41009:97484e1d default
parent child Browse files
Show More
@@ -1,556 +1,556 b''
1 1 #require no-reposimplestore no-chg
2 2
3 3 Set up a server
4 4
5 5 $ hg init server
6 6 $ cd server
7 7 $ cat >> .hg/hgrc << EOF
8 8 > [extensions]
9 9 > clonebundles =
10 10 > EOF
11 11
12 12 $ touch foo
13 13 $ hg -q commit -A -m 'add foo'
14 14 $ touch bar
15 15 $ hg -q commit -A -m 'add bar'
16 16
17 17 $ hg serve -d -p $HGPORT --pid-file hg.pid --accesslog access.log
18 18 $ cat hg.pid >> $DAEMON_PIDS
19 19 $ cd ..
20 20
21 21 Missing manifest should not result in server lookup
22 22
23 23 $ hg --verbose clone -U http://localhost:$HGPORT no-manifest
24 24 requesting all changes
25 25 adding changesets
26 26 adding manifests
27 27 adding file changes
28 28 added 2 changesets with 2 changes to 2 files
29 29 new changesets 53245c60e682:aaff8d2ffbbf
30 30 (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob)
31 31
32 32 $ cat server/access.log
33 33 * - - [*] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
34 34 $LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
35 35 $LOCALIP - - [$LOGDATE$] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
36 36
37 37 Empty manifest file results in retrieval
38 38 (the extension only checks if the manifest file exists)
39 39
40 40 $ touch server/.hg/clonebundles.manifest
41 41 $ hg --verbose clone -U http://localhost:$HGPORT empty-manifest
42 42 no clone bundles available on remote; falling back to regular clone
43 43 requesting all changes
44 44 adding changesets
45 45 adding manifests
46 46 adding file changes
47 47 added 2 changesets with 2 changes to 2 files
48 48 new changesets 53245c60e682:aaff8d2ffbbf
49 49 (sent 4 HTTP requests and * bytes; received * bytes in responses) (glob)
50 50
51 51 Manifest file with invalid URL aborts
52 52
53 53 $ echo 'http://does.not.exist/bundle.hg' > server/.hg/clonebundles.manifest
54 54 $ hg clone http://localhost:$HGPORT 404-url
55 55 applying clone bundle from http://does.not.exist/bundle.hg
56 56 error fetching bundle: (.* not known|(\[Errno -?\d+])? No address associated with hostname) (re) (no-windows !)
57 57 error fetching bundle: [Errno 1100*] getaddrinfo failed (glob) (windows !)
58 58 abort: error applying bundle
59 59 (if this error persists, consider contacting the server operator or disable clone bundles via "--config ui.clonebundles=false")
60 60 [255]
61 61
62 62 Server is not running aborts
63 63
64 64 $ echo "http://localhost:$HGPORT1/bundle.hg" > server/.hg/clonebundles.manifest
65 65 $ hg clone http://localhost:$HGPORT server-not-runner
66 66 applying clone bundle from http://localhost:$HGPORT1/bundle.hg
67 error fetching bundle: (.* refused.*|Protocol not supported|(.* )?Cannot assign requested address) (re)
67 error fetching bundle: (.* refused.*|Protocol not supported|(.* )?\$EADDRNOTAVAIL\$) (re)
68 68 abort: error applying bundle
69 69 (if this error persists, consider contacting the server operator or disable clone bundles via "--config ui.clonebundles=false")
70 70 [255]
71 71
72 72 Server returns 404
73 73
74 74 $ "$PYTHON" $TESTDIR/dumbhttp.py -p $HGPORT1 --pid http.pid
75 75 $ cat http.pid >> $DAEMON_PIDS
76 76 $ hg clone http://localhost:$HGPORT running-404
77 77 applying clone bundle from http://localhost:$HGPORT1/bundle.hg
78 78 HTTP error fetching bundle: HTTP Error 404: File not found
79 79 abort: error applying bundle
80 80 (if this error persists, consider contacting the server operator or disable clone bundles via "--config ui.clonebundles=false")
81 81 [255]
82 82
83 83 We can override failure to fall back to regular clone
84 84
85 85 $ hg --config ui.clonebundlefallback=true clone -U http://localhost:$HGPORT 404-fallback
86 86 applying clone bundle from http://localhost:$HGPORT1/bundle.hg
87 87 HTTP error fetching bundle: HTTP Error 404: File not found
88 88 falling back to normal clone
89 89 requesting all changes
90 90 adding changesets
91 91 adding manifests
92 92 adding file changes
93 93 added 2 changesets with 2 changes to 2 files
94 94 new changesets 53245c60e682:aaff8d2ffbbf
95 95
96 96 Bundle with partial content works
97 97
98 98 $ hg -R server bundle --type gzip-v1 --base null -r 53245c60e682 partial.hg
99 99 1 changesets found
100 100
101 101 We verify exact bundle content as an extra check against accidental future
102 102 changes. If this output changes, we could break old clients.
103 103
104 104 $ f --size --hexdump partial.hg
105 105 partial.hg: size=207
106 106 0000: 48 47 31 30 47 5a 78 9c 63 60 60 98 17 ac 12 93 |HG10GZx.c``.....|
107 107 0010: f0 ac a9 23 45 70 cb bf 0d 5f 59 4e 4a 7f 79 21 |...#Ep..._YNJ.y!|
108 108 0020: 9b cc 40 24 20 a0 d7 ce 2c d1 38 25 cd 24 25 d5 |..@$ ...,.8%.$%.|
109 109 0030: d8 c2 22 cd 38 d9 24 cd 22 d5 c8 22 cd 24 cd 32 |..".8.$."..".$.2|
110 110 0040: d1 c2 d0 c4 c8 d2 32 d1 38 39 29 c9 34 cd d4 80 |......2.89).4...|
111 111 0050: ab 24 b5 b8 84 cb 40 c1 80 2b 2d 3f 9f 8b 2b 31 |.$....@..+-?..+1|
112 112 0060: 25 45 01 c8 80 9a d2 9b 65 fb e5 9e 45 bf 8d 7f |%E......e...E...|
113 113 0070: 9f c6 97 9f 2b 44 34 67 d9 ec 8e 0f a0 92 0b 75 |....+D4g.......u|
114 114 0080: 41 d6 24 59 18 a4 a4 9a a6 18 1a 5b 98 9b 5a 98 |A.$Y.......[..Z.|
115 115 0090: 9a 18 26 9b a6 19 98 1a 99 99 26 a6 18 9a 98 24 |..&.......&....$|
116 116 00a0: 26 59 a6 25 5a 98 a5 18 a6 24 71 41 35 b1 43 dc |&Y.%Z....$qA5.C.|
117 117 00b0: 16 b2 83 f7 e9 45 8b d2 56 c7 a3 1f 82 52 d7 8a |.....E..V....R..|
118 118 00c0: 78 ed fc d5 76 f1 36 35 dc 05 00 36 ed 5e c7 |x...v.65...6.^.|
119 119
120 120 $ echo "http://localhost:$HGPORT1/partial.hg" > server/.hg/clonebundles.manifest
121 121 $ hg clone -U http://localhost:$HGPORT partial-bundle
122 122 applying clone bundle from http://localhost:$HGPORT1/partial.hg
123 123 adding changesets
124 124 adding manifests
125 125 adding file changes
126 126 added 1 changesets with 1 changes to 1 files
127 127 finished applying clone bundle
128 128 searching for changes
129 129 adding changesets
130 130 adding manifests
131 131 adding file changes
132 132 added 1 changesets with 1 changes to 1 files
133 133 new changesets aaff8d2ffbbf
134 134 1 local changesets published
135 135
136 136 Incremental pull doesn't fetch bundle
137 137
138 138 $ hg clone -r 53245c60e682 -U http://localhost:$HGPORT partial-clone
139 139 adding changesets
140 140 adding manifests
141 141 adding file changes
142 142 added 1 changesets with 1 changes to 1 files
143 143 new changesets 53245c60e682
144 144
145 145 $ cd partial-clone
146 146 $ hg pull
147 147 pulling from http://localhost:$HGPORT/
148 148 searching for changes
149 149 adding changesets
150 150 adding manifests
151 151 adding file changes
152 152 added 1 changesets with 1 changes to 1 files
153 153 new changesets aaff8d2ffbbf
154 154 (run 'hg update' to get a working copy)
155 155 $ cd ..
156 156
157 157 Bundle with full content works
158 158
159 159 $ hg -R server bundle --type gzip-v2 --base null -r tip full.hg
160 160 2 changesets found
161 161
162 162 Again, we perform an extra check against bundle content changes. If this content
163 163 changes, clone bundles produced by new Mercurial versions may not be readable
164 164 by old clients.
165 165
166 166 $ f --size --hexdump full.hg
167 167 full.hg: size=442
168 168 0000: 48 47 32 30 00 00 00 0e 43 6f 6d 70 72 65 73 73 |HG20....Compress|
169 169 0010: 69 6f 6e 3d 47 5a 78 9c 63 60 60 d0 e4 76 f6 70 |ion=GZx.c``..v.p|
170 170 0020: f4 73 77 75 0f f2 0f 0d 60 00 02 46 46 76 26 4e |.swu....`..FFv&N|
171 171 0030: c6 b2 d4 a2 e2 cc fc 3c 03 a3 bc a4 e4 8c c4 bc |.......<........|
172 172 0040: f4 d4 62 23 06 06 e6 19 40 f9 4d c1 2a 31 09 cf |..b#....@.M.*1..|
173 173 0050: 9a 3a 52 04 b7 fc db f0 95 e5 a4 f4 97 17 b2 c9 |.:R.............|
174 174 0060: 0c 14 00 02 e6 d9 99 25 1a a7 a4 99 a4 a4 1a 5b |.......%.......[|
175 175 0070: 58 a4 19 27 9b a4 59 a4 1a 59 a4 99 a4 59 26 5a |X..'..Y..Y...Y&Z|
176 176 0080: 18 9a 18 59 5a 26 1a 27 27 25 99 a6 99 1a 70 95 |...YZ&.''%....p.|
177 177 0090: a4 16 97 70 19 28 18 70 a5 e5 e7 73 71 25 a6 a4 |...p.(.p...sq%..|
178 178 00a0: 28 00 19 20 17 af fa df ab ff 7b 3f fb 92 dc 8b |(.. ......{?....|
179 179 00b0: 1f 62 bb 9e b7 d7 d9 87 3d 5a 44 89 2f b0 99 87 |.b......=ZD./...|
180 180 00c0: ec e2 54 63 43 e3 b4 64 43 73 23 33 43 53 0b 63 |..TcC..dCs#3CS.c|
181 181 00d0: d3 14 23 03 a0 fb 2c 2c 0c d3 80 1e 30 49 49 b1 |..#...,,....0II.|
182 182 00e0: 4c 4a 32 48 33 30 b0 34 42 b8 38 29 b1 08 e2 62 |LJ2H30.4B.8)...b|
183 183 00f0: 20 03 6a ca c2 2c db 2f f7 2c fa 6d fc fb 34 be | .j..,./.,.m..4.|
184 184 0100: fc 5c 21 a2 39 cb 66 77 7c 00 0d c3 59 17 14 58 |.\!.9.fw|...Y..X|
185 185 0110: 49 16 06 29 a9 a6 29 86 c6 16 e6 a6 16 a6 26 86 |I..)..).......&.|
186 186 0120: c9 a6 69 06 a6 46 66 a6 89 29 86 26 26 89 49 96 |..i..Ff..).&&.I.|
187 187 0130: 69 89 16 66 29 86 29 49 5c 20 07 3e 16 fe 23 ae |i..f).)I\ .>..#.|
188 188 0140: 26 da 1c ab 10 1f d1 f8 e3 b3 ef cd dd fc 0c 93 |&...............|
189 189 0150: 88 75 34 36 75 04 82 55 17 14 36 a4 38 10 04 d8 |.u46u..U..6.8...|
190 190 0160: 21 01 9a b1 83 f7 e9 45 8b d2 56 c7 a3 1f 82 52 |!......E..V....R|
191 191 0170: d7 8a 78 ed fc d5 76 f1 36 25 81 89 c7 ad ec 90 |..x...v.6%......|
192 192 0180: 54 47 75 2b 89 48 b1 b2 62 c9 89 c9 19 a9 56 45 |TGu+.H..b.....VE|
193 193 0190: a9 65 ba 49 45 89 79 c9 19 ba 60 01 a0 14 23 58 |.e.IE.y...`...#X|
194 194 01a0: 81 35 c8 7d 40 cc 04 e2 a4 a4 a6 25 96 e6 94 60 |.5.}@......%...`|
195 195 01b0: 33 17 5f 54 00 00 d3 1b 0d 4c |3._T.....L|
196 196
197 197 $ echo "http://localhost:$HGPORT1/full.hg" > server/.hg/clonebundles.manifest
198 198 $ hg clone -U http://localhost:$HGPORT full-bundle
199 199 applying clone bundle from http://localhost:$HGPORT1/full.hg
200 200 adding changesets
201 201 adding manifests
202 202 adding file changes
203 203 added 2 changesets with 2 changes to 2 files
204 204 finished applying clone bundle
205 205 searching for changes
206 206 no changes found
207 207 2 local changesets published
208 208
209 209 Feature works over SSH
210 210
211 211 $ hg clone -U -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/server ssh-full-clone
212 212 applying clone bundle from http://localhost:$HGPORT1/full.hg
213 213 adding changesets
214 214 adding manifests
215 215 adding file changes
216 216 added 2 changesets with 2 changes to 2 files
217 217 finished applying clone bundle
218 218 searching for changes
219 219 no changes found
220 220 2 local changesets published
221 221
222 222 Entry with unknown BUNDLESPEC is filtered and not used
223 223
224 224 $ cat > server/.hg/clonebundles.manifest << EOF
225 225 > http://bad.entry1 BUNDLESPEC=UNKNOWN
226 226 > http://bad.entry2 BUNDLESPEC=xz-v1
227 227 > http://bad.entry3 BUNDLESPEC=none-v100
228 228 > http://localhost:$HGPORT1/full.hg BUNDLESPEC=gzip-v2
229 229 > EOF
230 230
231 231 $ hg clone -U http://localhost:$HGPORT filter-unknown-type
232 232 applying clone bundle from http://localhost:$HGPORT1/full.hg
233 233 adding changesets
234 234 adding manifests
235 235 adding file changes
236 236 added 2 changesets with 2 changes to 2 files
237 237 finished applying clone bundle
238 238 searching for changes
239 239 no changes found
240 240 2 local changesets published
241 241
242 242 Automatic fallback when all entries are filtered
243 243
244 244 $ cat > server/.hg/clonebundles.manifest << EOF
245 245 > http://bad.entry BUNDLESPEC=UNKNOWN
246 246 > EOF
247 247
248 248 $ hg clone -U http://localhost:$HGPORT filter-all
249 249 no compatible clone bundles available on server; falling back to regular clone
250 250 (you may want to report this to the server operator)
251 251 requesting all changes
252 252 adding changesets
253 253 adding manifests
254 254 adding file changes
255 255 added 2 changesets with 2 changes to 2 files
256 256 new changesets 53245c60e682:aaff8d2ffbbf
257 257
258 258 URLs requiring SNI are filtered in Python <2.7.9
259 259
260 260 $ cp full.hg sni.hg
261 261 $ cat > server/.hg/clonebundles.manifest << EOF
262 262 > http://localhost:$HGPORT1/sni.hg REQUIRESNI=true
263 263 > http://localhost:$HGPORT1/full.hg
264 264 > EOF
265 265
266 266 #if sslcontext
267 267 Python 2.7.9+ support SNI
268 268
269 269 $ hg clone -U http://localhost:$HGPORT sni-supported
270 270 applying clone bundle from http://localhost:$HGPORT1/sni.hg
271 271 adding changesets
272 272 adding manifests
273 273 adding file changes
274 274 added 2 changesets with 2 changes to 2 files
275 275 finished applying clone bundle
276 276 searching for changes
277 277 no changes found
278 278 2 local changesets published
279 279 #else
280 280 Python <2.7.9 will filter SNI URLs
281 281
282 282 $ hg clone -U http://localhost:$HGPORT sni-unsupported
283 283 applying clone bundle from http://localhost:$HGPORT1/full.hg
284 284 adding changesets
285 285 adding manifests
286 286 adding file changes
287 287 added 2 changesets with 2 changes to 2 files
288 288 finished applying clone bundle
289 289 searching for changes
290 290 no changes found
291 291 2 local changesets published
292 292 #endif
293 293
294 294 Stream clone bundles are supported
295 295
296 296 $ hg -R server debugcreatestreamclonebundle packed.hg
297 297 writing 613 bytes for 4 files
298 298 bundle requirements: generaldelta, revlogv1, sparserevlog
299 299
300 300 No bundle spec should work
301 301
302 302 $ cat > server/.hg/clonebundles.manifest << EOF
303 303 > http://localhost:$HGPORT1/packed.hg
304 304 > EOF
305 305
306 306 $ hg clone -U http://localhost:$HGPORT stream-clone-no-spec
307 307 applying clone bundle from http://localhost:$HGPORT1/packed.hg
308 308 4 files to transfer, 613 bytes of data
309 309 transferred 613 bytes in *.* seconds (*) (glob)
310 310 finished applying clone bundle
311 311 searching for changes
312 312 no changes found
313 313
314 314 Bundle spec without parameters should work
315 315
316 316 $ cat > server/.hg/clonebundles.manifest << EOF
317 317 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1
318 318 > EOF
319 319
320 320 $ hg clone -U http://localhost:$HGPORT stream-clone-vanilla-spec
321 321 applying clone bundle from http://localhost:$HGPORT1/packed.hg
322 322 4 files to transfer, 613 bytes of data
323 323 transferred 613 bytes in *.* seconds (*) (glob)
324 324 finished applying clone bundle
325 325 searching for changes
326 326 no changes found
327 327
328 328 Bundle spec with format requirements should work
329 329
330 330 $ cat > server/.hg/clonebundles.manifest << EOF
331 331 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1;requirements%3Drevlogv1
332 332 > EOF
333 333
334 334 $ hg clone -U http://localhost:$HGPORT stream-clone-supported-requirements
335 335 applying clone bundle from http://localhost:$HGPORT1/packed.hg
336 336 4 files to transfer, 613 bytes of data
337 337 transferred 613 bytes in *.* seconds (*) (glob)
338 338 finished applying clone bundle
339 339 searching for changes
340 340 no changes found
341 341
342 342 Stream bundle spec with unknown requirements should be filtered out
343 343
344 344 $ cat > server/.hg/clonebundles.manifest << EOF
345 345 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1;requirements%3Drevlogv42
346 346 > EOF
347 347
348 348 $ hg clone -U http://localhost:$HGPORT stream-clone-unsupported-requirements
349 349 no compatible clone bundles available on server; falling back to regular clone
350 350 (you may want to report this to the server operator)
351 351 requesting all changes
352 352 adding changesets
353 353 adding manifests
354 354 adding file changes
355 355 added 2 changesets with 2 changes to 2 files
356 356 new changesets 53245c60e682:aaff8d2ffbbf
357 357
358 358 Set up manifest for testing preferences
359 359 (Remember, the TYPE does not have to match reality - the URL is
360 360 important)
361 361
362 362 $ cp full.hg gz-a.hg
363 363 $ cp full.hg gz-b.hg
364 364 $ cp full.hg bz2-a.hg
365 365 $ cp full.hg bz2-b.hg
366 366 $ cat > server/.hg/clonebundles.manifest << EOF
367 367 > http://localhost:$HGPORT1/gz-a.hg BUNDLESPEC=gzip-v2 extra=a
368 368 > http://localhost:$HGPORT1/bz2-a.hg BUNDLESPEC=bzip2-v2 extra=a
369 369 > http://localhost:$HGPORT1/gz-b.hg BUNDLESPEC=gzip-v2 extra=b
370 370 > http://localhost:$HGPORT1/bz2-b.hg BUNDLESPEC=bzip2-v2 extra=b
371 371 > EOF
372 372
373 373 Preferring an undefined attribute will take first entry
374 374
375 375 $ hg --config ui.clonebundleprefers=foo=bar clone -U http://localhost:$HGPORT prefer-foo
376 376 applying clone bundle from http://localhost:$HGPORT1/gz-a.hg
377 377 adding changesets
378 378 adding manifests
379 379 adding file changes
380 380 added 2 changesets with 2 changes to 2 files
381 381 finished applying clone bundle
382 382 searching for changes
383 383 no changes found
384 384 2 local changesets published
385 385
386 386 Preferring bz2 type will download first entry of that type
387 387
388 388 $ hg --config ui.clonebundleprefers=COMPRESSION=bzip2 clone -U http://localhost:$HGPORT prefer-bz
389 389 applying clone bundle from http://localhost:$HGPORT1/bz2-a.hg
390 390 adding changesets
391 391 adding manifests
392 392 adding file changes
393 393 added 2 changesets with 2 changes to 2 files
394 394 finished applying clone bundle
395 395 searching for changes
396 396 no changes found
397 397 2 local changesets published
398 398
399 399 Preferring multiple values of an option works
400 400
401 401 $ hg --config ui.clonebundleprefers=COMPRESSION=unknown,COMPRESSION=bzip2 clone -U http://localhost:$HGPORT prefer-multiple-bz
402 402 applying clone bundle from http://localhost:$HGPORT1/bz2-a.hg
403 403 adding changesets
404 404 adding manifests
405 405 adding file changes
406 406 added 2 changesets with 2 changes to 2 files
407 407 finished applying clone bundle
408 408 searching for changes
409 409 no changes found
410 410 2 local changesets published
411 411
412 412 Sorting multiple values should get us back to original first entry
413 413
414 414 $ hg --config ui.clonebundleprefers=BUNDLESPEC=unknown,BUNDLESPEC=gzip-v2,BUNDLESPEC=bzip2-v2 clone -U http://localhost:$HGPORT prefer-multiple-gz
415 415 applying clone bundle from http://localhost:$HGPORT1/gz-a.hg
416 416 adding changesets
417 417 adding manifests
418 418 adding file changes
419 419 added 2 changesets with 2 changes to 2 files
420 420 finished applying clone bundle
421 421 searching for changes
422 422 no changes found
423 423 2 local changesets published
424 424
425 425 Preferring multiple attributes has correct order
426 426
427 427 $ hg --config ui.clonebundleprefers=extra=b,BUNDLESPEC=bzip2-v2 clone -U http://localhost:$HGPORT prefer-separate-attributes
428 428 applying clone bundle from http://localhost:$HGPORT1/bz2-b.hg
429 429 adding changesets
430 430 adding manifests
431 431 adding file changes
432 432 added 2 changesets with 2 changes to 2 files
433 433 finished applying clone bundle
434 434 searching for changes
435 435 no changes found
436 436 2 local changesets published
437 437
438 438 Test where attribute is missing from some entries
439 439
440 440 $ cat > server/.hg/clonebundles.manifest << EOF
441 441 > http://localhost:$HGPORT1/gz-a.hg BUNDLESPEC=gzip-v2
442 442 > http://localhost:$HGPORT1/bz2-a.hg BUNDLESPEC=bzip2-v2
443 443 > http://localhost:$HGPORT1/gz-b.hg BUNDLESPEC=gzip-v2 extra=b
444 444 > http://localhost:$HGPORT1/bz2-b.hg BUNDLESPEC=bzip2-v2 extra=b
445 445 > EOF
446 446
447 447 $ hg --config ui.clonebundleprefers=extra=b clone -U http://localhost:$HGPORT prefer-partially-defined-attribute
448 448 applying clone bundle from http://localhost:$HGPORT1/gz-b.hg
449 449 adding changesets
450 450 adding manifests
451 451 adding file changes
452 452 added 2 changesets with 2 changes to 2 files
453 453 finished applying clone bundle
454 454 searching for changes
455 455 no changes found
456 456 2 local changesets published
457 457
458 458 Test interaction between clone bundles and --stream
459 459
460 460 A manifest with just a gzip bundle
461 461
462 462 $ cat > server/.hg/clonebundles.manifest << EOF
463 463 > http://localhost:$HGPORT1/gz-a.hg BUNDLESPEC=gzip-v2
464 464 > EOF
465 465
466 466 $ hg clone -U --stream http://localhost:$HGPORT uncompressed-gzip
467 467 no compatible clone bundles available on server; falling back to regular clone
468 468 (you may want to report this to the server operator)
469 469 streaming all changes
470 470 9 files to transfer, 816 bytes of data
471 471 transferred 816 bytes in * seconds (*) (glob)
472 472
473 473 A manifest with a stream clone but no BUNDLESPEC
474 474
475 475 $ cat > server/.hg/clonebundles.manifest << EOF
476 476 > http://localhost:$HGPORT1/packed.hg
477 477 > EOF
478 478
479 479 $ hg clone -U --stream http://localhost:$HGPORT uncompressed-no-bundlespec
480 480 no compatible clone bundles available on server; falling back to regular clone
481 481 (you may want to report this to the server operator)
482 482 streaming all changes
483 483 9 files to transfer, 816 bytes of data
484 484 transferred 816 bytes in * seconds (*) (glob)
485 485
486 486 A manifest with a gzip bundle and a stream clone
487 487
488 488 $ cat > server/.hg/clonebundles.manifest << EOF
489 489 > http://localhost:$HGPORT1/gz-a.hg BUNDLESPEC=gzip-v2
490 490 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1
491 491 > EOF
492 492
493 493 $ hg clone -U --stream http://localhost:$HGPORT uncompressed-gzip-packed
494 494 applying clone bundle from http://localhost:$HGPORT1/packed.hg
495 495 4 files to transfer, 613 bytes of data
496 496 transferred 613 bytes in * seconds (*) (glob)
497 497 finished applying clone bundle
498 498 searching for changes
499 499 no changes found
500 500
501 501 A manifest with a gzip bundle and stream clone with supported requirements
502 502
503 503 $ cat > server/.hg/clonebundles.manifest << EOF
504 504 > http://localhost:$HGPORT1/gz-a.hg BUNDLESPEC=gzip-v2
505 505 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1;requirements%3Drevlogv1
506 506 > EOF
507 507
508 508 $ hg clone -U --stream http://localhost:$HGPORT uncompressed-gzip-packed-requirements
509 509 applying clone bundle from http://localhost:$HGPORT1/packed.hg
510 510 4 files to transfer, 613 bytes of data
511 511 transferred 613 bytes in * seconds (*) (glob)
512 512 finished applying clone bundle
513 513 searching for changes
514 514 no changes found
515 515
516 516 A manifest with a gzip bundle and a stream clone with unsupported requirements
517 517
518 518 $ cat > server/.hg/clonebundles.manifest << EOF
519 519 > http://localhost:$HGPORT1/gz-a.hg BUNDLESPEC=gzip-v2
520 520 > http://localhost:$HGPORT1/packed.hg BUNDLESPEC=none-packed1;requirements%3Drevlogv42
521 521 > EOF
522 522
523 523 $ hg clone -U --stream http://localhost:$HGPORT uncompressed-gzip-packed-unsupported-requirements
524 524 no compatible clone bundles available on server; falling back to regular clone
525 525 (you may want to report this to the server operator)
526 526 streaming all changes
527 527 9 files to transfer, 816 bytes of data
528 528 transferred 816 bytes in * seconds (*) (glob)
529 529
530 530 Test clone bundle retrieved through bundle2
531 531
532 532 $ cat << EOF >> $HGRCPATH
533 533 > [extensions]
534 534 > largefiles=
535 535 > EOF
536 536 $ killdaemons.py
537 537 $ hg -R server serve -d -p $HGPORT --pid-file hg.pid --accesslog access.log
538 538 $ cat hg.pid >> $DAEMON_PIDS
539 539
540 540 $ hg -R server debuglfput gz-a.hg
541 541 1f74b3d08286b9b3a16fb3fa185dd29219cbc6ae
542 542
543 543 $ cat > server/.hg/clonebundles.manifest << EOF
544 544 > largefile://1f74b3d08286b9b3a16fb3fa185dd29219cbc6ae BUNDLESPEC=gzip-v2
545 545 > EOF
546 546
547 547 $ hg clone -U http://localhost:$HGPORT largefile-provided --traceback
548 548 applying clone bundle from largefile://1f74b3d08286b9b3a16fb3fa185dd29219cbc6ae
549 549 adding changesets
550 550 adding manifests
551 551 adding file changes
552 552 added 2 changesets with 2 changes to 2 files
553 553 finished applying clone bundle
554 554 searching for changes
555 555 no changes found
556 556 2 local changesets published
@@ -1,937 +1,936 b''
1 1 #require serve zstd
2 2
3 3 Client version is embedded in HTTP request and is effectively dynamic. Pin the
4 4 version so behavior is deterministic.
5 5
6 6 $ cat > fakeversion.py << EOF
7 7 > from mercurial import util
8 8 > util.version = lambda: '4.2'
9 9 > EOF
10 10
11 11 $ cat >> $HGRCPATH << EOF
12 12 > [extensions]
13 13 > fakeversion = `pwd`/fakeversion.py
14 14 > [format]
15 15 > sparse-revlog = no
16 16 > [devel]
17 17 > legacy.exchange = phases
18 18 > EOF
19 19
20 20 $ hg init server0
21 21 $ cd server0
22 22 $ touch foo
23 23 $ hg -q commit -A -m initial
24 24
25 25 Also disable compression because zstd is optional and causes output to vary
26 26 and because debugging partial responses is hard when compression is involved
27 27
28 28 $ cat > .hg/hgrc << EOF
29 29 > [extensions]
30 30 > badserver = $TESTDIR/badserverext.py
31 31 > [server]
32 32 > compressionengines = none
33 33 > EOF
34 34
35 35 Failure to accept() socket should result in connection related error message
36 36
37 37 $ hg serve --config badserver.closebeforeaccept=true -p $HGPORT -d --pid-file=hg.pid
38 38 $ cat hg.pid > $DAEMON_PIDS
39 39
40 40 $ hg clone http://localhost:$HGPORT/ clone
41 abort: error: $ECONNRESET$ (?)
42 abort: error: $EADDRNOTAVAIL$ (?)
41 abort: error: (\$ECONNRESET\$|\$EADDRNOTAVAIL\$) (re)
43 42 [255]
44 43
45 44 (The server exits on its own, but there is a race between that and starting a new server.
46 45 So ensure the process is dead.)
47 46
48 47 $ killdaemons.py $DAEMON_PIDS
49 48
50 49 Failure immediately after accept() should yield connection related error message
51 50
52 51 $ hg serve --config badserver.closeafteraccept=true -p $HGPORT -d --pid-file=hg.pid
53 52 $ cat hg.pid > $DAEMON_PIDS
54 53
55 54 TODO: this usually outputs good results, but sometimes emits abort:
56 55 error: '' on FreeBSD and OS X.
57 56 What we ideally want are:
58 57
59 58 abort: error: $ECONNRESET$
60 59
61 60 The flakiness in this output was observable easily with
62 61 --runs-per-test=20 on macOS 10.12 during the freeze for 4.2.
63 62 $ hg clone http://localhost:$HGPORT/ clone
64 63 abort: error: * (glob)
65 64 [255]
66 65
67 66 $ killdaemons.py $DAEMON_PIDS
68 67
69 68 Failure to read all bytes in initial HTTP request should yield connection related error message
70 69
71 70 $ hg serve --config badserver.closeafterrecvbytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
72 71 $ cat hg.pid > $DAEMON_PIDS
73 72
74 73 $ hg clone http://localhost:$HGPORT/ clone
75 74 abort: error: bad HTTP status line: * (glob)
76 75 [255]
77 76
78 77 $ killdaemons.py $DAEMON_PIDS
79 78
80 79 $ cat error.log
81 80 readline(1 from 65537) -> (1) G
82 81 read limit reached; closing socket
83 82
84 83 $ rm -f error.log
85 84
86 85 Same failure, but server reads full HTTP request line
87 86
88 87 $ hg serve --config badserver.closeafterrecvbytes=40 -p $HGPORT -d --pid-file=hg.pid -E error.log
89 88 $ cat hg.pid > $DAEMON_PIDS
90 89 $ hg clone http://localhost:$HGPORT/ clone
91 90 abort: error: bad HTTP status line: * (glob)
92 91 [255]
93 92
94 93 $ killdaemons.py $DAEMON_PIDS
95 94
96 95 $ cat error.log
97 96 readline(40 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
98 97 readline(7 from -1) -> (7) Accept-
99 98 read limit reached; closing socket
100 99
101 100 $ rm -f error.log
102 101
103 102 Failure on subsequent HTTP request on the same socket (cmd?batch)
104 103
105 104 $ hg serve --config badserver.closeafterrecvbytes=210,223 -p $HGPORT -d --pid-file=hg.pid -E error.log
106 105 $ cat hg.pid > $DAEMON_PIDS
107 106 $ hg clone http://localhost:$HGPORT/ clone
108 107 abort: error: bad HTTP status line: * (glob)
109 108 [255]
110 109
111 110 $ killdaemons.py $DAEMON_PIDS
112 111
113 112 $ cat error.log
114 113 readline(210 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
115 114 readline(177 from -1) -> (27) Accept-Encoding: identity\r\n
116 115 readline(150 from -1) -> (35) accept: application/mercurial-0.1\r\n
117 116 readline(115 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
118 117 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
119 118 readline(* from -1) -> (2) \r\n (glob)
120 119 write(36) -> HTTP/1.1 200 Script output follows\r\n
121 120 write(23) -> Server: badhttpserver\r\n
122 121 write(37) -> Date: $HTTP_DATE$\r\n
123 122 write(41) -> Content-Type: application/mercurial-0.1\r\n
124 123 write(21) -> Content-Length: 450\r\n
125 124 write(2) -> \r\n
126 125 write(450) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
127 126 readline(4? from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
128 127 readline(1? from -1) -> (1?) Accept-Encoding* (glob)
129 128 read limit reached; closing socket
130 129 readline(223 from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
131 130 readline(197 from -1) -> (27) Accept-Encoding: identity\r\n
132 131 readline(170 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
133 132 readline(141 from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
134 133 readline(100 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
135 134 readline(39 from -1) -> (35) accept: application/mercurial-0.1\r\n
136 135 readline(4 from -1) -> (4) host
137 136 read limit reached; closing socket
138 137
139 138 $ rm -f error.log
140 139
141 140 Failure to read getbundle HTTP request
142 141
143 142 $ hg serve --config badserver.closeafterrecvbytes=308,317,304 -p $HGPORT -d --pid-file=hg.pid -E error.log
144 143 $ cat hg.pid > $DAEMON_PIDS
145 144 $ hg clone http://localhost:$HGPORT/ clone
146 145 requesting all changes
147 146 abort: error: bad HTTP status line: * (glob)
148 147 [255]
149 148
150 149 $ killdaemons.py $DAEMON_PIDS
151 150
152 151 $ cat error.log
153 152 readline(1 from -1) -> (1) x (?)
154 153 readline(1 from -1) -> (1) x (?)
155 154 readline(308 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
156 155 readline(275 from -1) -> (27) Accept-Encoding: identity\r\n
157 156 readline(248 from -1) -> (35) accept: application/mercurial-0.1\r\n
158 157 readline(213 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
159 158 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
160 159 readline(* from -1) -> (2) \r\n (glob)
161 160 write(36) -> HTTP/1.1 200 Script output follows\r\n
162 161 write(23) -> Server: badhttpserver\r\n
163 162 write(37) -> Date: $HTTP_DATE$\r\n
164 163 write(41) -> Content-Type: application/mercurial-0.1\r\n
165 164 write(21) -> Content-Length: 450\r\n
166 165 write(2) -> \r\n
167 166 write(450) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
168 167 readline(13? from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
169 168 readline(1?? from -1) -> (27) Accept-Encoding: identity\r\n (glob)
170 169 readline(8? from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
171 170 readline(5? from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
172 171 readline(1? from -1) -> (1?) x-hgproto-1:* (glob)
173 172 read limit reached; closing socket
174 173 readline(317 from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
175 174 readline(291 from -1) -> (27) Accept-Encoding: identity\r\n
176 175 readline(264 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
177 176 readline(235 from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
178 177 readline(194 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
179 178 readline(133 from -1) -> (35) accept: application/mercurial-0.1\r\n
180 179 readline(98 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
181 180 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
182 181 readline(* from -1) -> (2) \r\n (glob)
183 182 write(36) -> HTTP/1.1 200 Script output follows\r\n
184 183 write(23) -> Server: badhttpserver\r\n
185 184 write(37) -> Date: $HTTP_DATE$\r\n
186 185 write(41) -> Content-Type: application/mercurial-0.1\r\n
187 186 write(20) -> Content-Length: 42\r\n
188 187 write(2) -> \r\n
189 188 write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
190 189 readline(* from 65537) -> (*) GET /?cmd=getbundle HTTP* (glob)
191 190 read limit reached; closing socket
192 191 readline(304 from 65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
193 192 readline(274 from -1) -> (27) Accept-Encoding: identity\r\n
194 193 readline(247 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
195 194 readline(218 from -1) -> (218) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtag
196 195 read limit reached; closing socket
197 196
198 197 $ rm -f error.log
199 198
200 199 Now do a variation using POST to send arguments
201 200
202 201 $ hg serve --config experimental.httppostargs=true --config badserver.closeafterrecvbytes=329,344 -p $HGPORT -d --pid-file=hg.pid -E error.log
203 202 $ cat hg.pid > $DAEMON_PIDS
204 203
205 204 $ hg clone http://localhost:$HGPORT/ clone
206 205 abort: error: bad HTTP status line: * (glob)
207 206 [255]
208 207
209 208 $ killdaemons.py $DAEMON_PIDS
210 209
211 210 $ cat error.log
212 211 readline(329 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
213 212 readline(296 from -1) -> (27) Accept-Encoding: identity\r\n
214 213 readline(269 from -1) -> (35) accept: application/mercurial-0.1\r\n
215 214 readline(234 from -1) -> (2?) host: localhost:$HGPORT\r\n (glob)
216 215 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
217 216 readline(* from -1) -> (2) \r\n (glob)
218 217 write(36) -> HTTP/1.1 200 Script output follows\r\n
219 218 write(23) -> Server: badhttpserver\r\n
220 219 write(37) -> Date: $HTTP_DATE$\r\n
221 220 write(41) -> Content-Type: application/mercurial-0.1\r\n
222 221 write(21) -> Content-Length: 463\r\n
223 222 write(2) -> \r\n
224 223 write(463) -> batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx httppostargs known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
225 224 readline(1?? from 65537) -> (27) POST /?cmd=batch HTTP/1.1\r\n (glob)
226 225 readline(1?? from -1) -> (27) Accept-Encoding: identity\r\n (glob)
227 226 readline(1?? from -1) -> (41) content-type: application/mercurial-0.1\r\n (glob)
228 227 readline(6? from -1) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n (glob)
229 228 readline(3? from -1) -> (19) x-hgargs-post: 28\r\n (glob)
230 229 readline(1? from -1) -> (1?) x-hgproto-1: * (glob)
231 230 read limit reached; closing socket
232 231 readline(344 from 65537) -> (27) POST /?cmd=batch HTTP/1.1\r\n
233 232 readline(317 from -1) -> (27) Accept-Encoding: identity\r\n
234 233 readline(290 from -1) -> (41) content-type: application/mercurial-0.1\r\n
235 234 readline(249 from -1) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n
236 235 readline(216 from -1) -> (19) x-hgargs-post: 28\r\n
237 236 readline(197 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
238 237 readline(136 from -1) -> (35) accept: application/mercurial-0.1\r\n
239 238 readline(101 from -1) -> (20) content-length: 28\r\n
240 239 readline(81 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
241 240 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
242 241 readline(* from -1) -> (2) \r\n (glob)
243 242 read(* from 28) -> (*) cmds=* (glob)
244 243 read limit reached, closing socket
245 244 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
246 245
247 246 $ rm -f error.log
248 247
249 248 Now move on to partial server responses
250 249
251 250 Server sends a single character from the HTTP response line
252 251
253 252 $ hg serve --config badserver.closeaftersendbytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
254 253 $ cat hg.pid > $DAEMON_PIDS
255 254
256 255 $ hg clone http://localhost:$HGPORT/ clone
257 256 abort: error: bad HTTP status line: H
258 257 [255]
259 258
260 259 $ killdaemons.py $DAEMON_PIDS
261 260
262 261 $ cat error.log
263 262 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
264 263 readline(-1) -> (27) Accept-Encoding: identity\r\n
265 264 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
266 265 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
267 266 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
268 267 readline(-1) -> (2) \r\n
269 268 write(1 from 36) -> (0) H
270 269 write limit reached; closing socket
271 270 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
272 271
273 272 $ rm -f error.log
274 273
275 274 Server sends an incomplete capabilities response body
276 275
277 276 $ hg serve --config badserver.closeaftersendbytes=180 -p $HGPORT -d --pid-file=hg.pid -E error.log
278 277 $ cat hg.pid > $DAEMON_PIDS
279 278
280 279 $ hg clone http://localhost:$HGPORT/ clone
281 280 abort: HTTP request error (incomplete response; expected 450 bytes got 20)
282 281 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
283 282 [255]
284 283
285 284 $ killdaemons.py $DAEMON_PIDS
286 285
287 286 $ cat error.log
288 287 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
289 288 readline(-1) -> (27) Accept-Encoding: identity\r\n
290 289 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
291 290 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
292 291 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
293 292 readline(-1) -> (2) \r\n
294 293 write(36 from 36) -> (144) HTTP/1.1 200 Script output follows\r\n
295 294 write(23 from 23) -> (121) Server: badhttpserver\r\n
296 295 write(37 from 37) -> (84) Date: $HTTP_DATE$\r\n
297 296 write(41 from 41) -> (43) Content-Type: application/mercurial-0.1\r\n
298 297 write(21 from 21) -> (22) Content-Length: 450\r\n
299 298 write(2 from 2) -> (20) \r\n
300 299 write(20 from 450) -> (0) batch branchmap bund
301 300 write limit reached; closing socket
302 301
303 302 $ rm -f error.log
304 303
305 304 Server sends incomplete headers for batch request
306 305
307 306 $ hg serve --config badserver.closeaftersendbytes=728 -p $HGPORT -d --pid-file=hg.pid -E error.log
308 307 $ cat hg.pid > $DAEMON_PIDS
309 308
310 309 TODO this output is horrible
311 310
312 311 $ hg clone http://localhost:$HGPORT/ clone
313 312 abort: 'http://localhost:$HGPORT/' does not appear to be an hg repository:
314 313 ---%<--- (applicat)
315 314
316 315 ---%<---
317 316 !
318 317 [255]
319 318
320 319 $ killdaemons.py $DAEMON_PIDS
321 320
322 321 $ cat error.log
323 322 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
324 323 readline(-1) -> (27) Accept-Encoding: identity\r\n
325 324 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
326 325 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
327 326 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
328 327 readline(-1) -> (2) \r\n
329 328 write(36 from 36) -> (692) HTTP/1.1 200 Script output follows\r\n
330 329 write(23 from 23) -> (669) Server: badhttpserver\r\n
331 330 write(37 from 37) -> (632) Date: $HTTP_DATE$\r\n
332 331 write(41 from 41) -> (591) Content-Type: application/mercurial-0.1\r\n
333 332 write(21 from 21) -> (570) Content-Length: 450\r\n
334 333 write(2 from 2) -> (568) \r\n
335 334 write(450 from 450) -> (118) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
336 335 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
337 336 readline(-1) -> (27) Accept-Encoding: identity\r\n
338 337 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
339 338 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
340 339 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
341 340 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
342 341 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
343 342 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
344 343 readline(-1) -> (2) \r\n
345 344 write(36 from 36) -> (82) HTTP/1.1 200 Script output follows\r\n
346 345 write(23 from 23) -> (59) Server: badhttpserver\r\n
347 346 write(37 from 37) -> (22) Date: $HTTP_DATE$\r\n
348 347 write(22 from 41) -> (0) Content-Type: applicat
349 348 write limit reached; closing socket
350 349 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
351 350
352 351 $ rm -f error.log
353 352
354 353 Server sends an incomplete HTTP response body to batch request
355 354
356 355 $ hg serve --config badserver.closeaftersendbytes=793 -p $HGPORT -d --pid-file=hg.pid -E error.log
357 356 $ cat hg.pid > $DAEMON_PIDS
358 357
359 358 TODO client spews a stack due to uncaught ValueError in batch.results()
360 359 #if no-chg
361 360 $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
362 361 [1]
363 362 #else
364 363 $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
365 364 [255]
366 365 #endif
367 366
368 367 $ killdaemons.py $DAEMON_PIDS
369 368
370 369 $ cat error.log
371 370 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
372 371 readline(-1) -> (27) Accept-Encoding: identity\r\n
373 372 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
374 373 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
375 374 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
376 375 readline(-1) -> (2) \r\n
377 376 write(36 from 36) -> (757) HTTP/1.1 200 Script output follows\r\n
378 377 write(23 from 23) -> (734) Server: badhttpserver\r\n
379 378 write(37 from 37) -> (697) Date: $HTTP_DATE$\r\n
380 379 write(41 from 41) -> (656) Content-Type: application/mercurial-0.1\r\n
381 380 write(21 from 21) -> (635) Content-Length: 450\r\n
382 381 write(2 from 2) -> (633) \r\n
383 382 write(450 from 450) -> (183) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
384 383 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
385 384 readline(-1) -> (27) Accept-Encoding: identity\r\n
386 385 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
387 386 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
388 387 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
389 388 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
390 389 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
391 390 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
392 391 readline(-1) -> (2) \r\n
393 392 write(36 from 36) -> (147) HTTP/1.1 200 Script output follows\r\n
394 393 write(23 from 23) -> (124) Server: badhttpserver\r\n
395 394 write(37 from 37) -> (87) Date: $HTTP_DATE$\r\n
396 395 write(41 from 41) -> (46) Content-Type: application/mercurial-0.1\r\n
397 396 write(20 from 20) -> (26) Content-Length: 42\r\n
398 397 write(2 from 2) -> (24) \r\n
399 398 write(24 from 42) -> (0) 96ee1d7354c4ad7372047672
400 399 write limit reached; closing socket
401 400
402 401 $ rm -f error.log
403 402
404 403 Server sends incomplete headers for getbundle response
405 404
406 405 $ hg serve --config badserver.closeaftersendbytes=940 -p $HGPORT -d --pid-file=hg.pid -E error.log
407 406 $ cat hg.pid > $DAEMON_PIDS
408 407
409 408 TODO this output is terrible
410 409
411 410 $ hg clone http://localhost:$HGPORT/ clone
412 411 requesting all changes
413 412 abort: 'http://localhost:$HGPORT/' does not appear to be an hg repository:
414 413 ---%<--- (application/mercuri)
415 414
416 415 ---%<---
417 416 !
418 417 [255]
419 418
420 419 $ killdaemons.py $DAEMON_PIDS
421 420
422 421 $ cat error.log
423 422 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
424 423 readline(-1) -> (27) Accept-Encoding: identity\r\n
425 424 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
426 425 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
427 426 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
428 427 readline(-1) -> (2) \r\n
429 428 write(36 from 36) -> (904) HTTP/1.1 200 Script output follows\r\n
430 429 write(23 from 23) -> (881) Server: badhttpserver\r\n
431 430 write(37 from 37) -> (844) Date: $HTTP_DATE$\r\n
432 431 write(41 from 41) -> (803) Content-Type: application/mercurial-0.1\r\n
433 432 write(21 from 21) -> (782) Content-Length: 450\r\n
434 433 write(2 from 2) -> (780) \r\n
435 434 write(450 from 450) -> (330) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
436 435 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
437 436 readline(-1) -> (27) Accept-Encoding: identity\r\n
438 437 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
439 438 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
440 439 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
441 440 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
442 441 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
443 442 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
444 443 readline(-1) -> (2) \r\n
445 444 write(36 from 36) -> (294) HTTP/1.1 200 Script output follows\r\n
446 445 write(23 from 23) -> (271) Server: badhttpserver\r\n
447 446 write(37 from 37) -> (234) Date: $HTTP_DATE$\r\n
448 447 write(41 from 41) -> (193) Content-Type: application/mercurial-0.1\r\n
449 448 write(20 from 20) -> (173) Content-Length: 42\r\n
450 449 write(2 from 2) -> (171) \r\n
451 450 write(42 from 42) -> (129) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
452 451 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
453 452 readline(-1) -> (27) Accept-Encoding: identity\r\n
454 453 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
455 454 readline(-1) -> (461) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Arev-branch-cache%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n
456 455 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
457 456 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
458 457 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
459 458 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
460 459 readline(-1) -> (2) \r\n
461 460 write(36 from 36) -> (93) HTTP/1.1 200 Script output follows\r\n
462 461 write(23 from 23) -> (70) Server: badhttpserver\r\n
463 462 write(37 from 37) -> (33) Date: $HTTP_DATE$\r\n
464 463 write(33 from 41) -> (0) Content-Type: application/mercuri
465 464 write limit reached; closing socket
466 465 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
467 466
468 467 $ rm -f error.log
469 468
470 469 Server stops before it sends transfer encoding
471 470
472 471 $ hg serve --config badserver.closeaftersendbytes=973 -p $HGPORT -d --pid-file=hg.pid -E error.log
473 472 $ cat hg.pid > $DAEMON_PIDS
474 473
475 474 $ hg clone http://localhost:$HGPORT/ clone
476 475 requesting all changes
477 476 abort: stream ended unexpectedly (got 0 bytes, expected 1)
478 477 [255]
479 478
480 479 $ killdaemons.py $DAEMON_PIDS
481 480
482 481 $ tail -4 error.log
483 482 write(41 from 41) -> (25) Content-Type: application/mercurial-0.2\r\n
484 483 write(25 from 28) -> (0) Transfer-Encoding: chunke
485 484 write limit reached; closing socket
486 485 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
487 486
488 487 $ rm -f error.log
489 488
490 489 Server sends empty HTTP body for getbundle
491 490
492 491 $ hg serve --config badserver.closeaftersendbytes=978 -p $HGPORT -d --pid-file=hg.pid -E error.log
493 492 $ cat hg.pid > $DAEMON_PIDS
494 493
495 494 $ hg clone http://localhost:$HGPORT/ clone
496 495 requesting all changes
497 496 abort: HTTP request error (incomplete response)
498 497 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
499 498 [255]
500 499
501 500 $ killdaemons.py $DAEMON_PIDS
502 501
503 502 $ cat error.log
504 503 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
505 504 readline(-1) -> (27) Accept-Encoding: identity\r\n
506 505 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
507 506 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
508 507 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
509 508 readline(-1) -> (2) \r\n
510 509 write(36 from 36) -> (942) HTTP/1.1 200 Script output follows\r\n
511 510 write(23 from 23) -> (919) Server: badhttpserver\r\n
512 511 write(37 from 37) -> (882) Date: $HTTP_DATE$\r\n
513 512 write(41 from 41) -> (841) Content-Type: application/mercurial-0.1\r\n
514 513 write(21 from 21) -> (820) Content-Length: 450\r\n
515 514 write(2 from 2) -> (818) \r\n
516 515 write(450 from 450) -> (368) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
517 516 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
518 517 readline(-1) -> (27) Accept-Encoding: identity\r\n
519 518 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
520 519 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
521 520 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
522 521 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
523 522 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
524 523 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
525 524 readline(-1) -> (2) \r\n
526 525 write(36 from 36) -> (332) HTTP/1.1 200 Script output follows\r\n
527 526 write(23 from 23) -> (309) Server: badhttpserver\r\n
528 527 write(37 from 37) -> (272) Date: $HTTP_DATE$\r\n
529 528 write(41 from 41) -> (231) Content-Type: application/mercurial-0.1\r\n
530 529 write(20 from 20) -> (211) Content-Length: 42\r\n
531 530 write(2 from 2) -> (209) \r\n
532 531 write(42 from 42) -> (167) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
533 532 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
534 533 readline(-1) -> (27) Accept-Encoding: identity\r\n
535 534 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
536 535 readline(-1) -> (461) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Arev-branch-cache%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n
537 536 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
538 537 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
539 538 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
540 539 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
541 540 readline(-1) -> (2) \r\n
542 541 write(36 from 36) -> (131) HTTP/1.1 200 Script output follows\r\n
543 542 write(23 from 23) -> (108) Server: badhttpserver\r\n
544 543 write(37 from 37) -> (71) Date: $HTTP_DATE$\r\n
545 544 write(41 from 41) -> (30) Content-Type: application/mercurial-0.2\r\n
546 545 write(28 from 28) -> (2) Transfer-Encoding: chunked\r\n
547 546 write(2 from 2) -> (0) \r\n
548 547 write limit reached; closing socket
549 548 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
550 549
551 550 $ rm -f error.log
552 551
553 552 Server sends partial compression string
554 553
555 554 $ hg serve --config badserver.closeaftersendbytes=1002 -p $HGPORT -d --pid-file=hg.pid -E error.log
556 555 $ cat hg.pid > $DAEMON_PIDS
557 556
558 557 $ hg clone http://localhost:$HGPORT/ clone
559 558 requesting all changes
560 559 abort: HTTP request error (incomplete response)
561 560 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
562 561 [255]
563 562
564 563 $ killdaemons.py $DAEMON_PIDS
565 564
566 565 $ cat error.log
567 566 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
568 567 readline(-1) -> (27) Accept-Encoding: identity\r\n
569 568 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
570 569 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
571 570 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
572 571 readline(-1) -> (2) \r\n
573 572 write(36 from 36) -> (966) HTTP/1.1 200 Script output follows\r\n
574 573 write(23 from 23) -> (943) Server: badhttpserver\r\n
575 574 write(37 from 37) -> (906) Date: $HTTP_DATE$\r\n
576 575 write(41 from 41) -> (865) Content-Type: application/mercurial-0.1\r\n
577 576 write(21 from 21) -> (844) Content-Length: 450\r\n
578 577 write(2 from 2) -> (842) \r\n
579 578 write(450 from 450) -> (392) batch branchmap $USUAL_BUNDLE2_CAPS_NO_PHASES$ changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
580 579 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
581 580 readline(-1) -> (27) Accept-Encoding: identity\r\n
582 581 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
583 582 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
584 583 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
585 584 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
586 585 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
587 586 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
588 587 readline(-1) -> (2) \r\n
589 588 write(36 from 36) -> (356) HTTP/1.1 200 Script output follows\r\n
590 589 write(23 from 23) -> (333) Server: badhttpserver\r\n
591 590 write(37 from 37) -> (296) Date: $HTTP_DATE$\r\n
592 591 write(41 from 41) -> (255) Content-Type: application/mercurial-0.1\r\n
593 592 write(20 from 20) -> (235) Content-Length: 42\r\n
594 593 write(2 from 2) -> (233) \r\n
595 594 write(42 from 42) -> (191) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
596 595 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
597 596 readline(-1) -> (27) Accept-Encoding: identity\r\n
598 597 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
599 598 readline(-1) -> (461) x-hgarg-1: bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Arev-branch-cache%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=96ee1d7354c4ad7372047672c36a1f561e3a6a4c&listkeys=phases%2Cbookmarks\r\n
600 599 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
601 600 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
602 601 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
603 602 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
604 603 readline(-1) -> (2) \r\n
605 604 write(36 from 36) -> (155) HTTP/1.1 200 Script output follows\r\n
606 605 write(23 from 23) -> (132) Server: badhttpserver\r\n
607 606 write(37 from 37) -> (95) Date: $HTTP_DATE$\r\n
608 607 write(41 from 41) -> (54) Content-Type: application/mercurial-0.2\r\n
609 608 write(28 from 28) -> (26) Transfer-Encoding: chunked\r\n
610 609 write(2 from 2) -> (24) \r\n
611 610 write(6 from 6) -> (18) 1\\r\\n\x04\\r\\n (esc)
612 611 write(9 from 9) -> (9) 4\r\nnone\r\n
613 612 write(9 from 9) -> (0) 4\r\nHG20\r\n
614 613 write limit reached; closing socket
615 614 write(27) -> 15\r\nInternal Server Error\r\n
616 615
617 616 $ rm -f error.log
618 617
619 618 Server sends partial bundle2 header magic
620 619
621 620 $ hg serve --config badserver.closeaftersendbytes=999 -p $HGPORT -d --pid-file=hg.pid -E error.log
622 621 $ cat hg.pid > $DAEMON_PIDS
623 622
624 623 $ hg clone http://localhost:$HGPORT/ clone
625 624 requesting all changes
626 625 abort: HTTP request error (incomplete response; expected 4 bytes got 3)
627 626 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
628 627 [255]
629 628
630 629 $ killdaemons.py $DAEMON_PIDS
631 630
632 631 $ tail -7 error.log
633 632 write(28 from 28) -> (23) Transfer-Encoding: chunked\r\n
634 633 write(2 from 2) -> (21) \r\n
635 634 write(6 from 6) -> (15) 1\\r\\n\x04\\r\\n (esc)
636 635 write(9 from 9) -> (6) 4\r\nnone\r\n
637 636 write(6 from 9) -> (0) 4\r\nHG2
638 637 write limit reached; closing socket
639 638 write(27) -> 15\r\nInternal Server Error\r\n
640 639
641 640 $ rm -f error.log
642 641
643 642 Server sends incomplete bundle2 stream params length
644 643
645 644 $ hg serve --config badserver.closeaftersendbytes=1008 -p $HGPORT -d --pid-file=hg.pid -E error.log
646 645 $ cat hg.pid > $DAEMON_PIDS
647 646
648 647 $ hg clone http://localhost:$HGPORT/ clone
649 648 requesting all changes
650 649 abort: HTTP request error (incomplete response; expected 4 bytes got 3)
651 650 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
652 651 [255]
653 652
654 653 $ killdaemons.py $DAEMON_PIDS
655 654
656 655 $ tail -8 error.log
657 656 write(28 from 28) -> (32) Transfer-Encoding: chunked\r\n
658 657 write(2 from 2) -> (30) \r\n
659 658 write(6 from 6) -> (24) 1\\r\\n\x04\\r\\n (esc)
660 659 write(9 from 9) -> (15) 4\r\nnone\r\n
661 660 write(9 from 9) -> (6) 4\r\nHG20\r\n
662 661 write(6 from 9) -> (0) 4\\r\\n\x00\x00\x00 (esc)
663 662 write limit reached; closing socket
664 663 write(27) -> 15\r\nInternal Server Error\r\n
665 664
666 665 $ rm -f error.log
667 666
668 667 Servers stops after bundle2 stream params header
669 668
670 669 $ hg serve --config badserver.closeaftersendbytes=1011 -p $HGPORT -d --pid-file=hg.pid -E error.log
671 670 $ cat hg.pid > $DAEMON_PIDS
672 671
673 672 $ hg clone http://localhost:$HGPORT/ clone
674 673 requesting all changes
675 674 abort: HTTP request error (incomplete response)
676 675 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
677 676 [255]
678 677
679 678 $ killdaemons.py $DAEMON_PIDS
680 679
681 680 $ tail -8 error.log
682 681 write(28 from 28) -> (35) Transfer-Encoding: chunked\r\n
683 682 write(2 from 2) -> (33) \r\n
684 683 write(6 from 6) -> (27) 1\\r\\n\x04\\r\\n (esc)
685 684 write(9 from 9) -> (18) 4\r\nnone\r\n
686 685 write(9 from 9) -> (9) 4\r\nHG20\r\n
687 686 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
688 687 write limit reached; closing socket
689 688 write(27) -> 15\r\nInternal Server Error\r\n
690 689
691 690 $ rm -f error.log
692 691
693 692 Server stops sending after bundle2 part header length
694 693
695 694 $ hg serve --config badserver.closeaftersendbytes=1020 -p $HGPORT -d --pid-file=hg.pid -E error.log
696 695 $ cat hg.pid > $DAEMON_PIDS
697 696
698 697 $ hg clone http://localhost:$HGPORT/ clone
699 698 requesting all changes
700 699 abort: HTTP request error (incomplete response)
701 700 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
702 701 [255]
703 702
704 703 $ killdaemons.py $DAEMON_PIDS
705 704
706 705 $ tail -9 error.log
707 706 write(28 from 28) -> (44) Transfer-Encoding: chunked\r\n
708 707 write(2 from 2) -> (42) \r\n
709 708 write(6 from 6) -> (36) 1\\r\\n\x04\\r\\n (esc)
710 709 write(9 from 9) -> (27) 4\r\nnone\r\n
711 710 write(9 from 9) -> (18) 4\r\nHG20\r\n
712 711 write(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
713 712 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
714 713 write limit reached; closing socket
715 714 write(27) -> 15\r\nInternal Server Error\r\n
716 715
717 716 $ rm -f error.log
718 717
719 718 Server stops sending after bundle2 part header
720 719
721 720 $ hg serve --config badserver.closeaftersendbytes=1067 -p $HGPORT -d --pid-file=hg.pid -E error.log
722 721 $ cat hg.pid > $DAEMON_PIDS
723 722
724 723 $ hg clone http://localhost:$HGPORT/ clone
725 724 requesting all changes
726 725 adding changesets
727 726 transaction abort!
728 727 rollback completed
729 728 abort: HTTP request error (incomplete response)
730 729 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
731 730 [255]
732 731
733 732 $ killdaemons.py $DAEMON_PIDS
734 733
735 734 $ tail -10 error.log
736 735 write(28 from 28) -> (91) Transfer-Encoding: chunked\r\n
737 736 write(2 from 2) -> (89) \r\n
738 737 write(6 from 6) -> (83) 1\\r\\n\x04\\r\\n (esc)
739 738 write(9 from 9) -> (74) 4\r\nnone\r\n
740 739 write(9 from 9) -> (65) 4\r\nHG20\r\n
741 740 write(9 from 9) -> (56) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
742 741 write(9 from 9) -> (47) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
743 742 write(47 from 47) -> (0) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
744 743 write limit reached; closing socket
745 744 write(27) -> 15\r\nInternal Server Error\r\n
746 745
747 746 $ rm -f error.log
748 747
749 748 Server stops after bundle2 part payload chunk size
750 749
751 750 $ hg serve --config badserver.closeaftersendbytes=1088 -p $HGPORT -d --pid-file=hg.pid -E error.log
752 751 $ cat hg.pid > $DAEMON_PIDS
753 752
754 753 $ hg clone http://localhost:$HGPORT/ clone
755 754 requesting all changes
756 755 adding changesets
757 756 transaction abort!
758 757 rollback completed
759 758 abort: HTTP request error (incomplete response; expected 466 bytes got 7)
760 759 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
761 760 [255]
762 761
763 762 $ killdaemons.py $DAEMON_PIDS
764 763
765 764 $ tail -11 error.log
766 765 write(2 from 2) -> (110) \r\n
767 766 write(6 from 6) -> (104) 1\\r\\n\x04\\r\\n (esc)
768 767 write(9 from 9) -> (95) 4\r\nnone\r\n
769 768 write(9 from 9) -> (86) 4\r\nHG20\r\n
770 769 write(9 from 9) -> (77) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
771 770 write(9 from 9) -> (68) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
772 771 write(47 from 47) -> (21) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
773 772 write(9 from 9) -> (12) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
774 773 write(12 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1d (esc)
775 774 write limit reached; closing socket
776 775 write(27) -> 15\r\nInternal Server Error\r\n
777 776
778 777 $ rm -f error.log
779 778
780 779 Server stops sending in middle of bundle2 payload chunk
781 780
782 781 $ hg serve --config badserver.closeaftersendbytes=1549 -p $HGPORT -d --pid-file=hg.pid -E error.log
783 782 $ cat hg.pid > $DAEMON_PIDS
784 783
785 784 $ hg clone http://localhost:$HGPORT/ clone
786 785 requesting all changes
787 786 adding changesets
788 787 transaction abort!
789 788 rollback completed
790 789 abort: HTTP request error (incomplete response)
791 790 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
792 791 [255]
793 792
794 793 $ killdaemons.py $DAEMON_PIDS
795 794
796 795 $ tail -12 error.log
797 796 write(28 from 28) -> (573) Transfer-Encoding: chunked\r\n
798 797 write(2 from 2) -> (571) \r\n
799 798 write(6 from 6) -> (565) 1\\r\\n\x04\\r\\n (esc)
800 799 write(9 from 9) -> (556) 4\r\nnone\r\n
801 800 write(9 from 9) -> (547) 4\r\nHG20\r\n
802 801 write(9 from 9) -> (538) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
803 802 write(9 from 9) -> (529) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
804 803 write(47 from 47) -> (482) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
805 804 write(9 from 9) -> (473) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
806 805 write(473 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
807 806 write limit reached; closing socket
808 807 write(27) -> 15\r\nInternal Server Error\r\n
809 808
810 809 $ rm -f error.log
811 810
812 811 Server stops sending after 0 length payload chunk size
813 812
814 813 $ hg serve --config badserver.closeaftersendbytes=1580 -p $HGPORT -d --pid-file=hg.pid -E error.log
815 814 $ cat hg.pid > $DAEMON_PIDS
816 815
817 816 $ hg clone http://localhost:$HGPORT/ clone
818 817 requesting all changes
819 818 adding changesets
820 819 adding manifests
821 820 adding file changes
822 821 added 1 changesets with 1 changes to 1 files
823 822 transaction abort!
824 823 rollback completed
825 824 abort: HTTP request error (incomplete response; expected 32 bytes got 9)
826 825 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
827 826 [255]
828 827
829 828 $ killdaemons.py $DAEMON_PIDS
830 829
831 830 $ tail -13 error.log
832 831 write(6 from 6) -> (596) 1\\r\\n\x04\\r\\n (esc)
833 832 write(9 from 9) -> (587) 4\r\nnone\r\n
834 833 write(9 from 9) -> (578) 4\r\nHG20\r\n
835 834 write(9 from 9) -> (569) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
836 835 write(9 from 9) -> (560) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
837 836 write(47 from 47) -> (513) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
838 837 write(9 from 9) -> (504) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
839 838 write(473 from 473) -> (31) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
840 839 write(9 from 9) -> (22) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
841 840 write(9 from 9) -> (13) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
842 841 write(13 from 38) -> (0) 20\\r\\n\x08LISTKEYS (esc)
843 842 write limit reached; closing socket
844 843 write(27) -> 15\r\nInternal Server Error\r\n
845 844
846 845 $ rm -f error.log
847 846
848 847 Server stops sending after 0 part bundle part header (indicating end of bundle2 payload)
849 848 This is before the 0 size chunked transfer part that signals end of HTTP response.
850 849
851 850 # $ hg serve --config badserver.closeaftersendbytes=1755 -p $HGPORT -d --pid-file=hg.pid -E error.log
852 851 $ hg serve --config badserver.closeaftersendbytes=1862 -p $HGPORT -d --pid-file=hg.pid -E error.log
853 852 $ cat hg.pid > $DAEMON_PIDS
854 853
855 854 $ hg clone http://localhost:$HGPORT/ clone
856 855 requesting all changes
857 856 adding changesets
858 857 adding manifests
859 858 adding file changes
860 859 added 1 changesets with 1 changes to 1 files
861 860 new changesets 96ee1d7354c4
862 861 updating to branch default
863 862 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
864 863
865 864 $ killdaemons.py $DAEMON_PIDS
866 865
867 866 $ tail -22 error.log
868 867 write(9 from 9) -> (851) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
869 868 write(9 from 9) -> (842) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
870 869 write(47 from 47) -> (795) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
871 870 write(9 from 9) -> (786) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
872 871 write(473 from 473) -> (313) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
873 872 write(9 from 9) -> (304) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
874 873 write(9 from 9) -> (295) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
875 874 write(38 from 38) -> (257) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00 \x06namespacephases\\r\\n (esc)
876 875 write(9 from 9) -> (248) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
877 876 write(64 from 64) -> (184) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c 1\npublishing True\r\n
878 877 write(9 from 9) -> (175) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
879 878 write(9 from 9) -> (166) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
880 879 write(41 from 41) -> (125) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00 namespacebookmarks\\r\\n (esc)
881 880 write(9 from 9) -> (116) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
882 881 write(9 from 9) -> (107) 4\\r\\n\x00\x00\x00\x1d\\r\\n (esc)
883 882 write(35 from 35) -> (72) 1d\\r\\n\x16cache:rev-branch-cache\x00\x00\x00\x03\x00\x00\\r\\n (esc)
884 883 write(9 from 9) -> (63) 4\\r\\n\x00\x00\x00'\\r\\n (esc)
885 884 write(45 from 45) -> (18) 27\\r\\n\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00default\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\\r\\n (esc)
886 885 write(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
887 886 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
888 887 write limit reached; closing socket
889 888 write(27) -> 15\r\nInternal Server Error\r\n
890 889
891 890 $ rm -f error.log
892 891 $ rm -rf clone
893 892
894 893 Server sends a size 0 chunked-transfer size without terminating \r\n
895 894
896 895 $ hg serve --config badserver.closeaftersendbytes=1865 -p $HGPORT -d --pid-file=hg.pid -E error.log
897 896 $ cat hg.pid > $DAEMON_PIDS
898 897
899 898 $ hg clone http://localhost:$HGPORT/ clone
900 899 requesting all changes
901 900 adding changesets
902 901 adding manifests
903 902 adding file changes
904 903 added 1 changesets with 1 changes to 1 files
905 904 new changesets 96ee1d7354c4
906 905 updating to branch default
907 906 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
908 907
909 908 $ killdaemons.py $DAEMON_PIDS
910 909
911 910 $ tail -23 error.log
912 911 write(9 from 9) -> (854) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
913 912 write(9 from 9) -> (845) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
914 913 write(47 from 47) -> (798) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
915 914 write(9 from 9) -> (789) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
916 915 write(473 from 473) -> (316) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>6a3df4de388f3c4f8e28f4f9a814299a3cbb5f50\\ntest\\n0 0\\nfoo\\n\\ninitial\x00\x00\x00\x00\x00\x00\x00\xa1j=\xf4\xde8\x8f<O\x8e(\xf4\xf9\xa8\x14)\x9a<\xbb_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-foo\x00b80de5d138758541c5f05265ad144ab9fa86d1db\\n\x00\x00\x00\x00\x00\x00\x00\x07foo\x00\x00\x00h\xb8\\r\xe5\xd18u\x85A\xc5\xf0Re\xad\x14J\xb9\xfa\x86\xd1\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\x00\x00\x00\x00\x00\x00\x00\x00\\r\\n (esc)
917 916 write(9 from 9) -> (307) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
918 917 write(9 from 9) -> (298) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
919 918 write(38 from 38) -> (260) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00 \x06namespacephases\\r\\n (esc)
920 919 write(9 from 9) -> (251) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
921 920 write(64 from 64) -> (187) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c 1\npublishing True\r\n
922 921 write(9 from 9) -> (178) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
923 922 write(9 from 9) -> (169) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
924 923 write(41 from 41) -> (128) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00 namespacebookmarks\\r\\n (esc)
925 924 write(9 from 9) -> (119) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
926 925 write(9 from 9) -> (110) 4\\r\\n\x00\x00\x00\x1d\\r\\n (esc)
927 926 write(35 from 35) -> (75) 1d\\r\\n\x16cache:rev-branch-cache\x00\x00\x00\x03\x00\x00\\r\\n (esc)
928 927 write(9 from 9) -> (66) 4\\r\\n\x00\x00\x00'\\r\\n (esc)
929 928 write(45 from 45) -> (21) 27\\r\\n\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00default\x96\xee\x1dsT\xc4\xadsr\x04vr\xc3j\x1fV\x1e:jL\\r\\n (esc)
930 929 write(9 from 9) -> (12) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
931 930 write(9 from 9) -> (3) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
932 931 write(3 from 5) -> (0) 0\r\n
933 932 write limit reached; closing socket
934 933 write(27) -> 15\r\nInternal Server Error\r\n
935 934
936 935 $ rm -f error.log
937 936 $ rm -rf clone
@@ -1,123 +1,122 b''
1 1 #require serve
2 2
3 3 $ hg init a
4 4 $ cd a
5 5 $ echo a > a
6 6 $ hg ci -Ama -d '1123456789 0'
7 7 adding a
8 8 $ hg serve --config server.uncompressed=True -p $HGPORT -d --pid-file=hg.pid
9 9 $ cat hg.pid >> $DAEMON_PIDS
10 10 $ cd ..
11 11 $ tinyproxy.py $HGPORT1 localhost 2>proxy.log >/dev/null </dev/null &
12 12 $ while [ ! -f proxy.pid ]; do sleep 0; done
13 13 $ cat proxy.pid >> $DAEMON_PIDS
14 14
15 15 url for proxy, stream
16 16
17 17 $ http_proxy=http://localhost:$HGPORT1/ hg --config http_proxy.always=True clone --stream http://localhost:$HGPORT/ b
18 18 streaming all changes
19 19 6 files to transfer, 412 bytes of data (reporevlogstore !)
20 20 4 files to transfer, 330 bytes of data (reposimplestore !)
21 21 transferred * bytes in * seconds (*/sec) (glob)
22 22 updating to branch default
23 23 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
24 24 $ cd b
25 25 $ hg verify
26 26 checking changesets
27 27 checking manifests
28 28 crosschecking files in changesets and manifests
29 29 checking files
30 30 checked 1 changesets with 1 changes to 1 files
31 31 $ cd ..
32 32
33 33 url for proxy, pull
34 34
35 35 $ http_proxy=http://localhost:$HGPORT1/ hg --config http_proxy.always=True clone http://localhost:$HGPORT/ b-pull
36 36 requesting all changes
37 37 adding changesets
38 38 adding manifests
39 39 adding file changes
40 40 added 1 changesets with 1 changes to 1 files
41 41 new changesets 83180e7845de
42 42 updating to branch default
43 43 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
44 44 $ cd b-pull
45 45 $ hg verify
46 46 checking changesets
47 47 checking manifests
48 48 crosschecking files in changesets and manifests
49 49 checking files
50 50 checked 1 changesets with 1 changes to 1 files
51 51 $ cd ..
52 52
53 53 host:port for proxy
54 54
55 55 $ http_proxy=localhost:$HGPORT1 hg clone --config http_proxy.always=True http://localhost:$HGPORT/ c
56 56 requesting all changes
57 57 adding changesets
58 58 adding manifests
59 59 adding file changes
60 60 added 1 changesets with 1 changes to 1 files
61 61 new changesets 83180e7845de
62 62 updating to branch default
63 63 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
64 64
65 65 proxy url with user name and password
66 66
67 67 $ http_proxy=http://user:passwd@localhost:$HGPORT1 hg clone --config http_proxy.always=True http://localhost:$HGPORT/ d
68 68 requesting all changes
69 69 adding changesets
70 70 adding manifests
71 71 adding file changes
72 72 added 1 changesets with 1 changes to 1 files
73 73 new changesets 83180e7845de
74 74 updating to branch default
75 75 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
76 76
77 77 url with user name and password
78 78
79 79 $ http_proxy=http://user:passwd@localhost:$HGPORT1 hg clone --config http_proxy.always=True http://user:passwd@localhost:$HGPORT/ e
80 80 requesting all changes
81 81 adding changesets
82 82 adding manifests
83 83 adding file changes
84 84 added 1 changesets with 1 changes to 1 files
85 85 new changesets 83180e7845de
86 86 updating to branch default
87 87 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
88 88
89 89 bad host:port for proxy ("Protocol not supported" can happen on
90 90 misconfigured hosts)
91 91
92 92 $ http_proxy=localhost:$HGPORT2 hg clone --config http_proxy.always=True http://localhost:$HGPORT/ f
93 abort: error: (Connection refused|Protocol not supported|.* actively refused it) (re) (?)
94 abort: error: $EADDRNOTAVAIL$ (?)
93 abort: error: (Connection refused|Protocol not supported|.* actively refused it|\$EADDRNOTAVAIL\$) (re)
95 94 [255]
96 95
97 96 do not use the proxy if it is in the no list
98 97
99 98 $ http_proxy=localhost:$HGPORT1 hg clone --config http_proxy.no=localhost http://localhost:$HGPORT/ g
100 99 requesting all changes
101 100 adding changesets
102 101 adding manifests
103 102 adding file changes
104 103 added 1 changesets with 1 changes to 1 files
105 104 new changesets 83180e7845de
106 105 updating to branch default
107 106 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
108 107 $ cat proxy.log
109 108 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
110 109 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
111 110 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=0&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=bookmarks&stream=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
112 111 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
113 112 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
114 113 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
115 114 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
116 115 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
117 116 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
118 117 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
119 118 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
120 119 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
121 120 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
122 121 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
123 122 $LOCALIP - - [$LOGDATE$] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
General Comments 0
You need to be logged in to leave comments. Login now