Show More
@@ -78,6 +78,23 b' class ErrorResponse(Exception):' | |||||
78 | self.message = message |
|
78 | self.message = message | |
79 | self.headers = headers |
|
79 | self.headers = headers | |
80 |
|
80 | |||
|
81 | class continuereader(object): | |||
|
82 | def __init__(self, f, write): | |||
|
83 | self.f = f | |||
|
84 | self._write = write | |||
|
85 | self.continued = False | |||
|
86 | ||||
|
87 | def read(self, amt=-1): | |||
|
88 | if not self.continued: | |||
|
89 | self.continued = True | |||
|
90 | self._write('HTTP/1.1 100 Continue\r\n\r\n') | |||
|
91 | return self.f.read(amt) | |||
|
92 | ||||
|
93 | def __getattr__(self, attr): | |||
|
94 | if attr in ('close', 'readline', 'readlines', '__iter__'): | |||
|
95 | return getattr(self.f, attr) | |||
|
96 | raise AttributeError() | |||
|
97 | ||||
81 | def _statusmessage(code): |
|
98 | def _statusmessage(code): | |
82 | from BaseHTTPServer import BaseHTTPRequestHandler |
|
99 | from BaseHTTPServer import BaseHTTPRequestHandler | |
83 | responses = BaseHTTPRequestHandler.responses |
|
100 | responses = BaseHTTPRequestHandler.responses |
@@ -8,6 +8,7 b'' | |||||
8 |
|
8 | |||
9 | import os, sys, errno, urllib, BaseHTTPServer, socket, SocketServer, traceback |
|
9 | import os, sys, errno, urllib, BaseHTTPServer, socket, SocketServer, traceback | |
10 | from mercurial import util, error |
|
10 | from mercurial import util, error | |
|
11 | from mercurial.hgweb import common | |||
11 | from mercurial.i18n import _ |
|
12 | from mercurial.i18n import _ | |
12 |
|
13 | |||
13 | def _splitURI(uri): |
|
14 | def _splitURI(uri): | |
@@ -111,6 +112,9 b' class _httprequesthandler(BaseHTTPServer' | |||||
111 | env['SERVER_PROTOCOL'] = self.request_version |
|
112 | env['SERVER_PROTOCOL'] = self.request_version | |
112 | env['wsgi.version'] = (1, 0) |
|
113 | env['wsgi.version'] = (1, 0) | |
113 | env['wsgi.url_scheme'] = self.url_scheme |
|
114 | env['wsgi.url_scheme'] = self.url_scheme | |
|
115 | if env.get('HTTP_EXPECT', '').lower() == '100-continue': | |||
|
116 | self.rfile = common.continuereader(self.rfile, self.wfile.write) | |||
|
117 | ||||
114 | env['wsgi.input'] = self.rfile |
|
118 | env['wsgi.input'] = self.rfile | |
115 | env['wsgi.errors'] = _error_logger(self) |
|
119 | env['wsgi.errors'] = _error_logger(self) | |
116 | env['wsgi.multithread'] = isinstance(self.server, |
|
120 | env['wsgi.multithread'] = isinstance(self.server, |
@@ -10,6 +10,7 b'' | |||||
10 |
|
10 | |||
11 | import os, sys |
|
11 | import os, sys | |
12 | from mercurial import util |
|
12 | from mercurial import util | |
|
13 | from mercurial.hgweb import common | |||
13 |
|
14 | |||
14 | def launch(application): |
|
15 | def launch(application): | |
15 | util.set_binary(sys.stdin) |
|
16 | util.set_binary(sys.stdin) | |
@@ -23,7 +24,11 b' def launch(application):' | |||||
23 | if environ['PATH_INFO'].startswith(scriptname): |
|
24 | if environ['PATH_INFO'].startswith(scriptname): | |
24 | environ['PATH_INFO'] = environ['PATH_INFO'][len(scriptname):] |
|
25 | environ['PATH_INFO'] = environ['PATH_INFO'][len(scriptname):] | |
25 |
|
26 | |||
26 |
|
|
27 | stdin = sys.stdin | |
|
28 | if environ.get('HTTP_EXPECT', '').lower() == '100-continue': | |||
|
29 | stdin = common.continuereader(stdin, sys.stdout.write) | |||
|
30 | ||||
|
31 | environ['wsgi.input'] = stdin | |||
27 | environ['wsgi.errors'] = sys.stderr |
|
32 | environ['wsgi.errors'] = sys.stderr | |
28 | environ['wsgi.version'] = (1, 0) |
|
33 | environ['wsgi.version'] = (1, 0) | |
29 | environ['wsgi.multithread'] = False |
|
34 | environ['wsgi.multithread'] = False |
General Comments 0
You need to be logged in to leave comments.
Login now