##// END OF EJS Templates
tests: refactor common bundle2 capabilities...
Joerg Sonnenberger -
r38751:88be288e @86 default
parent child Browse files
Show More
@@ -1,179 +1,193 b''
1 # common patterns in test at can safely be replaced
1 # common patterns in test at can safely be replaced
2 from __future__ import absolute_import
2 from __future__ import absolute_import
3
3
4 import os
4 import os
5
5
6 substitutions = [
6 substitutions = [
7 # list of possible compressions
7 # list of possible compressions
8 (br'(zstd,)?zlib,none,bzip2',
8 (br'(zstd,)?zlib,none,bzip2',
9 br'$USUAL_COMPRESSIONS$'
9 br'$USUAL_COMPRESSIONS$'
10 ),
10 ),
11 (br'=(zstd,)?zlib',
11 (br'=(zstd,)?zlib',
12 br'=$BUNDLE2_COMPRESSIONS$'
12 br'=$BUNDLE2_COMPRESSIONS$'
13 ),
13 ),
14 # capabilities sent through http
14 # capabilities sent through http
15 (br'bundlecaps=HG20%2Cbundle2%3DHG20%250A'
15 (br'bundlecaps=HG20%2Cbundle2%3DHG20%250A'
16 br'bookmarks%250A'
16 br'bookmarks%250A'
17 br'changegroup%253D01%252C02%250A'
17 br'changegroup%253D01%252C02%250A'
18 br'digests%253Dmd5%252Csha1%252Csha512%250A'
18 br'digests%253Dmd5%252Csha1%252Csha512%250A'
19 br'error%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250A'
19 br'error%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250A'
20 br'hgtagsfnodes%250A'
20 br'hgtagsfnodes%250A'
21 br'listkeys%250A'
21 br'listkeys%250A'
22 br'phases%253Dheads%250A'
22 br'phases%253Dheads%250A'
23 br'pushkey%250A'
23 br'pushkey%250A'
24 br'remote-changegroup%253Dhttp%252Chttps%250A'
24 br'remote-changegroup%253Dhttp%252Chttps%250A'
25 br'rev-branch-cache%250A'
25 br'rev-branch-cache%250A'
26 br'stream%253Dv2',
26 br'stream%253Dv2',
27 # (the replacement patterns)
27 # (the replacement patterns)
28 br'$USUAL_BUNDLE_CAPS$'
28 br'$USUAL_BUNDLE_CAPS$'
29 ),
29 ),
30 (br'bundlecaps=HG20%2Cbundle2%3DHG20%250A'
30 (br'bundlecaps=HG20%2Cbundle2%3DHG20%250A'
31 br'bookmarks%250A'
31 br'bookmarks%250A'
32 br'changegroup%253D01%252C02%250A'
32 br'changegroup%253D01%252C02%250A'
33 br'digests%253Dmd5%252Csha1%252Csha512%250A'
33 br'digests%253Dmd5%252Csha1%252Csha512%250A'
34 br'error%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250A'
34 br'error%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250A'
35 br'hgtagsfnodes%250A'
35 br'hgtagsfnodes%250A'
36 br'listkeys%250A'
36 br'listkeys%250A'
37 br'phases%253Dheads%250A'
37 br'phases%253Dheads%250A'
38 br'pushkey%250A'
38 br'pushkey%250A'
39 br'remote-changegroup%253Dhttp%252Chttps',
39 br'remote-changegroup%253Dhttp%252Chttps',
40 # (the replacement patterns)
40 # (the replacement patterns)
41 br'$USUAL_BUNDLE_CAPS_SERVER$'
41 br'$USUAL_BUNDLE_CAPS_SERVER$'
42 ),
42 ),
43 # bundle2 capabilities sent through ssh
43 # bundle2 capabilities sent through ssh
44 (br'bundle2=HG20%0A'
44 (br'bundle2=HG20%0A'
45 br'bookmarks%0A'
45 br'bookmarks%0A'
46 br'changegroup%3D01%2C02%0A'
46 br'changegroup%3D01%2C02%0A'
47 br'digests%3Dmd5%2Csha1%2Csha512%0A'
47 br'digests%3Dmd5%2Csha1%2Csha512%0A'
48 br'error%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0A'
48 br'error%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0A'
49 br'hgtagsfnodes%0A'
49 br'hgtagsfnodes%0A'
50 br'listkeys%0A'
50 br'listkeys%0A'
51 br'phases%3Dheads%0A'
51 br'phases%3Dheads%0A'
52 br'pushkey%0A'
52 br'pushkey%0A'
53 br'remote-changegroup%3Dhttp%2Chttps%0A'
53 br'remote-changegroup%3Dhttp%2Chttps%0A'
54 br'rev-branch-cache%0A'
54 br'rev-branch-cache%0A'
55 br'stream%3Dv2',
55 br'stream%3Dv2',
56 # (replacement patterns)
56 # (replacement patterns)
57 br'$USUAL_BUNDLE2_CAPS$'
57 br'$USUAL_BUNDLE2_CAPS$'
58 ),
58 ),
59 # bundle2 capabilities advertised by the server
59 # bundle2 capabilities advertised by the server
60 (br'bundle2=HG20%0A'
60 (br'bundle2=HG20%0A'
61 br'bookmarks%0A'
61 br'bookmarks%0A'
62 br'changegroup%3D01%2C02%0A'
62 br'changegroup%3D01%2C02%0A'
63 br'digests%3Dmd5%2Csha1%2Csha512%0A'
63 br'digests%3Dmd5%2Csha1%2Csha512%0A'
64 br'error%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0A'
64 br'error%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0A'
65 br'hgtagsfnodes%0A'
65 br'hgtagsfnodes%0A'
66 br'listkeys%0A'
66 br'listkeys%0A'
67 br'phases%3Dheads%0A'
67 br'phases%3Dheads%0A'
68 br'pushkey%0A'
68 br'pushkey%0A'
69 br'remote-changegroup%3Dhttp%2Chttps%0A'
69 br'remote-changegroup%3Dhttp%2Chttps%0A'
70 br'rev-branch-cache',
70 br'rev-branch-cache',
71 # (replacement patterns)
71 # (replacement patterns)
72 br'$USUAL_BUNDLE2_CAPS_SERVER$'
72 br'$USUAL_BUNDLE2_CAPS_SERVER$'
73 ),
73 ),
74 (
75 br'bundle2=HG20%0A'
76 br'bookmarks%0A'
77 br'changegroup%3D01%2C02%0A'
78 br'digests%3Dmd5%2Csha1%2Csha512%0A'
79 br'error%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0A'
80 br'hgtagsfnodes%0A'
81 br'listkeys%0A'
82 br'pushkey%0A'
83 br'remote-changegroup%3Dhttp%2Chttps%0A'
84 br'rev-branch-cache',
85 # (replacement patterns)
86 br'$USUAL_BUNDLE2_CAPS_NO_PHASES$'
87 ),
74 # HTTP access log dates
88 # HTTP access log dates
75 (br' - - \[\d\d/.../2\d\d\d \d\d:\d\d:\d\d] "(GET|PUT|POST)',
89 (br' - - \[\d\d/.../2\d\d\d \d\d:\d\d:\d\d] "(GET|PUT|POST)',
76 lambda m: br' - - [$LOGDATE$] "' + m.group(1)
90 lambda m: br' - - [$LOGDATE$] "' + m.group(1)
77 ),
91 ),
78 # HTTP error log dates
92 # HTTP error log dates
79 (br' - - \[\d\d/.../2\d\d\d \d\d:\d\d:\d\d] (HG error:|Exception)',
93 (br' - - \[\d\d/.../2\d\d\d \d\d:\d\d:\d\d] (HG error:|Exception)',
80 lambda m: br' - - [$ERRDATE$] ' + m.group(1)
94 lambda m: br' - - [$ERRDATE$] ' + m.group(1)
81 ),
95 ),
82 # HTTP header dates- RFC 1123
96 # HTTP header dates- RFC 1123
83 (br'([Dd]ate): [A-Za-z]{3}, \d\d [A-Za-z]{3} \d{4} \d\d:\d\d:\d\d GMT',
97 (br'([Dd]ate): [A-Za-z]{3}, \d\d [A-Za-z]{3} \d{4} \d\d:\d\d:\d\d GMT',
84 lambda m: br'%s: $HTTP_DATE$' % m.group(1)
98 lambda m: br'%s: $HTTP_DATE$' % m.group(1)
85 ),
99 ),
86 # LFS expiration value
100 # LFS expiration value
87 (br'"expires_at": "\d{4}-\d\d-\d\dT\d\d:\d\d:\d\dZ"',
101 (br'"expires_at": "\d{4}-\d\d-\d\dT\d\d:\d\d:\d\dZ"',
88 br'"expires_at": "$ISO_8601_DATE_TIME$"'
102 br'"expires_at": "$ISO_8601_DATE_TIME$"'
89 ),
103 ),
90 # Windows has an extra '/' in the following lines that get globbed away:
104 # Windows has an extra '/' in the following lines that get globbed away:
91 # pushing to file:/*/$TESTTMP/r2 (glob)
105 # pushing to file:/*/$TESTTMP/r2 (glob)
92 # comparing with file:/*/$TESTTMP/r2 (glob)
106 # comparing with file:/*/$TESTTMP/r2 (glob)
93 # sub/maybelarge.dat: largefile 34..9c not available from
107 # sub/maybelarge.dat: largefile 34..9c not available from
94 # file:/*/$TESTTMP/largefiles-repo (glob)
108 # file:/*/$TESTTMP/largefiles-repo (glob)
95 (br'(.*file:/)/?(/\$TESTTMP.*)',
109 (br'(.*file:/)/?(/\$TESTTMP.*)',
96 lambda m: m.group(1) + b'*' + m.group(2) + b' (glob)'
110 lambda m: m.group(1) + b'*' + m.group(2) + b' (glob)'
97 ),
111 ),
98 ]
112 ]
99
113
100 # Various platform error strings, keyed on a common replacement string
114 # Various platform error strings, keyed on a common replacement string
101 _errors = {
115 _errors = {
102 br'$ENOENT$': (
116 br'$ENOENT$': (
103 # strerror()
117 # strerror()
104 br'No such file or directory',
118 br'No such file or directory',
105
119
106 # FormatMessage(ERROR_FILE_NOT_FOUND)
120 # FormatMessage(ERROR_FILE_NOT_FOUND)
107 br'The system cannot find the file specified',
121 br'The system cannot find the file specified',
108 ),
122 ),
109 br'$ENOTDIR$': (
123 br'$ENOTDIR$': (
110 # strerror()
124 # strerror()
111 br'Not a directory',
125 br'Not a directory',
112
126
113 # FormatMessage(ERROR_PATH_NOT_FOUND)
127 # FormatMessage(ERROR_PATH_NOT_FOUND)
114 br'The system cannot find the path specified',
128 br'The system cannot find the path specified',
115 ),
129 ),
116 br'$ECONNRESET$': (
130 br'$ECONNRESET$': (
117 # strerror()
131 # strerror()
118 br'Connection reset by peer',
132 br'Connection reset by peer',
119
133
120 # FormatMessage(WSAECONNRESET)
134 # FormatMessage(WSAECONNRESET)
121 br'An existing connection was forcibly closed by the remote host',
135 br'An existing connection was forcibly closed by the remote host',
122 ),
136 ),
123 br'$EADDRINUSE$': (
137 br'$EADDRINUSE$': (
124 # strerror()
138 # strerror()
125 br'Address already in use',
139 br'Address already in use',
126
140
127 # FormatMessage(WSAEADDRINUSE)
141 # FormatMessage(WSAEADDRINUSE)
128 br'Only one usage of each socket address'
142 br'Only one usage of each socket address'
129 br' \(protocol/network address/port\) is normally permitted',
143 br' \(protocol/network address/port\) is normally permitted',
130 ),
144 ),
131 }
145 }
132
146
133 for replace, msgs in _errors.items():
147 for replace, msgs in _errors.items():
134 substitutions.extend((m, replace) for m in msgs)
148 substitutions.extend((m, replace) for m in msgs)
135
149
136 # Output lines on Windows that can be autocorrected for '\' vs '/' path
150 # Output lines on Windows that can be autocorrected for '\' vs '/' path
137 # differences.
151 # differences.
138 _winpathfixes = [
152 _winpathfixes = [
139 # cloning subrepo s\ss from $TESTTMP/t/s/ss
153 # cloning subrepo s\ss from $TESTTMP/t/s/ss
140 # cloning subrepo foo\bar from http://localhost:$HGPORT/foo/bar
154 # cloning subrepo foo\bar from http://localhost:$HGPORT/foo/bar
141 br'(?m)^cloning subrepo \S+\\.*',
155 br'(?m)^cloning subrepo \S+\\.*',
142
156
143 # pulling from $TESTTMP\issue1852a
157 # pulling from $TESTTMP\issue1852a
144 br'(?m)^pulling from \$TESTTMP\\.*',
158 br'(?m)^pulling from \$TESTTMP\\.*',
145
159
146 # pushing to $TESTTMP\a
160 # pushing to $TESTTMP\a
147 br'(?m)^pushing to \$TESTTMP\\.*',
161 br'(?m)^pushing to \$TESTTMP\\.*',
148
162
149 # pushing subrepo s\ss to $TESTTMP/t/s/ss
163 # pushing subrepo s\ss to $TESTTMP/t/s/ss
150 br'(?m)^pushing subrepo \S+\\\S+ to.*',
164 br'(?m)^pushing subrepo \S+\\\S+ to.*',
151
165
152 # moving d1\d11\a1 to d3/d11/a1
166 # moving d1\d11\a1 to d3/d11/a1
153 br'(?m)^moving \S+\\.*',
167 br'(?m)^moving \S+\\.*',
154
168
155 # d1\a: not recording move - dummy does not exist
169 # d1\a: not recording move - dummy does not exist
156 br'\S+\\\S+: not recording move .+',
170 br'\S+\\\S+: not recording move .+',
157
171
158 # reverting s\a
172 # reverting s\a
159 br'(?m)^reverting (?!subrepo ).*\\.*',
173 br'(?m)^reverting (?!subrepo ).*\\.*',
160
174
161 # saved backup bundle to
175 # saved backup bundle to
162 # $TESTTMP\test\.hg\strip-backup/443431ffac4f-2fc5398a-backup.hg
176 # $TESTTMP\test\.hg\strip-backup/443431ffac4f-2fc5398a-backup.hg
163 br'(?m)^saved backup bundle to \$TESTTMP.*\.hg',
177 br'(?m)^saved backup bundle to \$TESTTMP.*\.hg',
164
178
165 # no changes made to subrepo s\ss since last push to ../tcc/s/ss
179 # no changes made to subrepo s\ss since last push to ../tcc/s/ss
166 br'(?m)^no changes made to subrepo \S+\\\S+ since.*',
180 br'(?m)^no changes made to subrepo \S+\\\S+ since.*',
167
181
168 # changeset 5:9cc5aa7204f0: stuff/maybelarge.dat references missing
182 # changeset 5:9cc5aa7204f0: stuff/maybelarge.dat references missing
169 # $TESTTMP\largefiles-repo-hg\.hg\largefiles\76..38
183 # $TESTTMP\largefiles-repo-hg\.hg\largefiles\76..38
170 br'(?m)^changeset .* references (corrupted|missing) \$TESTTMP\\.*',
184 br'(?m)^changeset .* references (corrupted|missing) \$TESTTMP\\.*',
171
185
172 # stuff/maybelarge.dat: largefile 76..38 not available from
186 # stuff/maybelarge.dat: largefile 76..38 not available from
173 # file:/*/$TESTTMP\largefiles-repo (glob)
187 # file:/*/$TESTTMP\largefiles-repo (glob)
174 br'.*: largefile \S+ not available from file:/\*/.+',
188 br'.*: largefile \S+ not available from file:/\*/.+',
175 ]
189 ]
176
190
177 if os.name == 'nt':
191 if os.name == 'nt':
178 substitutions.extend([(s, lambda match: match.group().replace(b'\\', b'/'))
192 substitutions.extend([(s, lambda match: match.group().replace(b'\\', b'/'))
179 for s in _winpathfixes])
193 for s in _winpathfixes])
@@ -1,914 +1,914 b''
1 #require serve zstd
1 #require serve zstd
2
2
3 Client version is embedded in HTTP request and is effectively dynamic. Pin the
3 Client version is embedded in HTTP request and is effectively dynamic. Pin the
4 version so behavior is deterministic.
4 version so behavior is deterministic.
5
5
6 $ cat > fakeversion.py << EOF
6 $ cat > fakeversion.py << EOF
7 > from mercurial import util
7 > from mercurial import util
8 > util.version = lambda: '4.2'
8 > util.version = lambda: '4.2'
9 > EOF
9 > EOF
10
10
11 $ cat >> $HGRCPATH << EOF
11 $ cat >> $HGRCPATH << EOF
12 > [extensions]
12 > [extensions]
13 > fakeversion = `pwd`/fakeversion.py
13 > fakeversion = `pwd`/fakeversion.py
14 > [devel]
14 > [devel]
15 > legacy.exchange = phases
15 > legacy.exchange = phases
16 > EOF
16 > EOF
17
17
18 $ hg init server0
18 $ hg init server0
19 $ cd server0
19 $ cd server0
20 $ touch foo
20 $ touch foo
21 $ hg -q commit -A -m initial
21 $ hg -q commit -A -m initial
22
22
23 Also disable compression because zstd is optional and causes output to vary
23 Also disable compression because zstd is optional and causes output to vary
24 and because debugging partial responses is hard when compression is involved
24 and because debugging partial responses is hard when compression is involved
25
25
26 $ cat > .hg/hgrc << EOF
26 $ cat > .hg/hgrc << EOF
27 > [extensions]
27 > [extensions]
28 > badserver = $TESTDIR/badserverext.py
28 > badserver = $TESTDIR/badserverext.py
29 > [server]
29 > [server]
30 > compressionengines = none
30 > compressionengines = none
31 > EOF
31 > EOF
32
32
33 Failure to accept() socket should result in connection related error message
33 Failure to accept() socket should result in connection related error message
34
34
35 $ hg serve --config badserver.closebeforeaccept=true -p $HGPORT -d --pid-file=hg.pid
35 $ hg serve --config badserver.closebeforeaccept=true -p $HGPORT -d --pid-file=hg.pid
36 $ cat hg.pid > $DAEMON_PIDS
36 $ cat hg.pid > $DAEMON_PIDS
37
37
38 $ hg clone http://localhost:$HGPORT/ clone
38 $ hg clone http://localhost:$HGPORT/ clone
39 abort: error: $ECONNRESET$
39 abort: error: $ECONNRESET$
40 [255]
40 [255]
41
41
42 (The server exits on its own, but there is a race between that and starting a new server.
42 (The server exits on its own, but there is a race between that and starting a new server.
43 So ensure the process is dead.)
43 So ensure the process is dead.)
44
44
45 $ killdaemons.py $DAEMON_PIDS
45 $ killdaemons.py $DAEMON_PIDS
46
46
47 Failure immediately after accept() should yield connection related error message
47 Failure immediately after accept() should yield connection related error message
48
48
49 $ hg serve --config badserver.closeafteraccept=true -p $HGPORT -d --pid-file=hg.pid
49 $ hg serve --config badserver.closeafteraccept=true -p $HGPORT -d --pid-file=hg.pid
50 $ cat hg.pid > $DAEMON_PIDS
50 $ cat hg.pid > $DAEMON_PIDS
51
51
52 TODO: this usually outputs good results, but sometimes emits abort:
52 TODO: this usually outputs good results, but sometimes emits abort:
53 error: '' on FreeBSD and OS X.
53 error: '' on FreeBSD and OS X.
54 What we ideally want are:
54 What we ideally want are:
55
55
56 abort: error: $ECONNRESET$
56 abort: error: $ECONNRESET$
57
57
58 The flakiness in this output was observable easily with
58 The flakiness in this output was observable easily with
59 --runs-per-test=20 on macOS 10.12 during the freeze for 4.2.
59 --runs-per-test=20 on macOS 10.12 during the freeze for 4.2.
60 $ hg clone http://localhost:$HGPORT/ clone
60 $ hg clone http://localhost:$HGPORT/ clone
61 abort: error: * (glob)
61 abort: error: * (glob)
62 [255]
62 [255]
63
63
64 $ killdaemons.py $DAEMON_PIDS
64 $ killdaemons.py $DAEMON_PIDS
65
65
66 Failure to read all bytes in initial HTTP request should yield connection related error message
66 Failure to read all bytes in initial HTTP request should yield connection related error message
67
67
68 $ hg serve --config badserver.closeafterrecvbytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
68 $ hg serve --config badserver.closeafterrecvbytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
69 $ cat hg.pid > $DAEMON_PIDS
69 $ cat hg.pid > $DAEMON_PIDS
70
70
71 $ hg clone http://localhost:$HGPORT/ clone
71 $ hg clone http://localhost:$HGPORT/ clone
72 abort: error: bad HTTP status line: ''
72 abort: error: bad HTTP status line: ''
73 [255]
73 [255]
74
74
75 $ killdaemons.py $DAEMON_PIDS
75 $ killdaemons.py $DAEMON_PIDS
76
76
77 $ cat error.log
77 $ cat error.log
78 readline(1 from 65537) -> (1) G
78 readline(1 from 65537) -> (1) G
79 read limit reached; closing socket
79 read limit reached; closing socket
80
80
81 $ rm -f error.log
81 $ rm -f error.log
82
82
83 Same failure, but server reads full HTTP request line
83 Same failure, but server reads full HTTP request line
84
84
85 $ hg serve --config badserver.closeafterrecvbytes=40 -p $HGPORT -d --pid-file=hg.pid -E error.log
85 $ hg serve --config badserver.closeafterrecvbytes=40 -p $HGPORT -d --pid-file=hg.pid -E error.log
86 $ cat hg.pid > $DAEMON_PIDS
86 $ cat hg.pid > $DAEMON_PIDS
87 $ hg clone http://localhost:$HGPORT/ clone
87 $ hg clone http://localhost:$HGPORT/ clone
88 abort: error: bad HTTP status line: ''
88 abort: error: bad HTTP status line: ''
89 [255]
89 [255]
90
90
91 $ killdaemons.py $DAEMON_PIDS
91 $ killdaemons.py $DAEMON_PIDS
92
92
93 $ cat error.log
93 $ cat error.log
94 readline(40 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
94 readline(40 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
95 readline(7 from -1) -> (7) Accept-
95 readline(7 from -1) -> (7) Accept-
96 read limit reached; closing socket
96 read limit reached; closing socket
97
97
98 $ rm -f error.log
98 $ rm -f error.log
99
99
100 Failure on subsequent HTTP request on the same socket (cmd?batch)
100 Failure on subsequent HTTP request on the same socket (cmd?batch)
101
101
102 $ hg serve --config badserver.closeafterrecvbytes=210,223 -p $HGPORT -d --pid-file=hg.pid -E error.log
102 $ hg serve --config badserver.closeafterrecvbytes=210,223 -p $HGPORT -d --pid-file=hg.pid -E error.log
103 $ cat hg.pid > $DAEMON_PIDS
103 $ cat hg.pid > $DAEMON_PIDS
104 $ hg clone http://localhost:$HGPORT/ clone
104 $ hg clone http://localhost:$HGPORT/ clone
105 abort: error: bad HTTP status line: ''
105 abort: error: bad HTTP status line: ''
106 [255]
106 [255]
107
107
108 $ killdaemons.py $DAEMON_PIDS
108 $ killdaemons.py $DAEMON_PIDS
109
109
110 $ cat error.log
110 $ cat error.log
111 readline(210 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
111 readline(210 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
112 readline(177 from -1) -> (27) Accept-Encoding: identity\r\n
112 readline(177 from -1) -> (27) Accept-Encoding: identity\r\n
113 readline(150 from -1) -> (35) accept: application/mercurial-0.1\r\n
113 readline(150 from -1) -> (35) accept: application/mercurial-0.1\r\n
114 readline(115 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
114 readline(115 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
115 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
115 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
116 readline(* from -1) -> (2) \r\n (glob)
116 readline(* from -1) -> (2) \r\n (glob)
117 write(36) -> HTTP/1.1 200 Script output follows\r\n
117 write(36) -> HTTP/1.1 200 Script output follows\r\n
118 write(23) -> Server: badhttpserver\r\n
118 write(23) -> Server: badhttpserver\r\n
119 write(37) -> Date: $HTTP_DATE$\r\n
119 write(37) -> Date: $HTTP_DATE$\r\n
120 write(41) -> Content-Type: application/mercurial-0.1\r\n
120 write(41) -> Content-Type: application/mercurial-0.1\r\n
121 write(21) -> Content-Length: 436\r\n
121 write(21) -> Content-Length: 436\r\n
122 write(2) -> \r\n
122 write(2) -> \r\n
123 write(436) -> batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
123 write(436) -> 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
124 readline(4? from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
124 readline(4? from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
125 readline(1? from -1) -> (1?) Accept-Encoding* (glob)
125 readline(1? from -1) -> (1?) Accept-Encoding* (glob)
126 read limit reached; closing socket
126 read limit reached; closing socket
127 readline(223 from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
127 readline(223 from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
128 readline(197 from -1) -> (27) Accept-Encoding: identity\r\n
128 readline(197 from -1) -> (27) Accept-Encoding: identity\r\n
129 readline(170 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
129 readline(170 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
130 readline(141 from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
130 readline(141 from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
131 readline(100 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
131 readline(100 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
132 readline(39 from -1) -> (35) accept: application/mercurial-0.1\r\n
132 readline(39 from -1) -> (35) accept: application/mercurial-0.1\r\n
133 readline(4 from -1) -> (4) host
133 readline(4 from -1) -> (4) host
134 read limit reached; closing socket
134 read limit reached; closing socket
135
135
136 $ rm -f error.log
136 $ rm -f error.log
137
137
138 Failure to read getbundle HTTP request
138 Failure to read getbundle HTTP request
139
139
140 $ hg serve --config badserver.closeafterrecvbytes=308,317,304 -p $HGPORT -d --pid-file=hg.pid -E error.log
140 $ hg serve --config badserver.closeafterrecvbytes=308,317,304 -p $HGPORT -d --pid-file=hg.pid -E error.log
141 $ cat hg.pid > $DAEMON_PIDS
141 $ cat hg.pid > $DAEMON_PIDS
142 $ hg clone http://localhost:$HGPORT/ clone
142 $ hg clone http://localhost:$HGPORT/ clone
143 requesting all changes
143 requesting all changes
144 abort: error: bad HTTP status line: ''
144 abort: error: bad HTTP status line: ''
145 [255]
145 [255]
146
146
147 $ killdaemons.py $DAEMON_PIDS
147 $ killdaemons.py $DAEMON_PIDS
148
148
149 $ cat error.log
149 $ cat error.log
150 readline(1 from -1) -> (1) x (?)
150 readline(1 from -1) -> (1) x (?)
151 readline(1 from -1) -> (1) x (?)
151 readline(1 from -1) -> (1) x (?)
152 readline(308 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
152 readline(308 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
153 readline(275 from -1) -> (27) Accept-Encoding: identity\r\n
153 readline(275 from -1) -> (27) Accept-Encoding: identity\r\n
154 readline(248 from -1) -> (35) accept: application/mercurial-0.1\r\n
154 readline(248 from -1) -> (35) accept: application/mercurial-0.1\r\n
155 readline(213 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
155 readline(213 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
156 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
156 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
157 readline(* from -1) -> (2) \r\n (glob)
157 readline(* from -1) -> (2) \r\n (glob)
158 write(36) -> HTTP/1.1 200 Script output follows\r\n
158 write(36) -> HTTP/1.1 200 Script output follows\r\n
159 write(23) -> Server: badhttpserver\r\n
159 write(23) -> Server: badhttpserver\r\n
160 write(37) -> Date: $HTTP_DATE$\r\n
160 write(37) -> Date: $HTTP_DATE$\r\n
161 write(41) -> Content-Type: application/mercurial-0.1\r\n
161 write(41) -> Content-Type: application/mercurial-0.1\r\n
162 write(21) -> Content-Length: 436\r\n
162 write(21) -> Content-Length: 436\r\n
163 write(2) -> \r\n
163 write(2) -> \r\n
164 write(436) -> batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
164 write(436) -> 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
165 readline(13? from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
165 readline(13? from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n (glob)
166 readline(1?? from -1) -> (27) Accept-Encoding: identity\r\n (glob)
166 readline(1?? from -1) -> (27) Accept-Encoding: identity\r\n (glob)
167 readline(8? from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
167 readline(8? from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n (glob)
168 readline(5? from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
168 readline(5? from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n (glob)
169 readline(1? from -1) -> (1?) x-hgproto-1:* (glob)
169 readline(1? from -1) -> (1?) x-hgproto-1:* (glob)
170 read limit reached; closing socket
170 read limit reached; closing socket
171 readline(317 from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
171 readline(317 from 65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
172 readline(291 from -1) -> (27) Accept-Encoding: identity\r\n
172 readline(291 from -1) -> (27) Accept-Encoding: identity\r\n
173 readline(264 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
173 readline(264 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
174 readline(235 from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
174 readline(235 from -1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
175 readline(194 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
175 readline(194 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
176 readline(133 from -1) -> (35) accept: application/mercurial-0.1\r\n
176 readline(133 from -1) -> (35) accept: application/mercurial-0.1\r\n
177 readline(98 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
177 readline(98 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
178 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
178 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
179 readline(* from -1) -> (2) \r\n (glob)
179 readline(* from -1) -> (2) \r\n (glob)
180 write(36) -> HTTP/1.1 200 Script output follows\r\n
180 write(36) -> HTTP/1.1 200 Script output follows\r\n
181 write(23) -> Server: badhttpserver\r\n
181 write(23) -> Server: badhttpserver\r\n
182 write(37) -> Date: $HTTP_DATE$\r\n
182 write(37) -> Date: $HTTP_DATE$\r\n
183 write(41) -> Content-Type: application/mercurial-0.1\r\n
183 write(41) -> Content-Type: application/mercurial-0.1\r\n
184 write(20) -> Content-Length: 42\r\n
184 write(20) -> Content-Length: 42\r\n
185 write(2) -> \r\n
185 write(2) -> \r\n
186 write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
186 write(42) -> 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
187 readline(* from 65537) -> (*) GET /?cmd=getbundle HTTP* (glob)
187 readline(* from 65537) -> (*) GET /?cmd=getbundle HTTP* (glob)
188 read limit reached; closing socket
188 read limit reached; closing socket
189 readline(304 from 65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
189 readline(304 from 65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
190 readline(274 from -1) -> (27) Accept-Encoding: identity\r\n
190 readline(274 from -1) -> (27) Accept-Encoding: identity\r\n
191 readline(247 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
191 readline(247 from -1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
192 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
192 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
193 read limit reached; closing socket
193 read limit reached; closing socket
194
194
195 $ rm -f error.log
195 $ rm -f error.log
196
196
197 Now do a variation using POST to send arguments
197 Now do a variation using POST to send arguments
198
198
199 $ hg serve --config experimental.httppostargs=true --config badserver.closeafterrecvbytes=329,344 -p $HGPORT -d --pid-file=hg.pid -E error.log
199 $ hg serve --config experimental.httppostargs=true --config badserver.closeafterrecvbytes=329,344 -p $HGPORT -d --pid-file=hg.pid -E error.log
200 $ cat hg.pid > $DAEMON_PIDS
200 $ cat hg.pid > $DAEMON_PIDS
201
201
202 $ hg clone http://localhost:$HGPORT/ clone
202 $ hg clone http://localhost:$HGPORT/ clone
203 abort: error: bad HTTP status line: ''
203 abort: error: bad HTTP status line: ''
204 [255]
204 [255]
205
205
206 $ killdaemons.py $DAEMON_PIDS
206 $ killdaemons.py $DAEMON_PIDS
207
207
208 $ cat error.log
208 $ cat error.log
209 readline(329 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
209 readline(329 from 65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
210 readline(296 from -1) -> (27) Accept-Encoding: identity\r\n
210 readline(296 from -1) -> (27) Accept-Encoding: identity\r\n
211 readline(269 from -1) -> (35) accept: application/mercurial-0.1\r\n
211 readline(269 from -1) -> (35) accept: application/mercurial-0.1\r\n
212 readline(234 from -1) -> (2?) host: localhost:$HGPORT\r\n (glob)
212 readline(234 from -1) -> (2?) host: localhost:$HGPORT\r\n (glob)
213 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
213 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
214 readline(* from -1) -> (2) \r\n (glob)
214 readline(* from -1) -> (2) \r\n (glob)
215 write(36) -> HTTP/1.1 200 Script output follows\r\n
215 write(36) -> HTTP/1.1 200 Script output follows\r\n
216 write(23) -> Server: badhttpserver\r\n
216 write(23) -> Server: badhttpserver\r\n
217 write(37) -> Date: $HTTP_DATE$\r\n
217 write(37) -> Date: $HTTP_DATE$\r\n
218 write(41) -> Content-Type: application/mercurial-0.1\r\n
218 write(41) -> Content-Type: application/mercurial-0.1\r\n
219 write(21) -> Content-Length: 449\r\n
219 write(21) -> Content-Length: 449\r\n
220 write(2) -> \r\n
220 write(2) -> \r\n
221 write(449) -> batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache 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
221 write(449) -> 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
222 readline(1?? from 65537) -> (27) POST /?cmd=batch HTTP/1.1\r\n (glob)
222 readline(1?? from 65537) -> (27) POST /?cmd=batch HTTP/1.1\r\n (glob)
223 readline(1?? from -1) -> (27) Accept-Encoding: identity\r\n (glob)
223 readline(1?? from -1) -> (27) Accept-Encoding: identity\r\n (glob)
224 readline(1?? from -1) -> (41) content-type: application/mercurial-0.1\r\n (glob)
224 readline(1?? from -1) -> (41) content-type: application/mercurial-0.1\r\n (glob)
225 readline(6? from -1) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n (glob)
225 readline(6? from -1) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n (glob)
226 readline(3? from -1) -> (19) x-hgargs-post: 28\r\n (glob)
226 readline(3? from -1) -> (19) x-hgargs-post: 28\r\n (glob)
227 readline(1? from -1) -> (1?) x-hgproto-1: * (glob)
227 readline(1? from -1) -> (1?) x-hgproto-1: * (glob)
228 read limit reached; closing socket
228 read limit reached; closing socket
229 readline(344 from 65537) -> (27) POST /?cmd=batch HTTP/1.1\r\n
229 readline(344 from 65537) -> (27) POST /?cmd=batch HTTP/1.1\r\n
230 readline(317 from -1) -> (27) Accept-Encoding: identity\r\n
230 readline(317 from -1) -> (27) Accept-Encoding: identity\r\n
231 readline(290 from -1) -> (41) content-type: application/mercurial-0.1\r\n
231 readline(290 from -1) -> (41) content-type: application/mercurial-0.1\r\n
232 readline(249 from -1) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n
232 readline(249 from -1) -> (33) vary: X-HgArgs-Post,X-HgProto-1\r\n
233 readline(216 from -1) -> (19) x-hgargs-post: 28\r\n
233 readline(216 from -1) -> (19) x-hgargs-post: 28\r\n
234 readline(197 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
234 readline(197 from -1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
235 readline(136 from -1) -> (35) accept: application/mercurial-0.1\r\n
235 readline(136 from -1) -> (35) accept: application/mercurial-0.1\r\n
236 readline(101 from -1) -> (20) content-length: 28\r\n
236 readline(101 from -1) -> (20) content-length: 28\r\n
237 readline(81 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
237 readline(81 from -1) -> (*) host: localhost:$HGPORT\r\n (glob)
238 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
238 readline(* from -1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n (glob)
239 readline(* from -1) -> (2) \r\n (glob)
239 readline(* from -1) -> (2) \r\n (glob)
240 read(* from 28) -> (*) cmds=* (glob)
240 read(* from 28) -> (*) cmds=* (glob)
241 read limit reached, closing socket
241 read limit reached, closing socket
242 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
242 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
243
243
244 $ rm -f error.log
244 $ rm -f error.log
245
245
246 Now move on to partial server responses
246 Now move on to partial server responses
247
247
248 Server sends a single character from the HTTP response line
248 Server sends a single character from the HTTP response line
249
249
250 $ hg serve --config badserver.closeaftersendbytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
250 $ hg serve --config badserver.closeaftersendbytes=1 -p $HGPORT -d --pid-file=hg.pid -E error.log
251 $ cat hg.pid > $DAEMON_PIDS
251 $ cat hg.pid > $DAEMON_PIDS
252
252
253 $ hg clone http://localhost:$HGPORT/ clone
253 $ hg clone http://localhost:$HGPORT/ clone
254 abort: error: bad HTTP status line: H
254 abort: error: bad HTTP status line: H
255 [255]
255 [255]
256
256
257 $ killdaemons.py $DAEMON_PIDS
257 $ killdaemons.py $DAEMON_PIDS
258
258
259 $ cat error.log
259 $ cat error.log
260 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
260 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
261 readline(-1) -> (27) Accept-Encoding: identity\r\n
261 readline(-1) -> (27) Accept-Encoding: identity\r\n
262 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
262 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
263 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
263 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
264 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
264 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
265 readline(-1) -> (2) \r\n
265 readline(-1) -> (2) \r\n
266 write(1 from 36) -> (0) H
266 write(1 from 36) -> (0) H
267 write limit reached; closing socket
267 write limit reached; closing socket
268 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
268 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
269
269
270 $ rm -f error.log
270 $ rm -f error.log
271
271
272 Server sends an incomplete capabilities response body
272 Server sends an incomplete capabilities response body
273
273
274 $ hg serve --config badserver.closeaftersendbytes=180 -p $HGPORT -d --pid-file=hg.pid -E error.log
274 $ hg serve --config badserver.closeaftersendbytes=180 -p $HGPORT -d --pid-file=hg.pid -E error.log
275 $ cat hg.pid > $DAEMON_PIDS
275 $ cat hg.pid > $DAEMON_PIDS
276
276
277 $ hg clone http://localhost:$HGPORT/ clone
277 $ hg clone http://localhost:$HGPORT/ clone
278 abort: HTTP request error (incomplete response; expected 416 bytes got 20)
278 abort: HTTP request error (incomplete response; expected 416 bytes got 20)
279 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
279 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
280 [255]
280 [255]
281
281
282 $ killdaemons.py $DAEMON_PIDS
282 $ killdaemons.py $DAEMON_PIDS
283
283
284 $ cat error.log
284 $ cat error.log
285 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
285 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
286 readline(-1) -> (27) Accept-Encoding: identity\r\n
286 readline(-1) -> (27) Accept-Encoding: identity\r\n
287 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
287 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
288 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
288 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
289 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
289 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
290 readline(-1) -> (2) \r\n
290 readline(-1) -> (2) \r\n
291 write(36 from 36) -> (144) HTTP/1.1 200 Script output follows\r\n
291 write(36 from 36) -> (144) HTTP/1.1 200 Script output follows\r\n
292 write(23 from 23) -> (121) Server: badhttpserver\r\n
292 write(23 from 23) -> (121) Server: badhttpserver\r\n
293 write(37 from 37) -> (84) Date: $HTTP_DATE$\r\n
293 write(37 from 37) -> (84) Date: $HTTP_DATE$\r\n
294 write(41 from 41) -> (43) Content-Type: application/mercurial-0.1\r\n
294 write(41 from 41) -> (43) Content-Type: application/mercurial-0.1\r\n
295 write(21 from 21) -> (22) Content-Length: 436\r\n
295 write(21 from 21) -> (22) Content-Length: 436\r\n
296 write(2 from 2) -> (20) \r\n
296 write(2 from 2) -> (20) \r\n
297 write(20 from 436) -> (0) batch branchmap bund
297 write(20 from 436) -> (0) batch branchmap bund
298 write limit reached; closing socket
298 write limit reached; closing socket
299
299
300 $ rm -f error.log
300 $ rm -f error.log
301
301
302 Server sends incomplete headers for batch request
302 Server sends incomplete headers for batch request
303
303
304 $ hg serve --config badserver.closeaftersendbytes=714 -p $HGPORT -d --pid-file=hg.pid -E error.log
304 $ hg serve --config badserver.closeaftersendbytes=714 -p $HGPORT -d --pid-file=hg.pid -E error.log
305 $ cat hg.pid > $DAEMON_PIDS
305 $ cat hg.pid > $DAEMON_PIDS
306
306
307 TODO this output is horrible
307 TODO this output is horrible
308
308
309 $ hg clone http://localhost:$HGPORT/ clone
309 $ hg clone http://localhost:$HGPORT/ clone
310 abort: 'http://localhost:$HGPORT/' does not appear to be an hg repository:
310 abort: 'http://localhost:$HGPORT/' does not appear to be an hg repository:
311 ---%<--- (applicat)
311 ---%<--- (applicat)
312
312
313 ---%<---
313 ---%<---
314 !
314 !
315 [255]
315 [255]
316
316
317 $ killdaemons.py $DAEMON_PIDS
317 $ killdaemons.py $DAEMON_PIDS
318
318
319 $ cat error.log
319 $ cat error.log
320 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
320 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
321 readline(-1) -> (27) Accept-Encoding: identity\r\n
321 readline(-1) -> (27) Accept-Encoding: identity\r\n
322 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
322 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
323 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
323 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
324 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
324 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
325 readline(-1) -> (2) \r\n
325 readline(-1) -> (2) \r\n
326 write(36 from 36) -> (678) HTTP/1.1 200 Script output follows\r\n
326 write(36 from 36) -> (678) HTTP/1.1 200 Script output follows\r\n
327 write(23 from 23) -> (655) Server: badhttpserver\r\n
327 write(23 from 23) -> (655) Server: badhttpserver\r\n
328 write(37 from 37) -> (618) Date: $HTTP_DATE$\r\n
328 write(37 from 37) -> (618) Date: $HTTP_DATE$\r\n
329 write(41 from 41) -> (577) Content-Type: application/mercurial-0.1\r\n
329 write(41 from 41) -> (577) Content-Type: application/mercurial-0.1\r\n
330 write(21 from 21) -> (556) Content-Length: 436\r\n
330 write(21 from 21) -> (556) Content-Length: 436\r\n
331 write(2 from 2) -> (554) \r\n
331 write(2 from 2) -> (554) \r\n
332 write(436 from 436) -> (118) batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
332 write(436 from 436) -> (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
333 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
333 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
334 readline(-1) -> (27) Accept-Encoding: identity\r\n
334 readline(-1) -> (27) Accept-Encoding: identity\r\n
335 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
335 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
336 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
336 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
337 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
337 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
338 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
338 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
339 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
339 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
340 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
340 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
341 readline(-1) -> (2) \r\n
341 readline(-1) -> (2) \r\n
342 write(36 from 36) -> (82) HTTP/1.1 200 Script output follows\r\n
342 write(36 from 36) -> (82) HTTP/1.1 200 Script output follows\r\n
343 write(23 from 23) -> (59) Server: badhttpserver\r\n
343 write(23 from 23) -> (59) Server: badhttpserver\r\n
344 write(37 from 37) -> (22) Date: $HTTP_DATE$\r\n
344 write(37 from 37) -> (22) Date: $HTTP_DATE$\r\n
345 write(22 from 41) -> (0) Content-Type: applicat
345 write(22 from 41) -> (0) Content-Type: applicat
346 write limit reached; closing socket
346 write limit reached; closing socket
347 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
347 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
348
348
349 $ rm -f error.log
349 $ rm -f error.log
350
350
351 Server sends an incomplete HTTP response body to batch request
351 Server sends an incomplete HTTP response body to batch request
352
352
353 $ hg serve --config badserver.closeaftersendbytes=779 -p $HGPORT -d --pid-file=hg.pid -E error.log
353 $ hg serve --config badserver.closeaftersendbytes=779 -p $HGPORT -d --pid-file=hg.pid -E error.log
354 $ cat hg.pid > $DAEMON_PIDS
354 $ cat hg.pid > $DAEMON_PIDS
355
355
356 TODO client spews a stack due to uncaught ValueError in batch.results()
356 TODO client spews a stack due to uncaught ValueError in batch.results()
357 #if no-chg
357 #if no-chg
358 $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
358 $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
359 [1]
359 [1]
360 #else
360 #else
361 $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
361 $ hg clone http://localhost:$HGPORT/ clone 2> /dev/null
362 [255]
362 [255]
363 #endif
363 #endif
364
364
365 $ killdaemons.py $DAEMON_PIDS
365 $ killdaemons.py $DAEMON_PIDS
366
366
367 $ cat error.log
367 $ cat error.log
368 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
368 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
369 readline(-1) -> (27) Accept-Encoding: identity\r\n
369 readline(-1) -> (27) Accept-Encoding: identity\r\n
370 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
370 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
371 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
371 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
372 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
372 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
373 readline(-1) -> (2) \r\n
373 readline(-1) -> (2) \r\n
374 write(36 from 36) -> (743) HTTP/1.1 200 Script output follows\r\n
374 write(36 from 36) -> (743) HTTP/1.1 200 Script output follows\r\n
375 write(23 from 23) -> (720) Server: badhttpserver\r\n
375 write(23 from 23) -> (720) Server: badhttpserver\r\n
376 write(37 from 37) -> (683) Date: $HTTP_DATE$\r\n
376 write(37 from 37) -> (683) Date: $HTTP_DATE$\r\n
377 write(41 from 41) -> (642) Content-Type: application/mercurial-0.1\r\n
377 write(41 from 41) -> (642) Content-Type: application/mercurial-0.1\r\n
378 write(21 from 21) -> (621) Content-Length: 436\r\n
378 write(21 from 21) -> (621) Content-Length: 436\r\n
379 write(2 from 2) -> (619) \r\n
379 write(2 from 2) -> (619) \r\n
380 write(436 from 436) -> (183) batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
380 write(436 from 436) -> (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
381 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
381 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
382 readline(-1) -> (27) Accept-Encoding: identity\r\n
382 readline(-1) -> (27) Accept-Encoding: identity\r\n
383 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
383 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
384 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
384 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
385 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
385 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
386 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
386 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
387 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
387 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
388 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
388 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
389 readline(-1) -> (2) \r\n
389 readline(-1) -> (2) \r\n
390 write(36 from 36) -> (147) HTTP/1.1 200 Script output follows\r\n
390 write(36 from 36) -> (147) HTTP/1.1 200 Script output follows\r\n
391 write(23 from 23) -> (124) Server: badhttpserver\r\n
391 write(23 from 23) -> (124) Server: badhttpserver\r\n
392 write(37 from 37) -> (87) Date: $HTTP_DATE$\r\n
392 write(37 from 37) -> (87) Date: $HTTP_DATE$\r\n
393 write(41 from 41) -> (46) Content-Type: application/mercurial-0.1\r\n
393 write(41 from 41) -> (46) Content-Type: application/mercurial-0.1\r\n
394 write(20 from 20) -> (26) Content-Length: 42\r\n
394 write(20 from 20) -> (26) Content-Length: 42\r\n
395 write(2 from 2) -> (24) \r\n
395 write(2 from 2) -> (24) \r\n
396 write(24 from 42) -> (0) 96ee1d7354c4ad7372047672
396 write(24 from 42) -> (0) 96ee1d7354c4ad7372047672
397 write limit reached; closing socket
397 write limit reached; closing socket
398
398
399 $ rm -f error.log
399 $ rm -f error.log
400
400
401 Server sends incomplete headers for getbundle response
401 Server sends incomplete headers for getbundle response
402
402
403 $ hg serve --config badserver.closeaftersendbytes=926 -p $HGPORT -d --pid-file=hg.pid -E error.log
403 $ hg serve --config badserver.closeaftersendbytes=926 -p $HGPORT -d --pid-file=hg.pid -E error.log
404 $ cat hg.pid > $DAEMON_PIDS
404 $ cat hg.pid > $DAEMON_PIDS
405
405
406 TODO this output is terrible
406 TODO this output is terrible
407
407
408 $ hg clone http://localhost:$HGPORT/ clone
408 $ hg clone http://localhost:$HGPORT/ clone
409 requesting all changes
409 requesting all changes
410 abort: 'http://localhost:$HGPORT/' does not appear to be an hg repository:
410 abort: 'http://localhost:$HGPORT/' does not appear to be an hg repository:
411 ---%<--- (application/mercuri)
411 ---%<--- (application/mercuri)
412
412
413 ---%<---
413 ---%<---
414 !
414 !
415 [255]
415 [255]
416
416
417 $ killdaemons.py $DAEMON_PIDS
417 $ killdaemons.py $DAEMON_PIDS
418
418
419 $ cat error.log
419 $ cat error.log
420 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
420 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
421 readline(-1) -> (27) Accept-Encoding: identity\r\n
421 readline(-1) -> (27) Accept-Encoding: identity\r\n
422 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
422 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
423 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
423 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
424 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
424 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
425 readline(-1) -> (2) \r\n
425 readline(-1) -> (2) \r\n
426 write(36 from 36) -> (890) HTTP/1.1 200 Script output follows\r\n
426 write(36 from 36) -> (890) HTTP/1.1 200 Script output follows\r\n
427 write(23 from 23) -> (867) Server: badhttpserver\r\n
427 write(23 from 23) -> (867) Server: badhttpserver\r\n
428 write(37 from 37) -> (830) Date: $HTTP_DATE$\r\n
428 write(37 from 37) -> (830) Date: $HTTP_DATE$\r\n
429 write(41 from 41) -> (789) Content-Type: application/mercurial-0.1\r\n
429 write(41 from 41) -> (789) Content-Type: application/mercurial-0.1\r\n
430 write(21 from 21) -> (768) Content-Length: 436\r\n
430 write(21 from 21) -> (768) Content-Length: 436\r\n
431 write(2 from 2) -> (766) \r\n
431 write(2 from 2) -> (766) \r\n
432 write(436 from 436) -> (330) batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
432 write(436 from 436) -> (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
433 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
433 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
434 readline(-1) -> (27) Accept-Encoding: identity\r\n
434 readline(-1) -> (27) Accept-Encoding: identity\r\n
435 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
435 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
436 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
436 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
437 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
437 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
438 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
438 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
439 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
439 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
440 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
440 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
441 readline(-1) -> (2) \r\n
441 readline(-1) -> (2) \r\n
442 write(36 from 36) -> (294) HTTP/1.1 200 Script output follows\r\n
442 write(36 from 36) -> (294) HTTP/1.1 200 Script output follows\r\n
443 write(23 from 23) -> (271) Server: badhttpserver\r\n
443 write(23 from 23) -> (271) Server: badhttpserver\r\n
444 write(37 from 37) -> (234) Date: $HTTP_DATE$\r\n
444 write(37 from 37) -> (234) Date: $HTTP_DATE$\r\n
445 write(41 from 41) -> (193) Content-Type: application/mercurial-0.1\r\n
445 write(41 from 41) -> (193) Content-Type: application/mercurial-0.1\r\n
446 write(20 from 20) -> (173) Content-Length: 42\r\n
446 write(20 from 20) -> (173) Content-Length: 42\r\n
447 write(2 from 2) -> (171) \r\n
447 write(2 from 2) -> (171) \r\n
448 write(42 from 42) -> (129) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
448 write(42 from 42) -> (129) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
449 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
449 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
450 readline(-1) -> (27) Accept-Encoding: identity\r\n
450 readline(-1) -> (27) Accept-Encoding: identity\r\n
451 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
451 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
452 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
452 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
453 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
453 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
454 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
454 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
455 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
455 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
456 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
456 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
457 readline(-1) -> (2) \r\n
457 readline(-1) -> (2) \r\n
458 write(36 from 36) -> (93) HTTP/1.1 200 Script output follows\r\n
458 write(36 from 36) -> (93) HTTP/1.1 200 Script output follows\r\n
459 write(23 from 23) -> (70) Server: badhttpserver\r\n
459 write(23 from 23) -> (70) Server: badhttpserver\r\n
460 write(37 from 37) -> (33) Date: $HTTP_DATE$\r\n
460 write(37 from 37) -> (33) Date: $HTTP_DATE$\r\n
461 write(33 from 41) -> (0) Content-Type: application/mercuri
461 write(33 from 41) -> (0) Content-Type: application/mercuri
462 write limit reached; closing socket
462 write limit reached; closing socket
463 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
463 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
464
464
465 $ rm -f error.log
465 $ rm -f error.log
466
466
467 Server sends empty HTTP body for getbundle
467 Server sends empty HTTP body for getbundle
468
468
469 $ hg serve --config badserver.closeaftersendbytes=964 -p $HGPORT -d --pid-file=hg.pid -E error.log
469 $ hg serve --config badserver.closeaftersendbytes=964 -p $HGPORT -d --pid-file=hg.pid -E error.log
470 $ cat hg.pid > $DAEMON_PIDS
470 $ cat hg.pid > $DAEMON_PIDS
471
471
472 $ hg clone http://localhost:$HGPORT/ clone
472 $ hg clone http://localhost:$HGPORT/ clone
473 requesting all changes
473 requesting all changes
474 abort: HTTP request error (incomplete response)
474 abort: HTTP request error (incomplete response)
475 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
475 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
476 [255]
476 [255]
477
477
478 $ killdaemons.py $DAEMON_PIDS
478 $ killdaemons.py $DAEMON_PIDS
479
479
480 $ cat error.log
480 $ cat error.log
481 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
481 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
482 readline(-1) -> (27) Accept-Encoding: identity\r\n
482 readline(-1) -> (27) Accept-Encoding: identity\r\n
483 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
483 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
484 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
484 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
485 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
485 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
486 readline(-1) -> (2) \r\n
486 readline(-1) -> (2) \r\n
487 write(36 from 36) -> (928) HTTP/1.1 200 Script output follows\r\n
487 write(36 from 36) -> (928) HTTP/1.1 200 Script output follows\r\n
488 write(23 from 23) -> (905) Server: badhttpserver\r\n
488 write(23 from 23) -> (905) Server: badhttpserver\r\n
489 write(37 from 37) -> (868) Date: $HTTP_DATE$\r\n
489 write(37 from 37) -> (868) Date: $HTTP_DATE$\r\n
490 write(41 from 41) -> (827) Content-Type: application/mercurial-0.1\r\n
490 write(41 from 41) -> (827) Content-Type: application/mercurial-0.1\r\n
491 write(21 from 21) -> (806) Content-Length: 436\r\n
491 write(21 from 21) -> (806) Content-Length: 436\r\n
492 write(2 from 2) -> (804) \r\n
492 write(2 from 2) -> (804) \r\n
493 write(436 from 436) -> (368) batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
493 write(436 from 436) -> (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
494 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
494 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
495 readline(-1) -> (27) Accept-Encoding: identity\r\n
495 readline(-1) -> (27) Accept-Encoding: identity\r\n
496 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
496 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
497 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
497 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
498 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
498 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
499 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
499 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
500 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
500 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
501 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
501 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
502 readline(-1) -> (2) \r\n
502 readline(-1) -> (2) \r\n
503 write(36 from 36) -> (332) HTTP/1.1 200 Script output follows\r\n
503 write(36 from 36) -> (332) HTTP/1.1 200 Script output follows\r\n
504 write(23 from 23) -> (309) Server: badhttpserver\r\n
504 write(23 from 23) -> (309) Server: badhttpserver\r\n
505 write(37 from 37) -> (272) Date: $HTTP_DATE$\r\n
505 write(37 from 37) -> (272) Date: $HTTP_DATE$\r\n
506 write(41 from 41) -> (231) Content-Type: application/mercurial-0.1\r\n
506 write(41 from 41) -> (231) Content-Type: application/mercurial-0.1\r\n
507 write(20 from 20) -> (211) Content-Length: 42\r\n
507 write(20 from 20) -> (211) Content-Length: 42\r\n
508 write(2 from 2) -> (209) \r\n
508 write(2 from 2) -> (209) \r\n
509 write(42 from 42) -> (167) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
509 write(42 from 42) -> (167) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
510 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
510 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
511 readline(-1) -> (27) Accept-Encoding: identity\r\n
511 readline(-1) -> (27) Accept-Encoding: identity\r\n
512 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
512 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
513 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
513 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
514 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
514 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
515 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
515 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
516 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
516 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
517 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
517 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
518 readline(-1) -> (2) \r\n
518 readline(-1) -> (2) \r\n
519 write(36 from 36) -> (131) HTTP/1.1 200 Script output follows\r\n
519 write(36 from 36) -> (131) HTTP/1.1 200 Script output follows\r\n
520 write(23 from 23) -> (108) Server: badhttpserver\r\n
520 write(23 from 23) -> (108) Server: badhttpserver\r\n
521 write(37 from 37) -> (71) Date: $HTTP_DATE$\r\n
521 write(37 from 37) -> (71) Date: $HTTP_DATE$\r\n
522 write(41 from 41) -> (30) Content-Type: application/mercurial-0.2\r\n
522 write(41 from 41) -> (30) Content-Type: application/mercurial-0.2\r\n
523 write(28 from 28) -> (2) Transfer-Encoding: chunked\r\n
523 write(28 from 28) -> (2) Transfer-Encoding: chunked\r\n
524 write(2 from 2) -> (0) \r\n
524 write(2 from 2) -> (0) \r\n
525 write limit reached; closing socket
525 write limit reached; closing socket
526 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
526 write(36) -> HTTP/1.1 500 Internal Server Error\r\n
527
527
528 $ rm -f error.log
528 $ rm -f error.log
529
529
530 Server sends partial compression string
530 Server sends partial compression string
531
531
532 $ hg serve --config badserver.closeaftersendbytes=988 -p $HGPORT -d --pid-file=hg.pid -E error.log
532 $ hg serve --config badserver.closeaftersendbytes=988 -p $HGPORT -d --pid-file=hg.pid -E error.log
533 $ cat hg.pid > $DAEMON_PIDS
533 $ cat hg.pid > $DAEMON_PIDS
534
534
535 $ hg clone http://localhost:$HGPORT/ clone
535 $ hg clone http://localhost:$HGPORT/ clone
536 requesting all changes
536 requesting all changes
537 abort: HTTP request error (incomplete response)
537 abort: HTTP request error (incomplete response)
538 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
538 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
539 [255]
539 [255]
540
540
541 $ killdaemons.py $DAEMON_PIDS
541 $ killdaemons.py $DAEMON_PIDS
542
542
543 $ cat error.log
543 $ cat error.log
544 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
544 readline(65537) -> (33) GET /?cmd=capabilities HTTP/1.1\r\n
545 readline(-1) -> (27) Accept-Encoding: identity\r\n
545 readline(-1) -> (27) Accept-Encoding: identity\r\n
546 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
546 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
547 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
547 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
548 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
548 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
549 readline(-1) -> (2) \r\n
549 readline(-1) -> (2) \r\n
550 write(36 from 36) -> (952) HTTP/1.1 200 Script output follows\r\n
550 write(36 from 36) -> (952) HTTP/1.1 200 Script output follows\r\n
551 write(23 from 23) -> (929) Server: badhttpserver\r\n
551 write(23 from 23) -> (929) Server: badhttpserver\r\n
552 write(37 from 37) -> (892) Date: $HTTP_DATE$\r\n
552 write(37 from 37) -> (892) Date: $HTTP_DATE$\r\n
553 write(41 from 41) -> (851) Content-Type: application/mercurial-0.1\r\n
553 write(41 from 41) -> (851) Content-Type: application/mercurial-0.1\r\n
554 write(21 from 21) -> (830) Content-Length: 436\r\n
554 write(21 from 21) -> (830) Content-Length: 436\r\n
555 write(2 from 2) -> (828) \r\n
555 write(2 from 2) -> (828) \r\n
556 write(436 from 436) -> (392) batch branchmap bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps%0Arev-branch-cache changegroupsubset compression=none getbundle httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx known lookup pushkey streamreqs=generaldelta,revlogv1 unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
556 write(436 from 436) -> (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
557 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
557 readline(65537) -> (26) GET /?cmd=batch HTTP/1.1\r\n
558 readline(-1) -> (27) Accept-Encoding: identity\r\n
558 readline(-1) -> (27) Accept-Encoding: identity\r\n
559 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
559 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
560 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
560 readline(-1) -> (41) x-hgarg-1: cmds=heads+%3Bknown+nodes%3D\r\n
561 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
561 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
562 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
562 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
563 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
563 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
564 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
564 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
565 readline(-1) -> (2) \r\n
565 readline(-1) -> (2) \r\n
566 write(36 from 36) -> (356) HTTP/1.1 200 Script output follows\r\n
566 write(36 from 36) -> (356) HTTP/1.1 200 Script output follows\r\n
567 write(23 from 23) -> (333) Server: badhttpserver\r\n
567 write(23 from 23) -> (333) Server: badhttpserver\r\n
568 write(37 from 37) -> (296) Date: $HTTP_DATE$\r\n
568 write(37 from 37) -> (296) Date: $HTTP_DATE$\r\n
569 write(41 from 41) -> (255) Content-Type: application/mercurial-0.1\r\n
569 write(41 from 41) -> (255) Content-Type: application/mercurial-0.1\r\n
570 write(20 from 20) -> (235) Content-Length: 42\r\n
570 write(20 from 20) -> (235) Content-Length: 42\r\n
571 write(2 from 2) -> (233) \r\n
571 write(2 from 2) -> (233) \r\n
572 write(42 from 42) -> (191) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
572 write(42 from 42) -> (191) 96ee1d7354c4ad7372047672c36a1f561e3a6a4c\n;
573 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
573 readline(65537) -> (30) GET /?cmd=getbundle HTTP/1.1\r\n
574 readline(-1) -> (27) Accept-Encoding: identity\r\n
574 readline(-1) -> (27) Accept-Encoding: identity\r\n
575 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
575 readline(-1) -> (29) vary: X-HgArg-1,X-HgProto-1\r\n
576 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
576 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
577 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
577 readline(-1) -> (61) x-hgproto-1: 0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull\r\n
578 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
578 readline(-1) -> (35) accept: application/mercurial-0.1\r\n
579 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
579 readline(-1) -> (2?) host: localhost:$HGPORT\r\n (glob)
580 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
580 readline(-1) -> (49) user-agent: mercurial/proto-1.0 (Mercurial 4.2)\r\n
581 readline(-1) -> (2) \r\n
581 readline(-1) -> (2) \r\n
582 write(36 from 36) -> (155) HTTP/1.1 200 Script output follows\r\n
582 write(36 from 36) -> (155) HTTP/1.1 200 Script output follows\r\n
583 write(23 from 23) -> (132) Server: badhttpserver\r\n
583 write(23 from 23) -> (132) Server: badhttpserver\r\n
584 write(37 from 37) -> (95) Date: $HTTP_DATE$\r\n
584 write(37 from 37) -> (95) Date: $HTTP_DATE$\r\n
585 write(41 from 41) -> (54) Content-Type: application/mercurial-0.2\r\n
585 write(41 from 41) -> (54) Content-Type: application/mercurial-0.2\r\n
586 write(28 from 28) -> (26) Transfer-Encoding: chunked\r\n
586 write(28 from 28) -> (26) Transfer-Encoding: chunked\r\n
587 write(2 from 2) -> (24) \r\n
587 write(2 from 2) -> (24) \r\n
588 write(6 from 6) -> (18) 1\\r\\n\x04\\r\\n (esc)
588 write(6 from 6) -> (18) 1\\r\\n\x04\\r\\n (esc)
589 write(9 from 9) -> (9) 4\r\nnone\r\n
589 write(9 from 9) -> (9) 4\r\nnone\r\n
590 write(9 from 9) -> (0) 4\r\nHG20\r\n
590 write(9 from 9) -> (0) 4\r\nHG20\r\n
591 write limit reached; closing socket
591 write limit reached; closing socket
592 write(27) -> 15\r\nInternal Server Error\r\n
592 write(27) -> 15\r\nInternal Server Error\r\n
593
593
594 $ rm -f error.log
594 $ rm -f error.log
595
595
596 Server sends partial bundle2 header magic
596 Server sends partial bundle2 header magic
597
597
598 $ hg serve --config badserver.closeaftersendbytes=985 -p $HGPORT -d --pid-file=hg.pid -E error.log
598 $ hg serve --config badserver.closeaftersendbytes=985 -p $HGPORT -d --pid-file=hg.pid -E error.log
599 $ cat hg.pid > $DAEMON_PIDS
599 $ cat hg.pid > $DAEMON_PIDS
600
600
601 $ hg clone http://localhost:$HGPORT/ clone
601 $ hg clone http://localhost:$HGPORT/ clone
602 requesting all changes
602 requesting all changes
603 abort: HTTP request error (incomplete response; expected 1 bytes got 3)
603 abort: HTTP request error (incomplete response; expected 1 bytes got 3)
604 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
604 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
605 [255]
605 [255]
606
606
607 $ killdaemons.py $DAEMON_PIDS
607 $ killdaemons.py $DAEMON_PIDS
608
608
609 $ tail -7 error.log
609 $ tail -7 error.log
610 write(28 from 28) -> (23) Transfer-Encoding: chunked\r\n
610 write(28 from 28) -> (23) Transfer-Encoding: chunked\r\n
611 write(2 from 2) -> (21) \r\n
611 write(2 from 2) -> (21) \r\n
612 write(6 from 6) -> (15) 1\\r\\n\x04\\r\\n (esc)
612 write(6 from 6) -> (15) 1\\r\\n\x04\\r\\n (esc)
613 write(9 from 9) -> (6) 4\r\nnone\r\n
613 write(9 from 9) -> (6) 4\r\nnone\r\n
614 write(6 from 9) -> (0) 4\r\nHG2
614 write(6 from 9) -> (0) 4\r\nHG2
615 write limit reached; closing socket
615 write limit reached; closing socket
616 write(27) -> 15\r\nInternal Server Error\r\n
616 write(27) -> 15\r\nInternal Server Error\r\n
617
617
618 $ rm -f error.log
618 $ rm -f error.log
619
619
620 Server sends incomplete bundle2 stream params length
620 Server sends incomplete bundle2 stream params length
621
621
622 $ hg serve --config badserver.closeaftersendbytes=994 -p $HGPORT -d --pid-file=hg.pid -E error.log
622 $ hg serve --config badserver.closeaftersendbytes=994 -p $HGPORT -d --pid-file=hg.pid -E error.log
623 $ cat hg.pid > $DAEMON_PIDS
623 $ cat hg.pid > $DAEMON_PIDS
624
624
625 $ hg clone http://localhost:$HGPORT/ clone
625 $ hg clone http://localhost:$HGPORT/ clone
626 requesting all changes
626 requesting all changes
627 abort: HTTP request error (incomplete response; expected 1 bytes got 3)
627 abort: HTTP request error (incomplete response; expected 1 bytes got 3)
628 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
628 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
629 [255]
629 [255]
630
630
631 $ killdaemons.py $DAEMON_PIDS
631 $ killdaemons.py $DAEMON_PIDS
632
632
633 $ tail -8 error.log
633 $ tail -8 error.log
634 write(28 from 28) -> (32) Transfer-Encoding: chunked\r\n
634 write(28 from 28) -> (32) Transfer-Encoding: chunked\r\n
635 write(2 from 2) -> (30) \r\n
635 write(2 from 2) -> (30) \r\n
636 write(6 from 6) -> (24) 1\\r\\n\x04\\r\\n (esc)
636 write(6 from 6) -> (24) 1\\r\\n\x04\\r\\n (esc)
637 write(9 from 9) -> (15) 4\r\nnone\r\n
637 write(9 from 9) -> (15) 4\r\nnone\r\n
638 write(9 from 9) -> (6) 4\r\nHG20\r\n
638 write(9 from 9) -> (6) 4\r\nHG20\r\n
639 write(6 from 9) -> (0) 4\\r\\n\x00\x00\x00 (esc)
639 write(6 from 9) -> (0) 4\\r\\n\x00\x00\x00 (esc)
640 write limit reached; closing socket
640 write limit reached; closing socket
641 write(27) -> 15\r\nInternal Server Error\r\n
641 write(27) -> 15\r\nInternal Server Error\r\n
642
642
643 $ rm -f error.log
643 $ rm -f error.log
644
644
645 Servers stops after bundle2 stream params header
645 Servers stops after bundle2 stream params header
646
646
647 $ hg serve --config badserver.closeaftersendbytes=997 -p $HGPORT -d --pid-file=hg.pid -E error.log
647 $ hg serve --config badserver.closeaftersendbytes=997 -p $HGPORT -d --pid-file=hg.pid -E error.log
648 $ cat hg.pid > $DAEMON_PIDS
648 $ cat hg.pid > $DAEMON_PIDS
649
649
650 $ hg clone http://localhost:$HGPORT/ clone
650 $ hg clone http://localhost:$HGPORT/ clone
651 requesting all changes
651 requesting all changes
652 abort: HTTP request error (incomplete response)
652 abort: HTTP request error (incomplete response)
653 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
653 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
654 [255]
654 [255]
655
655
656 $ killdaemons.py $DAEMON_PIDS
656 $ killdaemons.py $DAEMON_PIDS
657
657
658 $ tail -8 error.log
658 $ tail -8 error.log
659 write(28 from 28) -> (35) Transfer-Encoding: chunked\r\n
659 write(28 from 28) -> (35) Transfer-Encoding: chunked\r\n
660 write(2 from 2) -> (33) \r\n
660 write(2 from 2) -> (33) \r\n
661 write(6 from 6) -> (27) 1\\r\\n\x04\\r\\n (esc)
661 write(6 from 6) -> (27) 1\\r\\n\x04\\r\\n (esc)
662 write(9 from 9) -> (18) 4\r\nnone\r\n
662 write(9 from 9) -> (18) 4\r\nnone\r\n
663 write(9 from 9) -> (9) 4\r\nHG20\r\n
663 write(9 from 9) -> (9) 4\r\nHG20\r\n
664 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
664 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
665 write limit reached; closing socket
665 write limit reached; closing socket
666 write(27) -> 15\r\nInternal Server Error\r\n
666 write(27) -> 15\r\nInternal Server Error\r\n
667
667
668 $ rm -f error.log
668 $ rm -f error.log
669
669
670 Server stops sending after bundle2 part header length
670 Server stops sending after bundle2 part header length
671
671
672 $ hg serve --config badserver.closeaftersendbytes=1006 -p $HGPORT -d --pid-file=hg.pid -E error.log
672 $ hg serve --config badserver.closeaftersendbytes=1006 -p $HGPORT -d --pid-file=hg.pid -E error.log
673 $ cat hg.pid > $DAEMON_PIDS
673 $ cat hg.pid > $DAEMON_PIDS
674
674
675 $ hg clone http://localhost:$HGPORT/ clone
675 $ hg clone http://localhost:$HGPORT/ clone
676 requesting all changes
676 requesting all changes
677 abort: HTTP request error (incomplete response)
677 abort: HTTP request error (incomplete response)
678 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
678 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
679 [255]
679 [255]
680
680
681 $ killdaemons.py $DAEMON_PIDS
681 $ killdaemons.py $DAEMON_PIDS
682
682
683 $ tail -9 error.log
683 $ tail -9 error.log
684 write(28 from 28) -> (44) Transfer-Encoding: chunked\r\n
684 write(28 from 28) -> (44) Transfer-Encoding: chunked\r\n
685 write(2 from 2) -> (42) \r\n
685 write(2 from 2) -> (42) \r\n
686 write(6 from 6) -> (36) 1\\r\\n\x04\\r\\n (esc)
686 write(6 from 6) -> (36) 1\\r\\n\x04\\r\\n (esc)
687 write(9 from 9) -> (27) 4\r\nnone\r\n
687 write(9 from 9) -> (27) 4\r\nnone\r\n
688 write(9 from 9) -> (18) 4\r\nHG20\r\n
688 write(9 from 9) -> (18) 4\r\nHG20\r\n
689 write(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
689 write(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
690 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
690 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
691 write limit reached; closing socket
691 write limit reached; closing socket
692 write(27) -> 15\r\nInternal Server Error\r\n
692 write(27) -> 15\r\nInternal Server Error\r\n
693
693
694 $ rm -f error.log
694 $ rm -f error.log
695
695
696 Server stops sending after bundle2 part header
696 Server stops sending after bundle2 part header
697
697
698 $ hg serve --config badserver.closeaftersendbytes=1053 -p $HGPORT -d --pid-file=hg.pid -E error.log
698 $ hg serve --config badserver.closeaftersendbytes=1053 -p $HGPORT -d --pid-file=hg.pid -E error.log
699 $ cat hg.pid > $DAEMON_PIDS
699 $ cat hg.pid > $DAEMON_PIDS
700
700
701 $ hg clone http://localhost:$HGPORT/ clone
701 $ hg clone http://localhost:$HGPORT/ clone
702 requesting all changes
702 requesting all changes
703 adding changesets
703 adding changesets
704 transaction abort!
704 transaction abort!
705 rollback completed
705 rollback completed
706 abort: HTTP request error (incomplete response)
706 abort: HTTP request error (incomplete response)
707 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
707 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
708 [255]
708 [255]
709
709
710 $ killdaemons.py $DAEMON_PIDS
710 $ killdaemons.py $DAEMON_PIDS
711
711
712 $ tail -10 error.log
712 $ tail -10 error.log
713 write(28 from 28) -> (91) Transfer-Encoding: chunked\r\n
713 write(28 from 28) -> (91) Transfer-Encoding: chunked\r\n
714 write(2 from 2) -> (89) \r\n
714 write(2 from 2) -> (89) \r\n
715 write(6 from 6) -> (83) 1\\r\\n\x04\\r\\n (esc)
715 write(6 from 6) -> (83) 1\\r\\n\x04\\r\\n (esc)
716 write(9 from 9) -> (74) 4\r\nnone\r\n
716 write(9 from 9) -> (74) 4\r\nnone\r\n
717 write(9 from 9) -> (65) 4\r\nHG20\r\n
717 write(9 from 9) -> (65) 4\r\nHG20\r\n
718 write(9 from 9) -> (56) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
718 write(9 from 9) -> (56) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
719 write(9 from 9) -> (47) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
719 write(9 from 9) -> (47) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
720 write(47 from 47) -> (0) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
720 write(47 from 47) -> (0) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
721 write limit reached; closing socket
721 write limit reached; closing socket
722 write(27) -> 15\r\nInternal Server Error\r\n
722 write(27) -> 15\r\nInternal Server Error\r\n
723
723
724 $ rm -f error.log
724 $ rm -f error.log
725
725
726 Server stops after bundle2 part payload chunk size
726 Server stops after bundle2 part payload chunk size
727
727
728 $ hg serve --config badserver.closeaftersendbytes=1074 -p $HGPORT -d --pid-file=hg.pid -E error.log
728 $ hg serve --config badserver.closeaftersendbytes=1074 -p $HGPORT -d --pid-file=hg.pid -E error.log
729 $ cat hg.pid > $DAEMON_PIDS
729 $ cat hg.pid > $DAEMON_PIDS
730
730
731 $ hg clone http://localhost:$HGPORT/ clone
731 $ hg clone http://localhost:$HGPORT/ clone
732 requesting all changes
732 requesting all changes
733 adding changesets
733 adding changesets
734 transaction abort!
734 transaction abort!
735 rollback completed
735 rollback completed
736 abort: HTTP request error (incomplete response; expected 459 bytes got 7)
736 abort: HTTP request error (incomplete response; expected 459 bytes got 7)
737 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
737 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
738 [255]
738 [255]
739
739
740 $ killdaemons.py $DAEMON_PIDS
740 $ killdaemons.py $DAEMON_PIDS
741
741
742 $ tail -11 error.log
742 $ tail -11 error.log
743 write(2 from 2) -> (110) \r\n
743 write(2 from 2) -> (110) \r\n
744 write(6 from 6) -> (104) 1\\r\\n\x04\\r\\n (esc)
744 write(6 from 6) -> (104) 1\\r\\n\x04\\r\\n (esc)
745 write(9 from 9) -> (95) 4\r\nnone\r\n
745 write(9 from 9) -> (95) 4\r\nnone\r\n
746 write(9 from 9) -> (86) 4\r\nHG20\r\n
746 write(9 from 9) -> (86) 4\r\nHG20\r\n
747 write(9 from 9) -> (77) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
747 write(9 from 9) -> (77) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
748 write(9 from 9) -> (68) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
748 write(9 from 9) -> (68) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
749 write(47 from 47) -> (21) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
749 write(47 from 47) -> (21) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
750 write(9 from 9) -> (12) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
750 write(9 from 9) -> (12) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
751 write(12 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1d (esc)
751 write(12 from 473) -> (0) 1d2\\r\\n\x00\x00\x00\xb2\x96\xee\x1d (esc)
752 write limit reached; closing socket
752 write limit reached; closing socket
753 write(27) -> 15\r\nInternal Server Error\r\n
753 write(27) -> 15\r\nInternal Server Error\r\n
754
754
755 $ rm -f error.log
755 $ rm -f error.log
756
756
757 Server stops sending in middle of bundle2 payload chunk
757 Server stops sending in middle of bundle2 payload chunk
758
758
759 $ hg serve --config badserver.closeaftersendbytes=1535 -p $HGPORT -d --pid-file=hg.pid -E error.log
759 $ hg serve --config badserver.closeaftersendbytes=1535 -p $HGPORT -d --pid-file=hg.pid -E error.log
760 $ cat hg.pid > $DAEMON_PIDS
760 $ cat hg.pid > $DAEMON_PIDS
761
761
762 $ hg clone http://localhost:$HGPORT/ clone
762 $ hg clone http://localhost:$HGPORT/ clone
763 requesting all changes
763 requesting all changes
764 adding changesets
764 adding changesets
765 transaction abort!
765 transaction abort!
766 rollback completed
766 rollback completed
767 abort: HTTP request error (incomplete response)
767 abort: HTTP request error (incomplete response)
768 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
768 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
769 [255]
769 [255]
770
770
771 $ killdaemons.py $DAEMON_PIDS
771 $ killdaemons.py $DAEMON_PIDS
772
772
773 $ tail -12 error.log
773 $ tail -12 error.log
774 write(28 from 28) -> (573) Transfer-Encoding: chunked\r\n
774 write(28 from 28) -> (573) Transfer-Encoding: chunked\r\n
775 write(2 from 2) -> (571) \r\n
775 write(2 from 2) -> (571) \r\n
776 write(6 from 6) -> (565) 1\\r\\n\x04\\r\\n (esc)
776 write(6 from 6) -> (565) 1\\r\\n\x04\\r\\n (esc)
777 write(9 from 9) -> (556) 4\r\nnone\r\n
777 write(9 from 9) -> (556) 4\r\nnone\r\n
778 write(9 from 9) -> (547) 4\r\nHG20\r\n
778 write(9 from 9) -> (547) 4\r\nHG20\r\n
779 write(9 from 9) -> (538) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
779 write(9 from 9) -> (538) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
780 write(9 from 9) -> (529) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
780 write(9 from 9) -> (529) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
781 write(47 from 47) -> (482) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
781 write(47 from 47) -> (482) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
782 write(9 from 9) -> (473) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
782 write(9 from 9) -> (473) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
783 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)
783 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)
784 write limit reached; closing socket
784 write limit reached; closing socket
785 write(27) -> 15\r\nInternal Server Error\r\n
785 write(27) -> 15\r\nInternal Server Error\r\n
786
786
787 $ rm -f error.log
787 $ rm -f error.log
788
788
789 Server stops sending after 0 length payload chunk size
789 Server stops sending after 0 length payload chunk size
790
790
791 $ hg serve --config badserver.closeaftersendbytes=1566 -p $HGPORT -d --pid-file=hg.pid -E error.log
791 $ hg serve --config badserver.closeaftersendbytes=1566 -p $HGPORT -d --pid-file=hg.pid -E error.log
792 $ cat hg.pid > $DAEMON_PIDS
792 $ cat hg.pid > $DAEMON_PIDS
793
793
794 $ hg clone http://localhost:$HGPORT/ clone
794 $ hg clone http://localhost:$HGPORT/ clone
795 requesting all changes
795 requesting all changes
796 adding changesets
796 adding changesets
797 adding manifests
797 adding manifests
798 adding file changes
798 adding file changes
799 added 1 changesets with 1 changes to 1 files
799 added 1 changesets with 1 changes to 1 files
800 transaction abort!
800 transaction abort!
801 rollback completed
801 rollback completed
802 abort: HTTP request error (incomplete response; expected 23 bytes got 9)
802 abort: HTTP request error (incomplete response; expected 23 bytes got 9)
803 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
803 (this may be an intermittent network failure; if the error persists, consider contacting the network or server operator)
804 [255]
804 [255]
805
805
806 $ killdaemons.py $DAEMON_PIDS
806 $ killdaemons.py $DAEMON_PIDS
807
807
808 $ tail -13 error.log
808 $ tail -13 error.log
809 write(6 from 6) -> (596) 1\\r\\n\x04\\r\\n (esc)
809 write(6 from 6) -> (596) 1\\r\\n\x04\\r\\n (esc)
810 write(9 from 9) -> (587) 4\r\nnone\r\n
810 write(9 from 9) -> (587) 4\r\nnone\r\n
811 write(9 from 9) -> (578) 4\r\nHG20\r\n
811 write(9 from 9) -> (578) 4\r\nHG20\r\n
812 write(9 from 9) -> (569) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
812 write(9 from 9) -> (569) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
813 write(9 from 9) -> (560) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
813 write(9 from 9) -> (560) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
814 write(47 from 47) -> (513) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
814 write(47 from 47) -> (513) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
815 write(9 from 9) -> (504) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
815 write(9 from 9) -> (504) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
816 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)
816 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)
817 write(9 from 9) -> (22) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
817 write(9 from 9) -> (22) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
818 write(9 from 9) -> (13) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
818 write(9 from 9) -> (13) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
819 write(13 from 38) -> (0) 20\\r\\n\x08LISTKEYS (esc)
819 write(13 from 38) -> (0) 20\\r\\n\x08LISTKEYS (esc)
820 write limit reached; closing socket
820 write limit reached; closing socket
821 write(27) -> 15\r\nInternal Server Error\r\n
821 write(27) -> 15\r\nInternal Server Error\r\n
822
822
823 $ rm -f error.log
823 $ rm -f error.log
824
824
825 Server stops sending after 0 part bundle part header (indicating end of bundle2 payload)
825 Server stops sending after 0 part bundle part header (indicating end of bundle2 payload)
826 This is before the 0 size chunked transfer part that signals end of HTTP response.
826 This is before the 0 size chunked transfer part that signals end of HTTP response.
827
827
828 # $ hg serve --config badserver.closeaftersendbytes=1741 -p $HGPORT -d --pid-file=hg.pid -E error.log
828 # $ hg serve --config badserver.closeaftersendbytes=1741 -p $HGPORT -d --pid-file=hg.pid -E error.log
829 $ hg serve --config badserver.closeaftersendbytes=1848 -p $HGPORT -d --pid-file=hg.pid -E error.log
829 $ hg serve --config badserver.closeaftersendbytes=1848 -p $HGPORT -d --pid-file=hg.pid -E error.log
830 $ cat hg.pid > $DAEMON_PIDS
830 $ cat hg.pid > $DAEMON_PIDS
831
831
832 $ hg clone http://localhost:$HGPORT/ clone
832 $ hg clone http://localhost:$HGPORT/ clone
833 requesting all changes
833 requesting all changes
834 adding changesets
834 adding changesets
835 adding manifests
835 adding manifests
836 adding file changes
836 adding file changes
837 added 1 changesets with 1 changes to 1 files
837 added 1 changesets with 1 changes to 1 files
838 new changesets 96ee1d7354c4
838 new changesets 96ee1d7354c4
839 updating to branch default
839 updating to branch default
840 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
840 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
841
841
842 $ killdaemons.py $DAEMON_PIDS
842 $ killdaemons.py $DAEMON_PIDS
843
843
844 $ tail -22 error.log
844 $ tail -22 error.log
845 write(9 from 9) -> (851) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
845 write(9 from 9) -> (851) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
846 write(9 from 9) -> (842) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
846 write(9 from 9) -> (842) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
847 write(47 from 47) -> (795) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
847 write(47 from 47) -> (795) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
848 write(9 from 9) -> (786) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
848 write(9 from 9) -> (786) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
849 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)
849 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)
850 write(9 from 9) -> (304) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
850 write(9 from 9) -> (304) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
851 write(9 from 9) -> (295) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
851 write(9 from 9) -> (295) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
852 write(38 from 38) -> (257) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00 \x06namespacephases\\r\\n (esc)
852 write(38 from 38) -> (257) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00 \x06namespacephases\\r\\n (esc)
853 write(9 from 9) -> (248) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
853 write(9 from 9) -> (248) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
854 write(64 from 64) -> (184) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c 1\npublishing True\r\n
854 write(64 from 64) -> (184) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c 1\npublishing True\r\n
855 write(9 from 9) -> (175) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
855 write(9 from 9) -> (175) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
856 write(9 from 9) -> (166) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
856 write(9 from 9) -> (166) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
857 write(41 from 41) -> (125) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00 namespacebookmarks\\r\\n (esc)
857 write(41 from 41) -> (125) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00 namespacebookmarks\\r\\n (esc)
858 write(9 from 9) -> (116) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
858 write(9 from 9) -> (116) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
859 write(9 from 9) -> (107) 4\\r\\n\x00\x00\x00\x1d\\r\\n (esc)
859 write(9 from 9) -> (107) 4\\r\\n\x00\x00\x00\x1d\\r\\n (esc)
860 write(35 from 35) -> (72) 1d\\r\\n\x16cache:rev-branch-cache\x00\x00\x00\x03\x00\x00\\r\\n (esc)
860 write(35 from 35) -> (72) 1d\\r\\n\x16cache:rev-branch-cache\x00\x00\x00\x03\x00\x00\\r\\n (esc)
861 write(9 from 9) -> (63) 4\\r\\n\x00\x00\x00'\\r\\n (esc)
861 write(9 from 9) -> (63) 4\\r\\n\x00\x00\x00'\\r\\n (esc)
862 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)
862 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)
863 write(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
863 write(9 from 9) -> (9) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
864 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
864 write(9 from 9) -> (0) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
865 write limit reached; closing socket
865 write limit reached; closing socket
866 write(27) -> 15\r\nInternal Server Error\r\n
866 write(27) -> 15\r\nInternal Server Error\r\n
867
867
868 $ rm -f error.log
868 $ rm -f error.log
869 $ rm -rf clone
869 $ rm -rf clone
870
870
871 Server sends a size 0 chunked-transfer size without terminating \r\n
871 Server sends a size 0 chunked-transfer size without terminating \r\n
872
872
873 $ hg serve --config badserver.closeaftersendbytes=1851 -p $HGPORT -d --pid-file=hg.pid -E error.log
873 $ hg serve --config badserver.closeaftersendbytes=1851 -p $HGPORT -d --pid-file=hg.pid -E error.log
874 $ cat hg.pid > $DAEMON_PIDS
874 $ cat hg.pid > $DAEMON_PIDS
875
875
876 $ hg clone http://localhost:$HGPORT/ clone
876 $ hg clone http://localhost:$HGPORT/ clone
877 requesting all changes
877 requesting all changes
878 adding changesets
878 adding changesets
879 adding manifests
879 adding manifests
880 adding file changes
880 adding file changes
881 added 1 changesets with 1 changes to 1 files
881 added 1 changesets with 1 changes to 1 files
882 new changesets 96ee1d7354c4
882 new changesets 96ee1d7354c4
883 updating to branch default
883 updating to branch default
884 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
884 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
885
885
886 $ killdaemons.py $DAEMON_PIDS
886 $ killdaemons.py $DAEMON_PIDS
887
887
888 $ tail -23 error.log
888 $ tail -23 error.log
889 write(9 from 9) -> (854) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
889 write(9 from 9) -> (854) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
890 write(9 from 9) -> (845) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
890 write(9 from 9) -> (845) 4\\r\\n\x00\x00\x00)\\r\\n (esc)
891 write(47 from 47) -> (798) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
891 write(47 from 47) -> (798) 29\\r\\n\x0bCHANGEGROUP\x00\x00\x00\x00\x01\x01\x07\x02 \x01version02nbchanges1\\r\\n (esc)
892 write(9 from 9) -> (789) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
892 write(9 from 9) -> (789) 4\\r\\n\x00\x00\x01\xd2\\r\\n (esc)
893 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)
893 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)
894 write(9 from 9) -> (307) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
894 write(9 from 9) -> (307) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
895 write(9 from 9) -> (298) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
895 write(9 from 9) -> (298) 4\\r\\n\x00\x00\x00 \\r\\n (esc)
896 write(38 from 38) -> (260) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00 \x06namespacephases\\r\\n (esc)
896 write(38 from 38) -> (260) 20\\r\\n\x08LISTKEYS\x00\x00\x00\x01\x01\x00 \x06namespacephases\\r\\n (esc)
897 write(9 from 9) -> (251) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
897 write(9 from 9) -> (251) 4\\r\\n\x00\x00\x00:\\r\\n (esc)
898 write(64 from 64) -> (187) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c 1\npublishing True\r\n
898 write(64 from 64) -> (187) 3a\r\n96ee1d7354c4ad7372047672c36a1f561e3a6a4c 1\npublishing True\r\n
899 write(9 from 9) -> (178) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
899 write(9 from 9) -> (178) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
900 write(9 from 9) -> (169) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
900 write(9 from 9) -> (169) 4\\r\\n\x00\x00\x00#\\r\\n (esc)
901 write(41 from 41) -> (128) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00 namespacebookmarks\\r\\n (esc)
901 write(41 from 41) -> (128) 23\\r\\n\x08LISTKEYS\x00\x00\x00\x02\x01\x00 namespacebookmarks\\r\\n (esc)
902 write(9 from 9) -> (119) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
902 write(9 from 9) -> (119) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
903 write(9 from 9) -> (110) 4\\r\\n\x00\x00\x00\x1d\\r\\n (esc)
903 write(9 from 9) -> (110) 4\\r\\n\x00\x00\x00\x1d\\r\\n (esc)
904 write(35 from 35) -> (75) 1d\\r\\n\x16cache:rev-branch-cache\x00\x00\x00\x03\x00\x00\\r\\n (esc)
904 write(35 from 35) -> (75) 1d\\r\\n\x16cache:rev-branch-cache\x00\x00\x00\x03\x00\x00\\r\\n (esc)
905 write(9 from 9) -> (66) 4\\r\\n\x00\x00\x00'\\r\\n (esc)
905 write(9 from 9) -> (66) 4\\r\\n\x00\x00\x00'\\r\\n (esc)
906 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)
906 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)
907 write(9 from 9) -> (12) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
907 write(9 from 9) -> (12) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
908 write(9 from 9) -> (3) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
908 write(9 from 9) -> (3) 4\\r\\n\x00\x00\x00\x00\\r\\n (esc)
909 write(3 from 5) -> (0) 0\r\n
909 write(3 from 5) -> (0) 0\r\n
910 write limit reached; closing socket
910 write limit reached; closing socket
911 write(27) -> 15\r\nInternal Server Error\r\n
911 write(27) -> 15\r\nInternal Server Error\r\n
912
912
913 $ rm -f error.log
913 $ rm -f error.log
914 $ rm -rf clone
914 $ rm -rf clone
General Comments 0
You need to be logged in to leave comments. Login now