|
1 # hgweb.py - web interface to a mercurial repository |
|
2 # |
|
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net> |
|
4 # Copyright 2005 Matt Mackall <mpm@selenic.com> |
|
5 # |
|
6 # This software may be used and distributed according to the terms |
|
7 # of the GNU General Public License, incorporated herein by reference. |
|
8 |
|
9 from mercurial.demandload import demandload |
|
10 demandload(globals(), "socket sys cgi os") |
|
11 from mercurial.i18n import gettext as _ |
|
12 |
|
13 class hgrequest(object): |
|
14 def __init__(self, inp=None, out=None, env=None): |
|
15 self.inp = inp or sys.stdin |
|
16 self.out = out or sys.stdout |
|
17 self.env = env or os.environ |
|
18 self.form = cgi.parse(self.inp, self.env, keep_blank_values=1) |
|
19 |
|
20 def write(self, *things): |
|
21 for thing in things: |
|
22 if hasattr(thing, "__iter__"): |
|
23 for part in thing: |
|
24 self.write(part) |
|
25 else: |
|
26 try: |
|
27 self.out.write(str(thing)) |
|
28 except socket.error, inst: |
|
29 if inst[0] != errno.ECONNRESET: |
|
30 raise |
|
31 |
|
32 def header(self, headers=[('Content-type','text/html')]): |
|
33 for header in headers: |
|
34 self.out.write("%s: %s\r\n" % header) |
|
35 self.out.write("\r\n") |
|
36 |
|
37 def httphdr(self, type, file="", size=0): |
|
38 |
|
39 headers = [('Content-type', type)] |
|
40 if file: |
|
41 headers.append(('Content-disposition', 'attachment; filename=%s' % file)) |
|
42 if size > 0: |
|
43 headers.append(('Content-length', str(size))) |
|
44 self.header(headers) |