comparison mercurial/hgweb/server.py @ 4870:8f430b1b3025

Make hg serve set the wsgi.url_scheme property correctly. This fixes the bug where hg serve with SSL will always detect the wrong urlbase for templates. This is also part of unifying the CGI interface and hg serve interface to both use standard wsgi.
author Wesley J. Landaker <wjl@icecavern.net>
date Thu, 12 Jul 2007 13:58:36 -0600
parents 192cd95c2ba8
children d787d9ad67cc
comparison
equal deleted inserted replaced
4869:be591b740e0f 4870:8f430b1b3025
35 def writelines(self, seq): 35 def writelines(self, seq):
36 for msg in seq: 36 for msg in seq:
37 self.handler.log_error("HG error: %s", msg) 37 self.handler.log_error("HG error: %s", msg)
38 38
39 class _hgwebhandler(object, BaseHTTPServer.BaseHTTPRequestHandler): 39 class _hgwebhandler(object, BaseHTTPServer.BaseHTTPRequestHandler):
40
41 url_scheme = 'http'
42
40 def __init__(self, *args, **kargs): 43 def __init__(self, *args, **kargs):
41 self.protocol_version = 'HTTP/1.1' 44 self.protocol_version = 'HTTP/1.1'
42 BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args, **kargs) 45 BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args, **kargs)
43 46
44 def log_error(self, format, *args): 47 def log_error(self, format, *args):
102 hval = hval.replace('\n', '').strip() 105 hval = hval.replace('\n', '').strip()
103 if hval: 106 if hval:
104 env[hkey] = hval 107 env[hkey] = hval
105 env['SERVER_PROTOCOL'] = self.request_version 108 env['SERVER_PROTOCOL'] = self.request_version
106 env['wsgi.version'] = (1, 0) 109 env['wsgi.version'] = (1, 0)
107 env['wsgi.url_scheme'] = 'http' 110 env['wsgi.url_scheme'] = type(self).url_scheme
108 env['wsgi.input'] = self.rfile 111 env['wsgi.input'] = self.rfile
109 env['wsgi.errors'] = _error_logger(self) 112 env['wsgi.errors'] = _error_logger(self)
110 env['wsgi.multithread'] = isinstance(self.server, 113 env['wsgi.multithread'] = isinstance(self.server,
111 SocketServer.ThreadingMixIn) 114 SocketServer.ThreadingMixIn)
112 env['wsgi.multiprocess'] = isinstance(self.server, 115 env['wsgi.multiprocess'] = isinstance(self.server,
166 self.length = self.length - len(data) 169 self.length = self.length - len(data)
167 self.wfile.write(data) 170 self.wfile.write(data)
168 self.wfile.flush() 171 self.wfile.flush()
169 172
170 class _shgwebhandler(_hgwebhandler): 173 class _shgwebhandler(_hgwebhandler):
174
175 url_scheme = 'https'
176
171 def setup(self): 177 def setup(self):
172 self.connection = self.request 178 self.connection = self.request
173 self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) 179 self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
174 self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) 180 self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
175 181