Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/hgweb/server.py @ 11109:a2bc2f2d77a9
subrepo: normalize path part of URLs so that pulling subrepos from webdir works
For a "all projects at root" repo layout eg:
/main
/sub
Where subrepos are used such that a clone of main has this layout:
./main/
./main/.hgsub
./main/sub/
And the .hgsub content is:
sub = ../sub
This allows a pull from a hgweb where main and sub are exposed
at the root (or same directory level)
The current code doesn't normalize the path component of a pull
url. this results in trying to pull from
http://server.com/hg/main/../sub
Current hgweb implementation doesn't reduce the path component
so this results in a 404 error though everything is setup logically.
This patch adresses this 404 error on the puller side
normalizing the URLs used for pulling sub repos. For this
example, the URL would be reduced to http://server.com/hg/sub
Fix + test
author | Edouard Gomez <ed.gomez@free.fr> |
---|---|
date | Sat, 01 May 2010 23:05:19 +0200 |
parents | 13a1b2fb7ef2 |
children | 49463314c24f |
rev | line source |
---|---|
2391
d351a3be3371
Fixing up comment headers for split up code.
Eric Hopper <hopper@omnifarious.org>
parents:
2355
diff
changeset
|
1 # hgweb/server.py - The standalone hg web server. |
131 | 2 # |
238
3b92f8fe47ae
hgweb.py: kill #! line, clean up copyright notice
mpm@selenic.com
parents:
222
diff
changeset
|
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net> |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
4 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
131 | 5 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8224
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
10263 | 7 # GNU General Public License version 2 or any later version. |
131 | 8 |
4016 | 9 import os, sys, errno, urllib, BaseHTTPServer, socket, SocketServer, traceback |
10905
13a1b2fb7ef2
pylint, pyflakes: remove unused or duplicate imports
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10644
diff
changeset
|
10 from mercurial import util, error |
7225
59b4ae211584
i18n: import _ instead of gettext
Martin Geisler <mg@daimi.au.dk>
parents:
6953
diff
changeset
|
11 from mercurial.i18n import _ |
138 | 12 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
13 def _splitURI(uri): |
2123
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
14 """ Return path and query splited from uri |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
15 |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
16 Just like CGI environment, the path is unquoted, the query is |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
17 not. |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
18 """ |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
19 if '?' in uri: |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
20 path, query = uri.split('?', 1) |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
21 else: |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
22 path, query = uri, '' |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
23 return urllib.unquote(path), query |
c0729a7f6f8a
Fixed path handling of the standalone server, fixed typo.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2122
diff
changeset
|
24 |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
25 class _error_logger(object): |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
26 def __init__(self, handler): |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
27 self.handler = handler |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
28 def flush(self): |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
29 pass |
3130
2e043c9a38a6
hgweb: fix errors spotted by pychecker
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3079
diff
changeset
|
30 def write(self, str): |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
31 self.writelines(str.split('\n')) |
3130
2e043c9a38a6
hgweb: fix errors spotted by pychecker
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3079
diff
changeset
|
32 def writelines(self, seq): |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
33 for msg in seq: |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
34 self.handler.log_error("HG error: %s", msg) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
35 |
9037
a232b90ffb51
compat: remove unnecessary diamond-shaped multiple inheritance
Alejandro Santos <alejolp@alejolp.com>
parents:
8663
diff
changeset
|
36 class _hgwebhandler(BaseHTTPServer.BaseHTTPRequestHandler): |
4870
8f430b1b3025
Make hg serve set the wsgi.url_scheme property correctly.
Wesley J. Landaker <wjl@icecavern.net>
parents:
4868
diff
changeset
|
37 |
8f430b1b3025
Make hg serve set the wsgi.url_scheme property correctly.
Wesley J. Landaker <wjl@icecavern.net>
parents:
4868
diff
changeset
|
38 url_scheme = 'http' |
4957
cdd33a048289
removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4871
diff
changeset
|
39 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
40 def __init__(self, *args, **kargs): |
2434
a2df85adface
http server: support persistent connections.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2404
diff
changeset
|
41 self.protocol_version = 'HTTP/1.1' |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
42 BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args, **kargs) |
1498
78590fb4a82b
hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1473
diff
changeset
|
43 |
5549
f2f42262adbd
hgweb.server: flush log files after every access
Patrick Mezard <pmezard@gmail.com>
parents:
5150
diff
changeset
|
44 def _log_any(self, fp, format, *args): |
f2f42262adbd
hgweb.server: flush log files after every access
Patrick Mezard <pmezard@gmail.com>
parents:
5150
diff
changeset
|
45 fp.write("%s - - [%s] %s\n" % (self.client_address[0], |
f2f42262adbd
hgweb.server: flush log files after every access
Patrick Mezard <pmezard@gmail.com>
parents:
5150
diff
changeset
|
46 self.log_date_time_string(), |
f2f42262adbd
hgweb.server: flush log files after every access
Patrick Mezard <pmezard@gmail.com>
parents:
5150
diff
changeset
|
47 format % args)) |
f2f42262adbd
hgweb.server: flush log files after every access
Patrick Mezard <pmezard@gmail.com>
parents:
5150
diff
changeset
|
48 fp.flush() |
f2f42262adbd
hgweb.server: flush log files after every access
Patrick Mezard <pmezard@gmail.com>
parents:
5150
diff
changeset
|
49 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
50 def log_error(self, format, *args): |
5549
f2f42262adbd
hgweb.server: flush log files after every access
Patrick Mezard <pmezard@gmail.com>
parents:
5150
diff
changeset
|
51 self._log_any(self.server.errorlog, format, *args) |
131 | 52 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
53 def log_message(self, format, *args): |
5549
f2f42262adbd
hgweb.server: flush log files after every access
Patrick Mezard <pmezard@gmail.com>
parents:
5150
diff
changeset
|
54 self._log_any(self.server.accesslog, format, *args) |
538 | 55 |
4860
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
56 def do_write(self): |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
57 try: |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
58 self.do_hgweb() |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
59 except socket.error, inst: |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
60 if inst[0] != errno.EPIPE: |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
61 raise |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
62 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
63 def do_POST(self): |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
64 try: |
4860
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
65 self.do_write() |
7280
810ca383da9c
remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7225
diff
changeset
|
66 except StandardError: |
4015
769be3c57564
Handle exceptions in do_hgweb: Send "Internal Server Error", log traceback
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3836
diff
changeset
|
67 self._start_response("500 Internal Server Error", []) |
769be3c57564
Handle exceptions in do_hgweb: Send "Internal Server Error", log traceback
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3836
diff
changeset
|
68 self._write("Internal Server Error") |
769be3c57564
Handle exceptions in do_hgweb: Send "Internal Server Error", log traceback
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3836
diff
changeset
|
69 tb = "".join(traceback.format_exception(*sys.exc_info())) |
8663
45f626a39def
wrap string literals in error messages
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
70 self.log_error("Exception happened during processing " |
45f626a39def
wrap string literals in error messages
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
71 "request '%s':\n%s", self.path, tb) |
133
fb84d3e71042
added template support for some hgweb output, also, template files for
jake@edge2.net
parents:
132
diff
changeset
|
72 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
73 def do_GET(self): |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
74 self.do_POST() |
131 | 75 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
76 def do_hgweb(self): |
5835
bd34f0ac3cb0
adding "prefix" option to "hg serve" (command line and [web] section)
Michele Cella <michele.cella@gmail.com>
parents:
5690
diff
changeset
|
77 path, query = _splitURI(self.path) |
138 | 78 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
79 env = {} |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
80 env['GATEWAY_INTERFACE'] = 'CGI/1.1' |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
81 env['REQUEST_METHOD'] = self.command |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
82 env['SERVER_NAME'] = self.server.server_name |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
83 env['SERVER_PORT'] = str(self.server.server_port) |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3130
diff
changeset
|
84 env['REQUEST_URI'] = self.path |
5835
bd34f0ac3cb0
adding "prefix" option to "hg serve" (command line and [web] section)
Michele Cella <michele.cella@gmail.com>
parents:
5690
diff
changeset
|
85 env['SCRIPT_NAME'] = self.server.prefix |
bd34f0ac3cb0
adding "prefix" option to "hg serve" (command line and [web] section)
Michele Cella <michele.cella@gmail.com>
parents:
5690
diff
changeset
|
86 env['PATH_INFO'] = path[len(self.server.prefix):] |
4359
80d3f6f0d8e5
hg serve: don't do DNS lookups
Matt Mackall <mpm@selenic.com>
parents:
4245
diff
changeset
|
87 env['REMOTE_HOST'] = self.client_address[0] |
80d3f6f0d8e5
hg serve: don't do DNS lookups
Matt Mackall <mpm@selenic.com>
parents:
4245
diff
changeset
|
88 env['REMOTE_ADDR'] = self.client_address[0] |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
89 if query: |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
90 env['QUERY_STRING'] = query |
1579
85803ec2daab
Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1575
diff
changeset
|
91 |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
92 if self.headers.typeheader is None: |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
93 env['CONTENT_TYPE'] = self.headers.type |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
94 else: |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
95 env['CONTENT_TYPE'] = self.headers.typeheader |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
96 length = self.headers.getheader('content-length') |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
97 if length: |
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
98 env['CONTENT_LENGTH'] = length |
4633
ff7253a0d1da
Cleanup of whitespace, indentation and line continuation.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4534
diff
changeset
|
99 for header in [h for h in self.headers.keys() |
2505
01b856927970
Fix server to set up a more WSGI compliant environment.
Eric Hopper <hopper@omnifarious.org>
parents:
2434
diff
changeset
|
100 if h not in ('content-type', 'content-length')]: |
01b856927970
Fix server to set up a more WSGI compliant environment.
Eric Hopper <hopper@omnifarious.org>
parents:
2434
diff
changeset
|
101 hkey = 'HTTP_' + header.replace('-', '_').upper() |
01b856927970
Fix server to set up a more WSGI compliant environment.
Eric Hopper <hopper@omnifarious.org>
parents:
2434
diff
changeset
|
102 hval = self.headers.getheader(header) |
01b856927970
Fix server to set up a more WSGI compliant environment.
Eric Hopper <hopper@omnifarious.org>
parents:
2434
diff
changeset
|
103 hval = hval.replace('\n', '').strip() |
01b856927970
Fix server to set up a more WSGI compliant environment.
Eric Hopper <hopper@omnifarious.org>
parents:
2434
diff
changeset
|
104 if hval: |
01b856927970
Fix server to set up a more WSGI compliant environment.
Eric Hopper <hopper@omnifarious.org>
parents:
2434
diff
changeset
|
105 env[hkey] = hval |
01b856927970
Fix server to set up a more WSGI compliant environment.
Eric Hopper <hopper@omnifarious.org>
parents:
2434
diff
changeset
|
106 env['SERVER_PROTOCOL'] = self.request_version |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
107 env['wsgi.version'] = (1, 0) |
4871 | 108 env['wsgi.url_scheme'] = self.url_scheme |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
109 env['wsgi.input'] = self.rfile |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
110 env['wsgi.errors'] = _error_logger(self) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
111 env['wsgi.multithread'] = isinstance(self.server, |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
112 SocketServer.ThreadingMixIn) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
113 env['wsgi.multiprocess'] = isinstance(self.server, |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
114 SocketServer.ForkingMixIn) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
115 env['wsgi.run_once'] = 0 |
601 | 116 |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
117 self.close_connection = True |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
118 self.saved_status = None |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
119 self.saved_headers = [] |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
120 self.sent_headers = False |
2508
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
121 self.length = None |
6784
18c429ea3a0e
hgweb: all protocol functions have become generators
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6403
diff
changeset
|
122 for chunk in self.server.application(env, self._start_response): |
18c429ea3a0e
hgweb: all protocol functions have become generators
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6403
diff
changeset
|
123 self._write(chunk) |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
124 |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
125 def send_headers(self): |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
126 if not self.saved_status: |
8663
45f626a39def
wrap string literals in error messages
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
127 raise AssertionError("Sending headers before " |
45f626a39def
wrap string literals in error messages
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
128 "start_response() called") |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
129 saved_status = self.saved_status.split(None, 1) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
130 saved_status[0] = int(saved_status[0]) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
131 self.send_response(*saved_status) |
2508
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
132 should_close = True |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
133 for h in self.saved_headers: |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
134 self.send_header(*h) |
2508
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
135 if h[0].lower() == 'content-length': |
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
136 should_close = False |
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
137 self.length = int(h[1]) |
2582
276de216d2c5
Respect "Connection: close" headers sent by HTTP clients.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2508
diff
changeset
|
138 # The value of the Connection header is a list of case-insensitive |
276de216d2c5
Respect "Connection: close" headers sent by HTTP clients.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2508
diff
changeset
|
139 # tokens separated by commas and optional whitespace. |
2600
c4325f0a9b91
clean up trailing white space.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2582
diff
changeset
|
140 if 'close' in [token.strip().lower() for token in |
2582
276de216d2c5
Respect "Connection: close" headers sent by HTTP clients.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2508
diff
changeset
|
141 self.headers.get('connection', '').split(',')]: |
276de216d2c5
Respect "Connection: close" headers sent by HTTP clients.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2508
diff
changeset
|
142 should_close = True |
2508
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
143 if should_close: |
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
144 self.send_header('Connection', 'close') |
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
145 self.close_connection = should_close |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
146 self.end_headers() |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
147 self.sent_headers = True |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
148 |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
149 def _start_response(self, http_status, headers, exc_info=None): |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
150 code, msg = http_status.split(None, 1) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
151 code = int(code) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
152 self.saved_status = http_status |
2508
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
153 bad_headers = ('connection', 'transfer-encoding') |
4633
ff7253a0d1da
Cleanup of whitespace, indentation and line continuation.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4534
diff
changeset
|
154 self.saved_headers = [h for h in headers |
ff7253a0d1da
Cleanup of whitespace, indentation and line continuation.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4534
diff
changeset
|
155 if h[0].lower() not in bad_headers] |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
156 return self._write |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
157 |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
158 def _write(self, data): |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
159 if not self.saved_status: |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
160 raise AssertionError("data written before start_response() called") |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
161 elif not self.sent_headers: |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
162 self.send_headers() |
2508
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
163 if self.length is not None: |
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
164 if len(data) > self.length: |
8663
45f626a39def
wrap string literals in error messages
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
165 raise AssertionError("Content-length header sent, but more " |
45f626a39def
wrap string literals in error messages
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
166 "bytes than specified are being written.") |
2508
ab460a3f0e3a
Put support for persistent connections back in.
Eric Hopper <hopper@omnifarious.org>
parents:
2507
diff
changeset
|
167 self.length = self.length - len(data) |
2506
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
168 self.wfile.write(data) |
d0db3462d568
This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents:
2505
diff
changeset
|
169 self.wfile.flush() |
136 | 170 |
4860
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
171 class _shgwebhandler(_hgwebhandler): |
4870
8f430b1b3025
Make hg serve set the wsgi.url_scheme property correctly.
Wesley J. Landaker <wjl@icecavern.net>
parents:
4868
diff
changeset
|
172 |
8f430b1b3025
Make hg serve set the wsgi.url_scheme property correctly.
Wesley J. Landaker <wjl@icecavern.net>
parents:
4868
diff
changeset
|
173 url_scheme = 'https' |
4957
cdd33a048289
removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4871
diff
changeset
|
174 |
4860
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
175 def setup(self): |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
176 self.connection = self.request |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
177 self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
178 self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
179 |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
180 def do_write(self): |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
181 from OpenSSL.SSL import SysCallError |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
182 try: |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
183 super(_shgwebhandler, self).do_write() |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
184 except SysCallError, inst: |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
185 if inst.args[0] != errno.EPIPE: |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
186 raise |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
187 |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
188 def handle_one_request(self): |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
189 from OpenSSL.SSL import SysCallError, ZeroReturnError |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
190 try: |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
191 super(_shgwebhandler, self).handle_one_request() |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
192 except (SysCallError, ZeroReturnError): |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
193 self.close_connection = True |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
194 pass |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
195 |
10639
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
196 try: |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
197 from threading import activeCount |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
198 _mixin = SocketServer.ThreadingMixIn |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
199 except ImportError: |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
200 if hasattr(os, "fork"): |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
201 _mixin = SocketServer.ForkingMixIn |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
202 else: |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
203 class _mixin: |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
204 pass |
a6808629f450
server: externalize and streamline mixin setup
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10638
diff
changeset
|
205 |
10643
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
206 def openlog(opt, default): |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
207 if opt and opt != '-': |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
208 return open(opt, 'a') |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
209 return default |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
210 |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
211 class MercurialHTTPServer(object, _mixin, BaseHTTPServer.HTTPServer): |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
212 |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
213 # SO_REUSEADDR has broken semantics on windows |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
214 if os.name == 'nt': |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
215 allow_reuse_address = 0 |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
216 |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
217 def __init__(self, ui, app, addr, handler, **kwargs): |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
218 BaseHTTPServer.HTTPServer.__init__(self, addr, handler, **kwargs) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
219 self.daemon_threads = True |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
220 self.application = app |
2124
27fd8b7a6c51
Cleaned trailing whitespace in hgweb.py, removed command line shortcut for webdir-conf.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2123
diff
changeset
|
221 |
10643
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
222 ssl_cert = ui.config('web', 'certificate') |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
223 if ssl_cert: |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
224 try: |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
225 from OpenSSL import SSL |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
226 ctx = SSL.Context(SSL.SSLv23_METHOD) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
227 except ImportError: |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
228 raise util.Abort(_("SSL support is unavailable")) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
229 ctx.use_privatekey_file(ssl_cert) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
230 ctx.use_certificate_file(ssl_cert) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
231 sock = socket.socket(self.address_family, self.socket_type) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
232 self.socket = SSL.Connection(ctx, sock) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
233 self.server_bind() |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
234 self.server_activate() |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
235 |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
236 prefix = ui.config('web', 'prefix', '') |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
237 if prefix: |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
238 prefix = '/' + prefix.strip('/') |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
239 self.prefix = prefix |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
240 |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
241 alog = openlog(ui.config('web', 'accesslog', '-'), sys.stdout) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
242 elog = openlog(ui.config('web', 'errorlog', '-'), sys.stderr) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
243 self.accesslog = alog |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
244 self.errorlog = elog |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
245 |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
246 self.addr, self.port = self.socket.getsockname()[0:2] |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
247 self.fqaddr = socket.getfqdn(addr[0]) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
248 |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
249 class IPv6HTTPServer(MercurialHTTPServer): |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
250 address_family = getattr(socket, 'AF_INET6', None) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
251 def __init__(self, *args, **kwargs): |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
252 if self.address_family is None: |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
253 raise error.RepoError(_('IPv6 is not available on this system')) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
254 super(IPv6HTTPServer, self).__init__(*args, **kwargs) |
1874697a8863
server: unnest server classes into module namespace
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10642
diff
changeset
|
255 |
10644
63948e7d37f7
server: initialize wsgi app in command, then wrap server around it
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10643
diff
changeset
|
256 def create_server(ui, app): |
938 | 257 |
10644
63948e7d37f7
server: initialize wsgi app in command, then wrap server around it
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10643
diff
changeset
|
258 if ui.config('web', 'certificate'): |
4860
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
259 handler = _shgwebhandler |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
260 else: |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
261 handler = _hgwebhandler |
f3802f9f1840
Add SSL support to hg serve, activated via --certificate option
Brendan Cully <brendan@kublai.com>
parents:
4635
diff
changeset
|
262 |
10644
63948e7d37f7
server: initialize wsgi app in command, then wrap server around it
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10643
diff
changeset
|
263 if ui.configbool('web', 'ipv6'): |
10641
dedf88fe945a
server: abstract setup of ipv6 vs. normal server
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10640
diff
changeset
|
264 cls = IPv6HTTPServer |
dedf88fe945a
server: abstract setup of ipv6 vs. normal server
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10640
diff
changeset
|
265 else: |
dedf88fe945a
server: abstract setup of ipv6 vs. normal server
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10640
diff
changeset
|
266 cls = MercurialHTTPServer |
dedf88fe945a
server: abstract setup of ipv6 vs. normal server
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10640
diff
changeset
|
267 |
8224
1075f5c1b3fa
hgweb: pre-init mimetypes module (fixes ugly bug in python-2.6.2 mimetypes)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7928
diff
changeset
|
268 # ugly hack due to python issue5853 (for threaded use) |
1075f5c1b3fa
hgweb: pre-init mimetypes module (fixes ugly bug in python-2.6.2 mimetypes)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7928
diff
changeset
|
269 import mimetypes; mimetypes.init() |
1075f5c1b3fa
hgweb: pre-init mimetypes module (fixes ugly bug in python-2.6.2 mimetypes)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7928
diff
changeset
|
270 |
10644
63948e7d37f7
server: initialize wsgi app in command, then wrap server around it
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10643
diff
changeset
|
271 address = ui.config('web', 'address', '') |
63948e7d37f7
server: initialize wsgi app in command, then wrap server around it
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10643
diff
changeset
|
272 port = int(ui.config('web', 'port', 8000)) |
3628
dc3504af7722
hgweb: internalize some socket details
Matt Mackall <mpm@selenic.com>
parents:
3263
diff
changeset
|
273 try: |
10644
63948e7d37f7
server: initialize wsgi app in command, then wrap server around it
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10643
diff
changeset
|
274 return cls(ui, app, (address, port), handler) |
3628
dc3504af7722
hgweb: internalize some socket details
Matt Mackall <mpm@selenic.com>
parents:
3263
diff
changeset
|
275 except socket.error, inst: |
6262
de7256c82fad
hgweb: clarify which address and port can/cannot be bound at startup (bug 769)
Stephen Deasey <sdeasey@gmail.com>
parents:
6217
diff
changeset
|
276 raise util.Abort(_("cannot start server at '%s:%d': %s") |
de7256c82fad
hgweb: clarify which address and port can/cannot be bound at startup (bug 769)
Stephen Deasey <sdeasey@gmail.com>
parents:
6217
diff
changeset
|
277 % (address, port, inst.args[1])) |