annotate mercurial/hgweb.py @ 1205:4003ea658693

Write out hgrc properly. Previously, we simply appended to the hgrc file, which meant that it ended up containing multiple "paths" sections. Now, we only modify "paths.default".
author Bryan O'Sullivan <bos@serpentine.com>
date Sun, 04 Sep 2005 15:47:59 -0700
parents 2ae9c319e6fe
children 27f2ec705332
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
238
3b92f8fe47ae hgweb.py: kill #! line, clean up copyright notice
mpm@selenic.com
parents: 222
diff changeset
1 # hgweb.py - web interface to a mercurial repository
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
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>
575
7f5ce4bbdd7b More whitespace cleanups
mpm@selenic.com
parents: 572
diff changeset
4 # Copyright 2005 Matt Mackall <mpm@selenic.com>
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
5 #
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
6 # This software may be used and distributed according to the terms
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
7 # of the GNU General Public License, incorporated herein by reference.
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
8
1174
9d9f4973c76a Added missing 'import errno', and use errno for EPIPE, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1172
diff changeset
9 import os, cgi, time, re, socket, sys, zlib, errno
1112
87cbfaf79124 hgweb: add mdiff / fix sorting of archives
mpm@selenic.com
parents: 1099
diff changeset
10 import mdiff
1099
0cb9c72b6c03 Minor import fixups
mpm@selenic.com
parents: 1087
diff changeset
11 from hg import *
0cb9c72b6c03 Minor import fixups
mpm@selenic.com
parents: 1087
diff changeset
12 from ui import *
0cb9c72b6c03 Minor import fixups
mpm@selenic.com
parents: 1087
diff changeset
13
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
14
157
2653740d8118 Install the templates where they can be found by hgweb.py
mpm@selenic.com
parents: 156
diff changeset
15 def templatepath():
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
16 for f in "templates", "../templates":
157
2653740d8118 Install the templates where they can be found by hgweb.py
mpm@selenic.com
parents: 156
diff changeset
17 p = os.path.join(os.path.dirname(__file__), f)
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
18 if os.path.isdir(p):
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
19 return p
157
2653740d8118 Install the templates where they can be found by hgweb.py
mpm@selenic.com
parents: 156
diff changeset
20
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
21 def age(t):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
22 def plural(t, c):
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
23 if c == 1:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
24 return t
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
25 return t + "s"
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
26 def fmt(t, c):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
27 return "%d %s" % (c, plural(t, c))
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
28
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
29 now = time.time()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
30 delta = max(1, int(now - t))
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
31
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
32 scales = [["second", 1],
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
33 ["minute", 60],
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
34 ["hour", 3600],
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
35 ["day", 3600 * 24],
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
36 ["week", 3600 * 24 * 7],
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
37 ["month", 3600 * 24 * 30],
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
38 ["year", 3600 * 24 * 365]]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
39
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
40 scales.reverse()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
41
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
42 for t, s in scales:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
43 n = delta / s
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
44 if n >= 2 or s == 1:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
45 return fmt(t, n)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
46
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
47 def nl2br(text):
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
48 return text.replace('\n', '<br/>\n')
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
49
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
50 def obfuscate(text):
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
51 return ''.join(['&#%d;' % ord(c) for c in text])
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
52
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
53 def up(p):
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
54 if p[0] != "/":
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
55 p = "/" + p
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
56 if p[-1] == "/":
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
57 p = p[:-1]
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
58 up = os.path.dirname(p)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
59 if up == "/":
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
60 return "/"
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
61 return up + "/"
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
62
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
63 class hgrequest:
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
64 def __init__(self, inp=None, out=None, env=None):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
65 self.inp = inp or sys.stdin
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
66 self.out = out or sys.stdout
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
67 self.env = env or os.environ
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
68 self.form = cgi.parse(self.inp, self.env)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
69
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
70 def write(self, *things):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
71 for thing in things:
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
72 if hasattr(thing, "__iter__"):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
73 for part in thing:
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
74 self.write(part)
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
75 else:
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
76 try:
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
77 self.out.write(thing)
1160
0da98529a476 Fix TypeError
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1159
diff changeset
78 except TypeError:
0da98529a476 Fix TypeError
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1159
diff changeset
79 self.out.write(str(thing))
1174
9d9f4973c76a Added missing 'import errno', and use errno for EPIPE, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1172
diff changeset
80 except socket.error, inst:
9d9f4973c76a Added missing 'import errno', and use errno for EPIPE, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1172
diff changeset
81 if inst[0] != errno.ECONNRESET:
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
82 raise
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
83
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
84 def header(self, headers=[('Content-type','text/html')]):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
85 for header in headers:
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
86 self.out.write("%s: %s\r\n" % header)
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
87 self.out.write("\r\n")
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
88
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
89 def httphdr(self, type, file="", size=0):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
90
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
91 headers = [('Content-type', type)]
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
92 if file:
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
93 headers.append(('Content-disposition', 'attachment; filename=%s' % file))
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
94 if size > 0:
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
95 headers.append(('Content-length', str(size)))
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
96 self.header(headers)
135
c0faf50822ea change template to a generator
jake@edge2.net
parents: 134
diff changeset
97
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
98 class templater:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
99 def __init__(self, mapfile, filters={}, defaults={}):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
100 self.cache = {}
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
101 self.map = {}
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
102 self.base = os.path.dirname(mapfile)
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
103 self.filters = filters
601
8865eb8ade99 Add globals to templater/fixup RSS
mpm@selenic.com
parents: 600
diff changeset
104 self.defaults = defaults
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
105
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
106 for l in file(mapfile):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
107 m = re.match(r'(\S+)\s*=\s*"(.*)"$', l)
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
108 if m:
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
109 self.cache[m.group(1)] = m.group(2)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
110 else:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
111 m = re.match(r'(\S+)\s*=\s*(\S+)', l)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
112 if m:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
113 self.map[m.group(1)] = os.path.join(self.base, m.group(2))
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
114 else:
1073
7b35a980b982 [PATCH] raise exceptions with Exception subclasses
Bart Trojanowski <bart@jukie.net>
parents: 1063
diff changeset
115 raise LookupError("unknown map entry '%s'" % l)
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
116
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
117 def __call__(self, t, **map):
601
8865eb8ade99 Add globals to templater/fixup RSS
mpm@selenic.com
parents: 600
diff changeset
118 m = self.defaults.copy()
8865eb8ade99 Add globals to templater/fixup RSS
mpm@selenic.com
parents: 600
diff changeset
119 m.update(map)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
120 try:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
121 tmpl = self.cache[t]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
122 except KeyError:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
123 tmpl = self.cache[t] = file(self.map[t]).read()
974
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
124 return self.template(tmpl, self.filters, **m)
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
125
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
126 def template(self, tmpl, filters={}, **map):
974
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
127 while tmpl:
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
128 m = re.search(r"#([a-zA-Z0-9]+)((%[a-zA-Z0-9]+)*)((\|[a-zA-Z0-9]+)*)#", tmpl)
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
129 if m:
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
130 yield tmpl[:m.start(0)]
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
131 v = map.get(m.group(1), "")
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
132 v = callable(v) and v(**map) or v
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
133
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
134 format = m.group(2)
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
135 fl = m.group(4)
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
136
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
137 if format:
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
138 q = v.__iter__
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
139 for i in q():
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
140 lm = map.copy()
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
141 lm.update(i)
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
142 yield self(format[1:], **lm)
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
143
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
144 v = ""
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
145
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
146 elif fl:
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
147 for f in fl.split("|")[1:]:
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
148 v = filters[f](v)
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
149
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
150 yield v
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
151 tmpl = tmpl[m.end(0):]
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
152 else:
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
153 yield tmpl
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
154 return
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
155
599
765182a4c843 [PATCH] Add RSS support to hgweb
mpm@selenic.com
parents: 598
diff changeset
156 def rfc822date(x):
601
8865eb8ade99 Add globals to templater/fixup RSS
mpm@selenic.com
parents: 600
diff changeset
157 return time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime(x))
599
765182a4c843 [PATCH] Add RSS support to hgweb
mpm@selenic.com
parents: 598
diff changeset
158
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
159 common_filters = {
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
160 "escape": cgi.escape,
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
161 "age": age,
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
162 "date": (lambda x: time.asctime(time.gmtime(x))),
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
163 "addbreaks": nl2br,
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
164 "obfuscate": obfuscate,
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
165 "short": (lambda x: x[:12]),
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
166 "firstline": (lambda x: x.splitlines(1)[0]),
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
167 "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"),
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
168 "rfc822date": rfc822date,
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
169 }
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
170
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
171
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
172
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
173 class hgweb:
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
174 def __init__(self, repo, name=None):
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
175 if type(repo) == type(""):
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
176 self.repo = repository(ui(), repo)
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
177 else:
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
178 self.repo = repo
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
179
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
180 self.mtime = -1
1172
3f30a5e7e15b Use path relative to document root as reponame if published via a web server.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1170
diff changeset
181 self.reponame = name
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
182 self.archives = 'zip', 'gz', 'bz2'
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
183
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
184 def refresh(self):
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
185 s = os.stat(os.path.join(self.repo.root, ".hg", "00changelog.i"))
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
186 if s.st_mtime != self.mtime:
322
a0acae914e95 hgweb: Fix reloading of index
mpm@selenic.com
parents: 271
diff changeset
187 self.mtime = s.st_mtime
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
188 self.repo = repository(self.repo.ui, self.repo.root)
964
3f37720e7dc7 hgweb: Make maxfiles, maxchanges, and allowpull proper config options
mpm@selenic.com
parents: 957
diff changeset
189 self.maxchanges = self.repo.ui.config("web", "maxchanges", 10)
3f37720e7dc7 hgweb: Make maxfiles, maxchanges, and allowpull proper config options
mpm@selenic.com
parents: 957
diff changeset
190 self.maxfiles = self.repo.ui.config("web", "maxchanges", 10)
3f37720e7dc7 hgweb: Make maxfiles, maxchanges, and allowpull proper config options
mpm@selenic.com
parents: 957
diff changeset
191 self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
192
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
193 def date(self, cs):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
194 return time.asctime(time.gmtime(float(cs[2].split(' ')[0])))
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
195
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
196 def listfiles(self, files, mf):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
197 for f in files[:self.maxfiles]:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
198 yield self.t("filenodelink", node=hex(mf[f]), file=f)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
199 if len(files) > self.maxfiles:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
200 yield self.t("fileellipses")
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
201
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
202 def listfilediffs(self, files, changeset):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
203 for f in files[:self.maxfiles]:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
204 yield self.t("filedifflink", node=hex(changeset), file=f)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
205 if len(files) > self.maxfiles:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
206 yield self.t("fileellipses")
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
207
569
3e347929f5f9 [PATCH 1/5]: cleaning the template parent management in hgweb
mpm@selenic.com
parents: 568
diff changeset
208 def parents(self, t1, nodes=[], rev=None,**args):
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
209 if not rev:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
210 rev = lambda x: ""
569
3e347929f5f9 [PATCH 1/5]: cleaning the template parent management in hgweb
mpm@selenic.com
parents: 568
diff changeset
211 for node in nodes:
3e347929f5f9 [PATCH 1/5]: cleaning the template parent management in hgweb
mpm@selenic.com
parents: 568
diff changeset
212 if node != nullid:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
213 yield self.t(t1, node=hex(node), rev=rev(node), **args)
569
3e347929f5f9 [PATCH 1/5]: cleaning the template parent management in hgweb
mpm@selenic.com
parents: 568
diff changeset
214
568
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
215 def showtag(self, t1, node=nullid, **args):
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
216 for t in self.repo.nodetags(node):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
217 yield self.t(t1, tag=t, **args)
568
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
218
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
219 def diff(self, node1, node2, files):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
220 def filterfiles(list, files):
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
221 l = [x for x in list if x in files]
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
222
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
223 for f in files:
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
224 if f[-1] != os.sep:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
225 f += os.sep
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
226 l += [x for x in list if x.startswith(f)]
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
227 return l
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
228
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
229 parity = [0]
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
230 def diffblock(diff, f, fn):
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
231 yield self.t("diffblock",
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
232 lines=prettyprintlines(diff),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
233 parity=parity[0],
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
234 file=f,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
235 filenode=hex(fn or nullid))
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
236 parity[0] = 1 - parity[0]
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
237
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
238 def prettyprintlines(diff):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
239 for l in diff.splitlines(1):
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
240 if l.startswith('+'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
241 yield self.t("difflineplus", line=l)
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
242 elif l.startswith('-'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
243 yield self.t("difflineminus", line=l)
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
244 elif l.startswith('@'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
245 yield self.t("difflineat", line=l)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
246 else:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
247 yield self.t("diffline", line=l)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
248
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
249 r = self.repo
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
250 cl = r.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
251 mf = r.manifest
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
252 change1 = cl.read(node1)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
253 change2 = cl.read(node2)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
254 mmap1 = mf.read(change1[0])
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
255 mmap2 = mf.read(change2[0])
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
256 date1 = self.date(change1)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
257 date2 = self.date(change2)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
258
539
44b29b98254a Minor hgweb fixup for new diff code
mpm@selenic.com
parents: 538
diff changeset
259 c, a, d, u = r.changes(node1, node2)
645
a55048b2ae3a this patch permits hgweb to show the deleted files in the changeset diff
kreijack@inwind.REMOVEME.it
parents: 635
diff changeset
260 if files:
a55048b2ae3a this patch permits hgweb to show the deleted files in the changeset diff
kreijack@inwind.REMOVEME.it
parents: 635
diff changeset
261 c, a, d = map(lambda x: filterfiles(x, files), (c, a, d))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
262
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
263 for f in c:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
264 to = r.file(f).read(mmap1[f])
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
265 tn = r.file(f).read(mmap2[f])
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
266 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
267 for f in a:
265
7ca05593bd30 hgweb: fix non-existent source or destination for diff
mpm@selenic.com
parents: 258
diff changeset
268 to = None
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
269 tn = r.file(f).read(mmap2[f])
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
270 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
271 for f in d:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
272 to = r.file(f).read(mmap1[f])
265
7ca05593bd30 hgweb: fix non-existent source or destination for diff
mpm@selenic.com
parents: 258
diff changeset
273 tn = None
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
274 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
275
180
f25944662097 hgweb: Fix navigate to 0 bug
mpm@selenic.com
parents: 173
diff changeset
276 def changelog(self, pos):
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
277 def changenav(**map):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
278 def seq(factor=1):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
279 yield 1 * factor
173
8da1df932c16 hgweb: make navigation of changesets a bit nicer
mpm@selenic.com
parents: 172
diff changeset
280 yield 3 * factor
8da1df932c16 hgweb: make navigation of changesets a bit nicer
mpm@selenic.com
parents: 172
diff changeset
281 #yield 5 * factor
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
282 for f in seq(factor * 10):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
283 yield f
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
284
173
8da1df932c16 hgweb: make navigation of changesets a bit nicer
mpm@selenic.com
parents: 172
diff changeset
285 l = []
8da1df932c16 hgweb: make navigation of changesets a bit nicer
mpm@selenic.com
parents: 172
diff changeset
286 for f in seq():
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
287 if f < self.maxchanges / 2:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
288 continue
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
289 if f > count:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
290 break
173
8da1df932c16 hgweb: make navigation of changesets a bit nicer
mpm@selenic.com
parents: 172
diff changeset
291 r = "%d" % f
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
292 if pos + f < count:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
293 l.append(("+" + r, pos + f))
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
294 if pos - f >= 0:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
295 l.insert(0, ("-" + r, pos - f))
173
8da1df932c16 hgweb: make navigation of changesets a bit nicer
mpm@selenic.com
parents: 172
diff changeset
296
975
bdd7c53fca00 hgweb: Changed changelog page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 974
diff changeset
297 yield {"rev": 0, "label": "(0)"}
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
298
173
8da1df932c16 hgweb: make navigation of changesets a bit nicer
mpm@selenic.com
parents: 172
diff changeset
299 for label, rev in l:
975
bdd7c53fca00 hgweb: Changed changelog page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 974
diff changeset
300 yield {"label": label, "rev": rev}
173
8da1df932c16 hgweb: make navigation of changesets a bit nicer
mpm@selenic.com
parents: 172
diff changeset
301
975
bdd7c53fca00 hgweb: Changed changelog page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 974
diff changeset
302 yield {"label": "tip", "rev": ""}
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
303
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
304 def changelist(**map):
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
305 parity = (start - end) & 1
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
306 cl = self.repo.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
307 l = [] # build a list in forward order for efficiency
351
9525208e1c1d hgweb: change number navigation tidy up
mpm@selenic.com
parents: 350
diff changeset
308 for i in range(start, end):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
309 n = cl.node(i)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
310 changes = cl.read(n)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
311 hn = hex(n)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
312 t = float(changes[2].split(' ')[0])
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
313
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
314 l.insert(0, {"parity": parity,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
315 "author": changes[1],
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
316 "parent": self.parents("changelogparent",
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
317 cl.parents(n), cl.rev),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
318 "changelogtag": self.showtag("changelogtag",n),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
319 "manifest": hex(changes[0]),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
320 "desc": changes[4],
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
321 "date": t,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
322 "files": self.listfilediffs(changes[3], n),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
323 "rev": i,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
324 "node": hn})
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
325 parity = 1 - parity
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
326
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
327 for e in l:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
328 yield e
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
329
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
330 cl = self.repo.changelog
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
331 mf = cl.read(cl.tip())[0]
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
332 count = cl.count()
351
9525208e1c1d hgweb: change number navigation tidy up
mpm@selenic.com
parents: 350
diff changeset
333 start = max(0, pos - self.maxchanges + 1)
9525208e1c1d hgweb: change number navigation tidy up
mpm@selenic.com
parents: 350
diff changeset
334 end = min(count, start + self.maxchanges)
9525208e1c1d hgweb: change number navigation tidy up
mpm@selenic.com
parents: 350
diff changeset
335 pos = end - 1
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
336
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
337 yield self.t('changelog',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
338 changenav=changenav,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
339 manifest=hex(mf),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
340 rev=pos, changesets=count, entries=changelist)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
341
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
342 def search(self, query):
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
343
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
344 def changelist(**map):
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
345 cl = self.repo.changelog
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
346 count = 0
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
347 qw = query.lower().split()
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
348
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
349 def revgen():
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
350 for i in range(cl.count() - 1, 0, -100):
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
351 l = []
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
352 for j in range(max(0, i - 100), i):
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
353 n = cl.node(j)
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
354 changes = cl.read(n)
1023
bc806ba72959 Minor tweak to the revgen algorithm
mpm@selenic.com
parents: 1022
diff changeset
355 l.append((n, j, changes))
bc806ba72959 Minor tweak to the revgen algorithm
mpm@selenic.com
parents: 1022
diff changeset
356 l.reverse()
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
357 for e in l:
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
358 yield e
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
359
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
360 for n, i, changes in revgen():
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
361 miss = 0
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
362 for q in qw:
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
363 if not (q in changes[1].lower() or
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
364 q in changes[4].lower() or
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
365 q in " ".join(changes[3][:20]).lower()):
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
366 miss = 1
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
367 break
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
368 if miss:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
369 continue
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
370
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
371 count += 1
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
372 hn = hex(n)
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
373 t = float(changes[2].split(' ')[0])
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
374
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
375 yield self.t('searchentry',
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
376 parity=count & 1,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
377 author=changes[1],
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
378 parent=self.parents("changelogparent",
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
379 cl.parents(n), cl.rev),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
380 changelogtag=self.showtag("changelogtag",n),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
381 manifest=hex(changes[0]),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
382 desc=changes[4],
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
383 date=t,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
384 files=self.listfilediffs(changes[3], n),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
385 rev=i,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
386 node=hn)
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
387
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
388 if count >= self.maxchanges:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
389 break
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
390
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
391 cl = self.repo.changelog
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
392 mf = cl.read(cl.tip())[0]
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
393
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
394 yield self.t('search',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
395 query=query,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
396 manifest=hex(mf),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
397 entries=changelist)
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
398
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
399 def changeset(self, nodeid):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
400 n = bin(nodeid)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
401 cl = self.repo.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
402 changes = cl.read(n)
598
f8d44a2e6928 [PATCH 4/5]: cleaning the template parent management in hgweb
mpm@selenic.com
parents: 582
diff changeset
403 p1 = cl.parents(n)[0]
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
404 t = float(changes[2].split(' ')[0])
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
405
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
406 files = []
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
407 mf = self.repo.manifest.read(changes[0])
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
408 for f in changes[3]:
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
409 files.append(self.t("filenodelink",
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
410 filenode=hex(mf.get(f, nullid)), file=f))
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
411
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
412 def diff(**map):
645
a55048b2ae3a this patch permits hgweb to show the deleted files in the changeset diff
kreijack@inwind.REMOVEME.it
parents: 635
diff changeset
413 yield self.diff(p1, n, None)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
414
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
415 def archivelist():
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
416 for i in self.archives:
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
417 if self.repo.ui.configbool("web", "allow" + i, False):
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
418 yield {"type" : i, "node" : nodeid}
1077
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
419
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
420 yield self.t('changeset',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
421 diff=diff,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
422 rev=cl.rev(n),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
423 node=nodeid,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
424 parent=self.parents("changesetparent",
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
425 cl.parents(n), cl.rev),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
426 changesettag=self.showtag("changesettag",n),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
427 manifest=hex(changes[0]),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
428 author=changes[1],
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
429 desc=changes[4],
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
430 date=t,
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
431 files=files,
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
432 archives=archivelist())
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
433
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
434 def filelog(self, f, filenode):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
435 cl = self.repo.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
436 fl = self.repo.file(f)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
437 count = fl.count()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
438
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
439 def entries(**map):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
440 l = []
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
441 parity = (count - 1) & 1
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
442
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
443 for i in range(count):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
444 n = fl.node(i)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
445 lr = fl.linkrev(n)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
446 cn = cl.node(lr)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
447 cs = cl.read(cl.node(lr))
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
448 t = float(cs[2].split(' ')[0])
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
449
978
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
450 l.insert(0, {"parity": parity,
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
451 "filenode": hex(n),
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
452 "filerev": i,
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
453 "file": f,
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
454 "node": hex(cn),
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
455 "author": cs[1],
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
456 "date": t,
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
457 "parent": self.parents("filelogparent",
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
458 fl.parents(n),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
459 fl.rev, file=f),
978
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
460 "desc": cs[4]})
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
461 parity = 1 - parity
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
462
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
463 for e in l:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
464 yield e
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
465
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
466 yield self.t("filelog", file=f, filenode=filenode, entries=entries)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
467
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
468 def filerevision(self, f, node):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
469 fl = self.repo.file(f)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
470 n = bin(node)
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
471 text = fl.read(n)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
472 changerev = fl.linkrev(n)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
473 cl = self.repo.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
474 cn = cl.node(changerev)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
475 cs = cl.read(cn)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
476 t = float(cs[2].split(' ')[0])
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
477 mfn = cs[0]
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
478
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
479 def lines():
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
480 for l, t in enumerate(text.splitlines(1)):
976
5d5ab159d197 hgweb: Changed file page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 975
diff changeset
481 yield {"line": t,
5d5ab159d197 hgweb: Changed file page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 975
diff changeset
482 "linenumber": "% 6d" % (l + 1),
5d5ab159d197 hgweb: Changed file page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 975
diff changeset
483 "parity": l & 1}
359
0c4688e9ee5c hgweb: add file permissions
mpm@selenic.com
parents: 351
diff changeset
484
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
485 yield self.t("filerevision",
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
486 file=f,
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
487 filenode=node,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
488 path=up(f),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
489 text=lines(),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
490 rev=changerev,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
491 node=hex(cn),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
492 manifest=hex(mfn),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
493 author=cs[1],
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
494 date=t,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
495 parent=self.parents("filerevparent",
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
496 fl.parents(n), fl.rev, file=f),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
497 permissions=self.repo.manifest.readflags(mfn)[f])
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
498
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
499 def fileannotate(self, f, node):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
500 bcache = {}
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
501 ncache = {}
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
502 fl = self.repo.file(f)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
503 n = bin(node)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
504 changerev = fl.linkrev(n)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
505
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
506 cl = self.repo.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
507 cn = cl.node(changerev)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
508 cs = cl.read(cn)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
509 t = float(cs[2].split(' ')[0])
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
510 mfn = cs[0]
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
511
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
512 def annotate(**map):
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
513 parity = 1
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
514 last = None
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
515 for r, l in fl.annotate(n):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
516 try:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
517 cnode = ncache[r]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
518 except KeyError:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
519 cnode = ncache[r] = self.repo.changelog.node(r)
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
520
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
521 try:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
522 name = bcache[r]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
523 except KeyError:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
524 cl = self.repo.changelog.read(cnode)
1129
ee4f60abad93 Move generating short username to display in hg/hgweb annotate to ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1123
diff changeset
525 bcache[r] = name = self.repo.ui.shortuser(cl[1])
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
526
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
527 if last != cnode:
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
528 parity = 1 - parity
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
529 last = cnode
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
530
977
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
531 yield {"parity": parity,
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
532 "node": hex(cnode),
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
533 "rev": r,
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
534 "author": name,
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
535 "file": f,
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
536 "line": l}
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
537
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
538 yield self.t("fileannotate",
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
539 file=f,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
540 filenode=node,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
541 annotate=annotate,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
542 path=up(f),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
543 rev=changerev,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
544 node=hex(cn),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
545 manifest=hex(mfn),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
546 author=cs[1],
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
547 date=t,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
548 parent=self.parents("fileannotateparent",
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
549 fl.parents(n), fl.rev, file=f),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
550 permissions=self.repo.manifest.readflags(mfn)[f])
136
0e8d60d2bb2b added annotate
jake@edge2.net
parents: 135
diff changeset
551
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
552 def manifest(self, mnode, path):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
553 mf = self.repo.manifest.read(bin(mnode))
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
554 rev = self.repo.manifest.rev(bin(mnode))
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
555 node = self.repo.changelog.node(rev)
359
0c4688e9ee5c hgweb: add file permissions
mpm@selenic.com
parents: 351
diff changeset
556 mff=self.repo.manifest.readflags(bin(mnode))
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
557
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
558 files = {}
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
559
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
560 p = path[1:]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
561 l = len(p)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
562
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
563 for f,n in mf.items():
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
564 if f[:l] != p:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
565 continue
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
566 remain = f[l:]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
567 if "/" in remain:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
568 short = remain[:remain.find("/") + 1] # bleah
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
569 files[short] = (f, None)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
570 else:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
571 short = os.path.basename(remain)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
572 files[short] = (f, n)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
573
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
574 def filelist(**map):
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
575 parity = 0
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
576 fl = files.keys()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
577 fl.sort()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
578 for f in fl:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
579 full, fnode = files[f]
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
580 if not fnode:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
581 continue
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
582
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
583 yield {"file": full,
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
584 "manifest": mnode,
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
585 "filenode": hex(fnode),
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
586 "parity": parity,
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
587 "basename": f,
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
588 "permissions": mff[full]}
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
589 parity = 1 - parity
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
590
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
591 def dirlist(**map):
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
592 parity = 0
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
593 fl = files.keys()
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
594 fl.sort()
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
595 for f in fl:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
596 full, fnode = files[f]
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
597 if fnode:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
598 continue
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
599
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
600 yield {"parity": parity,
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
601 "path": os.path.join(path, f),
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
602 "manifest": mnode,
980
5197fb9d65d5 Merge with MPM
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 979 939
diff changeset
603 "basename": f[:-1]}
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
604 parity = 1 - parity
982
8d2e24bae760 hgweb: convert index entries to list expansion style
mpm@selenic.com
parents: 981
diff changeset
605
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
606 yield self.t("manifest",
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
607 manifest=mnode,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
608 rev=rev,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
609 node=hex(node),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
610 path=path,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
611 up=up(path),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
612 fentries=filelist,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
613 dentries=dirlist)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
614
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
615 def tags(self):
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
616 cl = self.repo.changelog
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
617 mf = cl.read(cl.tip())[0]
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
618
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 330
diff changeset
619 i = self.repo.tagslist()
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 330
diff changeset
620 i.reverse()
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
621
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
622 def entries(**map):
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
623 parity = 0
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
624 for k,n in i:
974
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
625 yield {"parity": parity,
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
626 "tag": k,
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
627 "node": hex(n)}
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
628 parity = 1 - parity
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
629
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
630 yield self.t("tags",
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
631 manifest=hex(mf),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
632 entries=entries)
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
633
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
634 def filediff(self, file, changeset):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
635 n = bin(changeset)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
636 cl = self.repo.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
637 p1 = cl.parents(n)[0]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
638 cs = cl.read(n)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
639 mf = self.repo.manifest.read(cs[0])
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
640
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
641 def diff(**map):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
642 yield self.diff(p1, n, file)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
643
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
644 yield self.t("filediff",
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
645 file=file,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
646 filenode=hex(mf.get(file, nullid)),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
647 node=changeset,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
648 rev=self.repo.changelog.rev(n),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
649 parent=self.parents("filediffparent",
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
650 cl.parents(n), cl.rev),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
651 diff=diff)
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
652
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
653 def archive(self, req, cnode, type):
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
654 cs = self.repo.changelog.read(cnode)
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
655 mnode = cs[0]
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
656 mf = self.repo.manifest.read(mnode)
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
657 rev = self.repo.manifest.rev(mnode)
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
658 reponame = re.sub(r"\W+", "-", self.reponame)
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
659 name = "%s-%s/" % (reponame, short(cnode))
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
660
1112
87cbfaf79124 hgweb: add mdiff / fix sorting of archives
mpm@selenic.com
parents: 1099
diff changeset
661 files = mf.keys()
87cbfaf79124 hgweb: add mdiff / fix sorting of archives
mpm@selenic.com
parents: 1099
diff changeset
662 files.sort()
87cbfaf79124 hgweb: add mdiff / fix sorting of archives
mpm@selenic.com
parents: 1099
diff changeset
663
1077
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
664 if type == 'zip':
1165
04be5eb73bb3 Fixed import needed to serve zip files which broke because of other changes.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1163
diff changeset
665 import zipfile, tempfile
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
666
1165
04be5eb73bb3 Fixed import needed to serve zip files which broke because of other changes.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1163
diff changeset
667 tmp = tempfile.mkstemp()[1]
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
668 try:
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
669 zf = zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED)
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
670
1112
87cbfaf79124 hgweb: add mdiff / fix sorting of archives
mpm@selenic.com
parents: 1099
diff changeset
671 for f in files:
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
672 zf.writestr(name + f, self.repo.file(f).read(mf[f]))
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
673 zf.close()
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
674
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
675 f = open(tmp, 'r')
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
676 req.httphdr('application/zip', name[:-1] + '.zip',
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
677 os.path.getsize(tmp))
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
678 req.write(f.read())
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
679 f.close()
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
680 finally:
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
681 os.unlink(tmp)
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
682
1077
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
683 else:
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
684 import StringIO
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
685 import time
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
686 import tarfile
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
687
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
688 tf = tarfile.TarFile.open(mode='w|' + type, fileobj=req.out)
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
689 mff = self.repo.manifest.readflags(mnode)
1077
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
690 mtime = int(time.time())
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
691
1185
2ae9c319e6fe Output Content-encoding for tar.gz and tar.bz2 snapshots
Edouard Gomez <ed.gomez@free.fr>
parents: 1182
diff changeset
692 if type == "gz":
2ae9c319e6fe Output Content-encoding for tar.gz and tar.bz2 snapshots
Edouard Gomez <ed.gomez@free.fr>
parents: 1182
diff changeset
693 encoding = "gzip"
2ae9c319e6fe Output Content-encoding for tar.gz and tar.bz2 snapshots
Edouard Gomez <ed.gomez@free.fr>
parents: 1182
diff changeset
694 else:
2ae9c319e6fe Output Content-encoding for tar.gz and tar.bz2 snapshots
Edouard Gomez <ed.gomez@free.fr>
parents: 1182
diff changeset
695 encoding = "x-bzip2"
2ae9c319e6fe Output Content-encoding for tar.gz and tar.bz2 snapshots
Edouard Gomez <ed.gomez@free.fr>
parents: 1182
diff changeset
696 req.header([('Content-type', 'application/x-tar'),
2ae9c319e6fe Output Content-encoding for tar.gz and tar.bz2 snapshots
Edouard Gomez <ed.gomez@free.fr>
parents: 1182
diff changeset
697 ('Content-disposition', 'attachment; filename=%s%s%s' %
2ae9c319e6fe Output Content-encoding for tar.gz and tar.bz2 snapshots
Edouard Gomez <ed.gomez@free.fr>
parents: 1182
diff changeset
698 (name[:-1], '.tar.', type)),
2ae9c319e6fe Output Content-encoding for tar.gz and tar.bz2 snapshots
Edouard Gomez <ed.gomez@free.fr>
parents: 1182
diff changeset
699 ('Content-encoding', encoding)])
1112
87cbfaf79124 hgweb: add mdiff / fix sorting of archives
mpm@selenic.com
parents: 1099
diff changeset
700 for fname in files:
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
701 rcont = self.repo.file(fname).read(mf[fname])
1077
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
702 finfo = tarfile.TarInfo(name + fname)
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
703 finfo.mtime = mtime
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
704 finfo.size = len(rcont)
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
705 finfo.mode = mff[fname] and 0755 or 0644
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
706 tf.addfile(finfo, StringIO.StringIO(rcont))
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
707 tf.close()
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
708
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
709 # add tags to things
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
710 # tags -> list of changesets corresponding to tags
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
711 # find tag, changeset, file
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
712
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
713 def run(self, req=hgrequest()):
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
714 def header(**map):
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
715 yield self.t("header", **map)
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
716
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
717 def footer(**map):
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
718 yield self.t("footer", **map)
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
719
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
720 self.refresh()
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
721
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
722 t = self.repo.ui.config("web", "templates", templatepath())
938
54b2a42e501e hgweb: add [web] section to hgrc
mpm@selenic.com
parents: 937
diff changeset
723 m = os.path.join(t, "map")
986
2810c625ca98 Add web:style option
mpm@selenic.com
parents: 984
diff changeset
724 style = self.repo.ui.config("web", "style", "")
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
725 if req.form.has_key('style'):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
726 style = req.form['style'][0]
986
2810c625ca98 Add web:style option
mpm@selenic.com
parents: 984
diff changeset
727 if style:
2810c625ca98 Add web:style option
mpm@selenic.com
parents: 984
diff changeset
728 b = os.path.basename("map-" + style)
983
4a988dc8d9b8 Fix RSS feeds
mpm@selenic.com
parents: 982
diff changeset
729 p = os.path.join(t, b)
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
730 if os.path.isfile(p):
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
731 m = p
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
732
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
733 port = req.env["SERVER_PORT"]
601
8865eb8ade99 Add globals to templater/fixup RSS
mpm@selenic.com
parents: 600
diff changeset
734 port = port != "80" and (":" + port) or ""
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
735 uri = req.env["REQUEST_URI"]
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
736 if "?" in uri:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
737 uri = uri.split("?")[0]
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
738 url = "http://%s%s%s" % (req.env["SERVER_NAME"], port, uri)
1172
3f30a5e7e15b Use path relative to document root as reponame if published via a web server.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1170
diff changeset
739 if not self.reponame:
3f30a5e7e15b Use path relative to document root as reponame if published via a web server.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1170
diff changeset
740 self.reponame = (self.repo.ui.config("web", "name")
3f30a5e7e15b Use path relative to document root as reponame if published via a web server.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1170
diff changeset
741 or uri.strip('/') or self.repo.root)
601
8865eb8ade99 Add globals to templater/fixup RSS
mpm@selenic.com
parents: 600
diff changeset
742
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
743 self.t = templater(m, common_filters,
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
744 {"url": url,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
745 "repo": self.reponame,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
746 "header": header,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
747 "footer": footer,
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
748 })
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
749
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
750 if not req.form.has_key('cmd'):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
751 req.form['cmd'] = [self.t.cache['default'],]
937
e4f1b76831b2 Whitespace
mpm@selenic.com
parents: 896
diff changeset
752
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
753 if req.form['cmd'][0] == 'changelog':
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
754 c = self.repo.changelog.count() - 1
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
755 hi = c
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
756 if req.form.has_key('rev'):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
757 hi = req.form['rev'][0]
166
39624c47060f hgweb: don't blow up on search for unknown keys
mpm@selenic.com
parents: 165
diff changeset
758 try:
39624c47060f hgweb: don't blow up on search for unknown keys
mpm@selenic.com
parents: 165
diff changeset
759 hi = self.repo.changelog.rev(self.repo.lookup(hi))
688
b50cd98bb7e4 Repair the hgweb search interface
mpm@selenic.com
parents: 645
diff changeset
760 except RepoError:
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
761 req.write(self.search(hi))
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
762 return
575
7f5ce4bbdd7b More whitespace cleanups
mpm@selenic.com
parents: 572
diff changeset
763
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
764 req.write(self.changelog(hi))
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
765
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
766 elif req.form['cmd'][0] == 'changeset':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
767 req.write(self.changeset(req.form['node'][0]))
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
768
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
769 elif req.form['cmd'][0] == 'manifest':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
770 req.write(self.manifest(req.form['manifest'][0], req.form['path'][0]))
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
771
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
772 elif req.form['cmd'][0] == 'tags':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
773 req.write(self.tags())
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
774
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
775 elif req.form['cmd'][0] == 'filediff':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
776 req.write(self.filediff(req.form['file'][0], req.form['node'][0]))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
777
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
778 elif req.form['cmd'][0] == 'file':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
779 req.write(self.filerevision(req.form['file'][0], req.form['filenode'][0]))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
780
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
781 elif req.form['cmd'][0] == 'annotate':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
782 req.write(self.fileannotate(req.form['file'][0], req.form['filenode'][0]))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
783
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
784 elif req.form['cmd'][0] == 'filelog':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
785 req.write(self.filelog(req.form['file'][0], req.form['filenode'][0]))
136
0e8d60d2bb2b added annotate
jake@edge2.net
parents: 135
diff changeset
786
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
787 elif req.form['cmd'][0] == 'heads':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
788 req.httphdr("application/mercurial-0.1")
222
87484f627422 make pull work for multiple heads
mpm@selenic.com
parents: 215
diff changeset
789 h = self.repo.heads()
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
790 req.write(" ".join(map(hex, h)) + "\n")
222
87484f627422 make pull work for multiple heads
mpm@selenic.com
parents: 215
diff changeset
791
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
792 elif req.form['cmd'][0] == 'branches':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
793 req.httphdr("application/mercurial-0.1")
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
794 nodes = []
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
795 if req.form.has_key('nodes'):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
796 nodes = map(bin, req.form['nodes'][0].split(" "))
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
797 for b in self.repo.branches(nodes):
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
798 req.write(" ".join(map(hex, b)) + "\n")
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
799
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
800 elif req.form['cmd'][0] == 'between':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
801 req.httphdr("application/mercurial-0.1")
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
802 nodes = []
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
803 if req.form.has_key('pairs'):
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
804 pairs = [map(bin, p.split("-"))
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
805 for p in req.form['pairs'][0].split(" ")]
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
806 for b in self.repo.between(pairs):
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
807 req.write(" ".join(map(hex, b)) + "\n")
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
808
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
809 elif req.form['cmd'][0] == 'changegroup':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
810 req.httphdr("application/mercurial-0.1")
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
811 nodes = []
964
3f37720e7dc7 hgweb: Make maxfiles, maxchanges, and allowpull proper config options
mpm@selenic.com
parents: 957
diff changeset
812 if not self.allowpull:
197
b388603984fc hgweb: add view-only support
mpm@selenic.com
parents: 195
diff changeset
813 return
b388603984fc hgweb: add view-only support
mpm@selenic.com
parents: 195
diff changeset
814
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
815 if req.form.has_key('roots'):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
816 nodes = map(bin, req.form['roots'][0].split(" "))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
817
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
818 z = zlib.compressobj()
635
85e2209d401c Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents: 620
diff changeset
819 f = self.repo.changegroup(nodes)
85e2209d401c Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents: 620
diff changeset
820 while 1:
85e2209d401c Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents: 620
diff changeset
821 chunk = f.read(4096)
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
822 if not chunk:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
823 break
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
824 req.write(z.compress(chunk))
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
825
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
826 req.write(z.flush())
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
827
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
828 elif req.form['cmd'][0] == 'archive':
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
829 changeset = bin(req.form['node'][0])
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
830 type = req.form['type'][0]
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
831 if (type in self.archives and
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
832 self.repo.ui.configbool("web", "allow" + type, False)):
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
833 self.archive(req, changeset, type)
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
834 return
1077
b87aeccf73d9 tarball support v0.3 pt 2
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1076
diff changeset
835
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
836 req.write(self.t("error"))
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
837
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
838 else:
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
839 req.write(self.t("error"))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
840
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
841 def create_server(repo):
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
842
938
54b2a42e501e hgweb: add [web] section to hgrc
mpm@selenic.com
parents: 937
diff changeset
843 def openlog(opt, default):
54b2a42e501e hgweb: add [web] section to hgrc
mpm@selenic.com
parents: 937
diff changeset
844 if opt and opt != '-':
54b2a42e501e hgweb: add [web] section to hgrc
mpm@selenic.com
parents: 937
diff changeset
845 return open(opt, 'w')
54b2a42e501e hgweb: add [web] section to hgrc
mpm@selenic.com
parents: 937
diff changeset
846 return default
54b2a42e501e hgweb: add [web] section to hgrc
mpm@selenic.com
parents: 937
diff changeset
847
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
848 address = repo.ui.config("web", "address", "")
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
849 port = int(repo.ui.config("web", "port", 8000))
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
850 use_ipv6 = repo.ui.configbool("web", "ipv6")
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
851 accesslog = openlog(repo.ui.config("web", "accesslog", "-"), sys.stdout)
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
852 errorlog = openlog(repo.ui.config("web", "errorlog", "-"), sys.stderr)
938
54b2a42e501e hgweb: add [web] section to hgrc
mpm@selenic.com
parents: 937
diff changeset
853
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
854 import BaseHTTPServer
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
855
825
0108c602feb9 Add an option to hg serve to serve file using IPv6
Samuel Tardieu <sam@rfc1149.net>
parents: 753
diff changeset
856 class IPv6HTTPServer(BaseHTTPServer.HTTPServer):
881
16ce690c411d Fix problem with "hg serve" on systems not providing IPv6.
Bryan O'Sullivan <bos@serpentine.com>
parents: 858
diff changeset
857 address_family = getattr(socket, 'AF_INET6', None)
16ce690c411d Fix problem with "hg serve" on systems not providing IPv6.
Bryan O'Sullivan <bos@serpentine.com>
parents: 858
diff changeset
858
16ce690c411d Fix problem with "hg serve" on systems not providing IPv6.
Bryan O'Sullivan <bos@serpentine.com>
parents: 858
diff changeset
859 def __init__(self, *args, **kwargs):
16ce690c411d Fix problem with "hg serve" on systems not providing IPv6.
Bryan O'Sullivan <bos@serpentine.com>
parents: 858
diff changeset
860 if self.address_family is None:
16ce690c411d Fix problem with "hg serve" on systems not providing IPv6.
Bryan O'Sullivan <bos@serpentine.com>
parents: 858
diff changeset
861 raise RepoError('IPv6 not available on this system')
16ce690c411d Fix problem with "hg serve" on systems not providing IPv6.
Bryan O'Sullivan <bos@serpentine.com>
parents: 858
diff changeset
862 BaseHTTPServer.HTTPServer.__init__(self, *args, **kwargs)
825
0108c602feb9 Add an option to hg serve to serve file using IPv6
Samuel Tardieu <sam@rfc1149.net>
parents: 753
diff changeset
863
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
864 class hgwebhandler(BaseHTTPServer.BaseHTTPRequestHandler):
605
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
865 def log_error(self, format, *args):
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
866 errorlog.write("%s - - [%s] %s\n" % (self.address_string(),
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
867 self.log_date_time_string(),
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
868 format % args))
937
e4f1b76831b2 Whitespace
mpm@selenic.com
parents: 896
diff changeset
869
605
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
870 def log_message(self, format, *args):
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
871 accesslog.write("%s - - [%s] %s\n" % (self.address_string(),
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
872 self.log_date_time_string(),
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
873 format % args))
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
874
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
875 def do_POST(self):
271
35acefbf0ae6 hgweb: ignore pipe errors
mpm@selenic.com
parents: 269
diff changeset
876 try:
35acefbf0ae6 hgweb: ignore pipe errors
mpm@selenic.com
parents: 269
diff changeset
877 self.do_hgweb()
35acefbf0ae6 hgweb: ignore pipe errors
mpm@selenic.com
parents: 269
diff changeset
878 except socket.error, inst:
1174
9d9f4973c76a Added missing 'import errno', and use errno for EPIPE, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1172
diff changeset
879 if inst[0] != errno.EPIPE:
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
880 raise
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
881
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
882 def do_GET(self):
271
35acefbf0ae6 hgweb: ignore pipe errors
mpm@selenic.com
parents: 269
diff changeset
883 self.do_POST()
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
884
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
885 def do_hgweb(self):
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
886 query = ""
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
887 p = self.path.find("?")
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
888 if p:
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
889 query = self.path[p + 1:]
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
890 query = query.replace('+', ' ')
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
891
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
892 env = {}
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
893 env['GATEWAY_INTERFACE'] = 'CGI/1.1'
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
894 env['REQUEST_METHOD'] = self.command
599
765182a4c843 [PATCH] Add RSS support to hgweb
mpm@selenic.com
parents: 598
diff changeset
895 env['SERVER_NAME'] = self.server.server_name
765182a4c843 [PATCH] Add RSS support to hgweb
mpm@selenic.com
parents: 598
diff changeset
896 env['SERVER_PORT'] = str(self.server.server_port)
765182a4c843 [PATCH] Add RSS support to hgweb
mpm@selenic.com
parents: 598
diff changeset
897 env['REQUEST_URI'] = "/"
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
898 if query:
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
899 env['QUERY_STRING'] = query
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
900 host = self.address_string()
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
901 if host != self.client_address[0]:
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
902 env['REMOTE_HOST'] = host
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
903 env['REMOTE_ADDR'] = self.client_address[0]
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
904
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
905 if self.headers.typeheader is None:
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
906 env['CONTENT_TYPE'] = self.headers.type
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
907 else:
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
908 env['CONTENT_TYPE'] = self.headers.typeheader
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
909 length = self.headers.getheader('content-length')
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
910 if length:
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
911 env['CONTENT_LENGTH'] = length
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
912 accept = []
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
913 for line in self.headers.getallmatchingheaders('accept'):
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
914 if line[:1] in "\t\n\r ":
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
915 accept.append(line.strip())
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
916 else:
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
917 accept = accept + line[7:].split(',')
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
918 env['HTTP_ACCEPT'] = ','.join(accept)
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
919
1180
fe3eb1628c40 Saving sys.argv and sys.stderr is not needed anymore
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1163
diff changeset
920 req = hgrequest(self.rfile, self.wfile, env)
fe3eb1628c40 Saving sys.argv and sys.stderr is not needed anymore
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1163
diff changeset
921 self.send_response(200, "Script output follows")
fe3eb1628c40 Saving sys.argv and sys.stderr is not needed anymore
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1163
diff changeset
922 hg.run(req)
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
923
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
924 hg = hgweb(repo)
825
0108c602feb9 Add an option to hg serve to serve file using IPv6
Samuel Tardieu <sam@rfc1149.net>
parents: 753
diff changeset
925 if use_ipv6:
0108c602feb9 Add an option to hg serve to serve file using IPv6
Samuel Tardieu <sam@rfc1149.net>
parents: 753
diff changeset
926 return IPv6HTTPServer((address, port), hgwebhandler)
0108c602feb9 Add an option to hg serve to serve file using IPv6
Samuel Tardieu <sam@rfc1149.net>
parents: 753
diff changeset
927 else:
0108c602feb9 Add an option to hg serve to serve file using IPv6
Samuel Tardieu <sam@rfc1149.net>
parents: 753
diff changeset
928 return BaseHTTPServer.HTTPServer((address, port), hgwebhandler)
603
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 601
diff changeset
929
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
930 def server(path, name, templates, address, port, use_ipv6=False,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
931 accesslog=sys.stdout, errorlog=sys.stderr):
825
0108c602feb9 Add an option to hg serve to serve file using IPv6
Samuel Tardieu <sam@rfc1149.net>
parents: 753
diff changeset
932 httpd = create_server(path, name, templates, address, port, use_ipv6,
605
8e82fd763be2 [PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents: 603
diff changeset
933 accesslog, errorlog)
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 157
diff changeset
934 httpd.serve_forever()
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
935
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
936 # This is a stopgap
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
937 class hgwebdir:
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
938 def __init__(self, config):
1181
4f5001f5b4c3 Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1180
diff changeset
939 def cleannames(items):
4f5001f5b4c3 Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1180
diff changeset
940 return [(name.strip('/'), path) for name, path in items]
4f5001f5b4c3 Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1180
diff changeset
941
1143
4fffb3d84b7c Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1142
diff changeset
942 if type(config) == type([]):
1181
4f5001f5b4c3 Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1180
diff changeset
943 self.repos = cleannames(config)
1143
4fffb3d84b7c Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1142
diff changeset
944 elif type(config) == type({}):
1181
4f5001f5b4c3 Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1180
diff changeset
945 self.repos = cleannames(config.items())
1143
4fffb3d84b7c Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1142
diff changeset
946 self.repos.sort()
4fffb3d84b7c Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1142
diff changeset
947 else:
4fffb3d84b7c Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1142
diff changeset
948 cp = ConfigParser.SafeConfigParser()
4fffb3d84b7c Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1142
diff changeset
949 cp.read(config)
1181
4f5001f5b4c3 Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1180
diff changeset
950 self.repos = cleannames(cp.items("paths"))
1143
4fffb3d84b7c Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1142
diff changeset
951 self.repos.sort()
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
952
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
953 def run(self, req=hgrequest()):
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
954 def header(**map):
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
955 yield tmpl("header", **map)
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
956
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
957 def footer(**map):
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
958 yield tmpl("footer", **map)
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
959
1142
74d184a40a2e Cleaned up hgweb.hgwebdir.run()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1141
diff changeset
960 m = os.path.join(templatepath(), "map")
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
961 tmpl = templater(m, common_filters,
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
962 {"header": header, "footer": footer})
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
963
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
964 def entries(**map):
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
965 parity = 0
1141
033c968d7c66 Use ConfigParser only in hgwebdir.__init__()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1140
diff changeset
966 for name, path in self.repos:
1140
04d52b446e5e Don't create repo objects in hgwebdir, ui object is enough.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1139
diff changeset
967 u = ui()
1170
85555540a4e2 Make .hg/hgrc optional for repositories published by hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1165
diff changeset
968 try:
85555540a4e2 Make .hg/hgrc optional for repositories published by hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1165
diff changeset
969 u.readconfig(file(os.path.join(path, '.hg', 'hgrc')))
85555540a4e2 Make .hg/hgrc optional for repositories published by hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1165
diff changeset
970 except IOError:
85555540a4e2 Make .hg/hgrc optional for repositories published by hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1165
diff changeset
971 pass
1140
04d52b446e5e Don't create repo objects in hgwebdir, ui object is enough.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1139
diff changeset
972 get = u.config
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
973
1181
4f5001f5b4c3 Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1180
diff changeset
974 url = ('/'.join([req.env["REQUEST_URI"].split('?')[0], name])
1142
74d184a40a2e Cleaned up hgweb.hgwebdir.run()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1141
diff changeset
975 .replace("//", "/"))
1022
31dcaf9123ba Minor hgwebdir tweaks
mpm@selenic.com
parents: 987
diff changeset
976
1132
92525920ad29 Completed renaming author to contact in hgwebdir:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1131
diff changeset
977 yield dict(contact=get("web", "contact") or
92525920ad29 Completed renaming author to contact in hgwebdir:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1131
diff changeset
978 get("web", "author", "unknown"),
1130
1ad52c7679e1 Longer variable names in hgwebdir: l->repos, v->name, r->path
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1129
diff changeset
979 name=get("web", "name", name),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
980 url=url,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
981 parity=parity,
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
982 shortdesc=get("web", "description", "unknown"),
1139
916bb2849c4c Reverted change 51f26e856f3d: Reading changelogs is too slow.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1138
diff changeset
983 lastupdate=os.stat(os.path.join(path, ".hg",
1142
74d184a40a2e Cleaned up hgweb.hgwebdir.run()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1141
diff changeset
984 "00changelog.d")).st_mtime)
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
985
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
986 parity = 1 - parity
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents: 939
diff changeset
987
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
988 virtual = req.env.get("PATH_INFO", "").strip('/')
1142
74d184a40a2e Cleaned up hgweb.hgwebdir.run()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1141
diff changeset
989 if virtual:
1141
033c968d7c66 Use ConfigParser only in hgwebdir.__init__()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1140
diff changeset
990 real = dict(self.repos).get(virtual)
033c968d7c66 Use ConfigParser only in hgwebdir.__init__()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1140
diff changeset
991 if real:
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
992 hgweb(real).run(req)
1123
457c23af92bd Use a template for the error message.
Ollivier Robert <roberto@keltia.freenix.fr>
parents: 1122
diff changeset
993 else:
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
994 req.write(tmpl("notfound", repo=virtual))
1142
74d184a40a2e Cleaned up hgweb.hgwebdir.run()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1141
diff changeset
995 else:
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
996 req.write(tmpl("index", entries=entries))