annotate mercurial/hgweb/hgweb_mod.py @ 5591:08887121a652

split out hgweb commands into a separate file, move some code around
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Sun, 02 Dec 2007 23:26:40 +0100
parents e15f7db0f0ee
children b95b2525c6e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2391
d351a3be3371 Fixing up comment headers for split up code.
Eric Hopper <hopper@omnifarious.org>
parents: 2361
diff changeset
1 # hgweb/hgweb_mod.py - Web interface for a 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>
4635
63b9d2deed48 Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4539
diff changeset
4 # Copyright 2005-2007 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
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
9 import os, mimetypes, re, mimetools, cStringIO, sys, urllib, bz2
2311
b832b6eb65ab Moving hgweb.py into it's own module in preparation for breaking it up.
Eric Hopper <hopper@omnifarious.org>
parents: 2275
diff changeset
10 from mercurial.node import *
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
11 from mercurial import mdiff, ui, hg, util, archival, patch
3877
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents: 3781
diff changeset
12 from mercurial import revlog, templater
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
13 from common import ErrorResponse, get_mtime, style_map, paritygen
5566
d74fc8dec2b4 Less indirection in the WSGI web interface. This simplifies some code, and makes it more compliant with WSGI.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5565
diff changeset
14 from request import wsgirequest
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
15 import webcommands
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
16
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
17 def _up(p):
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
18 if p[0] != "/":
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
19 p = "/" + p
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
20 if p[-1] == "/":
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
21 p = p[:-1]
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
22 up = os.path.dirname(p)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
23 if up == "/":
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
24 return "/"
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
25 return up + "/"
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
26
3422
0eba7e76cd02 Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents: 3409
diff changeset
27 def revnavgen(pos, pagelen, limit, nodefunc):
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
28 def seq(factor, limit=None):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
29 if limit:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
30 yield limit
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
31 if limit >= 20 and limit <= 40:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
32 yield 50
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
33 else:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
34 yield 1 * factor
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
35 yield 3 * factor
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
36 for f in seq(factor * 10):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
37 yield f
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
38
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
39 def nav(**map):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
40 l = []
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
41 last = 0
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
42 for f in seq(1, pagelen):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
43 if f < pagelen or f <= last:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
44 continue
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
45 if f > limit:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
46 break
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
47 last = f
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
48 if pos + f < limit:
3422
0eba7e76cd02 Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents: 3409
diff changeset
49 l.append(("+%d" % f, hex(nodefunc(pos + f).node())))
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
50 if pos - f >= 0:
3422
0eba7e76cd02 Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents: 3409
diff changeset
51 l.insert(0, ("-%d" % f, hex(nodefunc(pos - f).node())))
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
52
3424
9b1c126b74cd Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents: 3423
diff changeset
53 try:
9b1c126b74cd Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents: 3423
diff changeset
54 yield {"label": "(0)", "node": hex(nodefunc('0').node())}
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
55
3424
9b1c126b74cd Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents: 3423
diff changeset
56 for label, node in l:
9b1c126b74cd Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents: 3423
diff changeset
57 yield {"label": label, "node": node}
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
58
3427
6bd676ee8b99 Explicitly use "tip" in revision navigation.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3424
diff changeset
59 yield {"label": "tip", "node": "tip"}
3424
9b1c126b74cd Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents: 3423
diff changeset
60 except hg.RepoError:
9b1c126b74cd Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents: 3423
diff changeset
61 pass
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
62
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
63 return nav
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
64
1559
59b3639df0a9 Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents: 1554
diff changeset
65 class hgweb(object):
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
66 def __init__(self, repo, name=None):
4874
d9e385a7a806 Use isinstance instead of type == type
Christian Ebert <blacktrash@gmx.net>
parents: 4872
diff changeset
67 if isinstance(repo, str):
5289
ed6df6b1c29a Prevent WSGI apps from touching sys.stdin by setting ui.interactive to False.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5064
diff changeset
68 parentui = ui.ui(report_untrusted=False, interactive=False)
ed6df6b1c29a Prevent WSGI apps from touching sys.stdin by setting ui.interactive to False.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5064
diff changeset
69 self.repo = hg.repository(parentui, repo)
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
70 else:
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
71 self.repo = repo
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
72
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
73 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
74 self.reponame = name
1078
33f40d0c6124 Various cleanups for tarball support
mpm@selenic.com
parents: 1077
diff changeset
75 self.archives = 'zip', 'gz', 'bz2'
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
76 self.stripecount = 1
3555
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
77 # a repo owner may set web.templates in .hg/hgrc to get any file
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
78 # readable by the user running the CGI script
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
79 self.templatepath = self.config("web", "templates",
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
80 templater.templatepath(),
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
81 untrusted=False)
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
82
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
83 # The CGI scripts are often run by a user different from the repo owner.
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
84 # Trust the settings from the .hg/hgrc files by default.
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
85 def config(self, section, name, default=None, untrusted=True):
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
86 return self.repo.ui.config(section, name, default,
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
87 untrusted=untrusted)
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
88
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
89 def configbool(self, section, name, default=False, untrusted=True):
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
90 return self.repo.ui.configbool(section, name, default,
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
91 untrusted=untrusted)
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
92
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
93 def configlist(self, section, name, default=None, untrusted=True):
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
94 return self.repo.ui.configlist(section, name, default,
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
95 untrusted=untrusted)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
96
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
97 def refresh(self):
1418
68f81ba07b2a Make hgweb work when the repository is empty (no 00changelog.i)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1416
diff changeset
98 mtime = get_mtime(self.repo.root)
68f81ba07b2a Make hgweb work when the repository is empty (no 00changelog.i)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1416
diff changeset
99 if mtime != self.mtime:
68f81ba07b2a Make hgweb work when the repository is empty (no 00changelog.i)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1416
diff changeset
100 self.mtime = mtime
1213
db9639b8594c Clean up hgweb imports
mpm@selenic.com
parents: 1210
diff changeset
101 self.repo = hg.repository(self.repo.ui, self.repo.root)
3555
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
102 self.maxchanges = int(self.config("web", "maxchanges", 10))
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
103 self.stripecount = int(self.config("web", "stripes", 1))
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
104 self.maxshortchanges = int(self.config("web", "maxshortchanges", 60))
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
105 self.maxfiles = int(self.config("web", "maxfiles", 10))
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
106 self.allowpull = self.configbool("web", "allowpull", True)
4690
ecea4de3104e Enable to select encoding in hgrc web section
OHASHI Hideya <ohachige at gmail.com>
parents: 4669
diff changeset
107 self.encoding = self.config("web", "encoding", util._encoding)
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
108
5591
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
109 def run(self):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
110 if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
111 raise RuntimeError("This function is only intended to be called while running as a CGI script.")
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
112 import mercurial.hgweb.wsgicgi as wsgicgi
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
113 wsgicgi.launch(self)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
114
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
115 def __call__(self, env, respond):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
116 req = wsgirequest(env, respond)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
117 self.run_wsgi(req)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
118 return req
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
119
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
120 def run_wsgi(self, req):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
121 def header(**map):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
122 header_file = cStringIO.StringIO(
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
123 ''.join(self.t("header", encoding=self.encoding, **map)))
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
124 msg = mimetools.Message(header_file, 0)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
125 req.header(msg.items())
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
126 yield header_file.read()
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
127
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
128 def rawfileheader(**map):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
129 req.header([('Content-type', map['mimetype']),
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
130 ('Content-disposition', 'filename=%s' % map['file']),
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
131 ('Content-length', str(len(map['raw'])))])
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
132 yield ''
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
133
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
134 def footer(**map):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
135 yield self.t("footer", **map)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
136
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
137 def motd(**map):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
138 yield self.config("web", "motd", "")
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
139
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
140 def expand_form(form):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
141 shortcuts = {
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
142 'cl': [('cmd', ['changelog']), ('rev', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
143 'sl': [('cmd', ['shortlog']), ('rev', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
144 'cs': [('cmd', ['changeset']), ('node', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
145 'f': [('cmd', ['file']), ('filenode', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
146 'fl': [('cmd', ['filelog']), ('filenode', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
147 'fd': [('cmd', ['filediff']), ('node', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
148 'fa': [('cmd', ['annotate']), ('filenode', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
149 'mf': [('cmd', ['manifest']), ('manifest', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
150 'ca': [('cmd', ['archive']), ('node', None)],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
151 'tags': [('cmd', ['tags'])],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
152 'tip': [('cmd', ['changeset']), ('node', ['tip'])],
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
153 'static': [('cmd', ['static']), ('file', None)]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
154 }
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
155
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
156 for k in shortcuts.iterkeys():
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
157 if form.has_key(k):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
158 for name, value in shortcuts[k]:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
159 if value is None:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
160 value = form[k]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
161 form[name] = value
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
162 del form[k]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
163
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
164 def rewrite_request(req):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
165 '''translate new web interface to traditional format'''
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
166
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
167 req.url = req.env['SCRIPT_NAME']
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
168 if not req.url.endswith('/'):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
169 req.url += '/'
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
170 if req.env.has_key('REPO_NAME'):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
171 req.url += req.env['REPO_NAME'] + '/'
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
172
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
173 if req.env.get('PATH_INFO'):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
174 parts = req.env.get('PATH_INFO').strip('/').split('/')
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
175 repo_parts = req.env.get('REPO_NAME', '').split('/')
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
176 if parts[:len(repo_parts)] == repo_parts:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
177 parts = parts[len(repo_parts):]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
178 query = '/'.join(parts)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
179 else:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
180 query = req.env['QUERY_STRING'].split('&', 1)[0]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
181 query = query.split(';', 1)[0]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
182
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
183 if req.form.has_key('cmd'):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
184 # old style
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
185 return
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
186
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
187 args = query.split('/', 2)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
188 if not args or not args[0]:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
189 return
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
190
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
191 cmd = args.pop(0)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
192 style = cmd.rfind('-')
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
193 if style != -1:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
194 req.form['style'] = [cmd[:style]]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
195 cmd = cmd[style+1:]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
196 # avoid accepting e.g. style parameter as command
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
197 if hasattr(webcommands, cmd):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
198 req.form['cmd'] = [cmd]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
199
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
200 if args and args[0]:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
201 node = args.pop(0)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
202 req.form['node'] = [node]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
203 if args:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
204 req.form['file'] = args
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
205
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
206 if cmd == 'static':
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
207 req.form['file'] = req.form['node']
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
208 elif cmd == 'archive':
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
209 fn = req.form['node'][0]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
210 for type_, spec in self.archive_specs.iteritems():
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
211 ext = spec[2]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
212 if fn.endswith(ext):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
213 req.form['node'] = [fn[:-len(ext)]]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
214 req.form['type'] = [type_]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
215
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
216 def sessionvars(**map):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
217 fields = []
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
218 if req.form.has_key('style'):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
219 style = req.form['style'][0]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
220 if style != self.config('web', 'style', ''):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
221 fields.append(('style', style))
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
222
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
223 separator = req.url[-1] == '?' and ';' or '?'
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
224 for name, value in fields:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
225 yield dict(name=name, value=value, separator=separator)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
226 separator = ';'
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
227
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
228 self.refresh()
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
229
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
230 expand_form(req.form)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
231 rewrite_request(req)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
232
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
233 style = self.config("web", "style", "")
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
234 if req.form.has_key('style'):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
235 style = req.form['style'][0]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
236 mapfile = style_map(self.templatepath, style)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
237
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
238 proto = req.env.get('wsgi.url_scheme')
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
239 if proto == 'https':
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
240 proto = 'https'
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
241 default_port = "443"
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
242 else:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
243 proto = 'http'
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
244 default_port = "80"
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
245
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
246 port = req.env["SERVER_PORT"]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
247 port = port != default_port and (":" + port) or ""
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
248 urlbase = '%s://%s%s' % (proto, req.env['SERVER_NAME'], port)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
249 staticurl = self.config("web", "staticurl") or req.url + 'static/'
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
250 if not staticurl.endswith('/'):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
251 staticurl += '/'
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
252
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
253 if not self.reponame:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
254 self.reponame = (self.config("web", "name")
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
255 or req.env.get('REPO_NAME')
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
256 or req.url.strip('/') or self.repo.root)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
257
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
258 self.t = templater.templater(mapfile, templater.common_filters,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
259 defaults={"url": req.url,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
260 "staticurl": staticurl,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
261 "urlbase": urlbase,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
262 "repo": self.reponame,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
263 "header": header,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
264 "footer": footer,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
265 "motd": motd,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
266 "rawfileheader": rawfileheader,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
267 "sessionvars": sessionvars
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
268 })
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
269
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
270 try:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
271 if not req.form.has_key('cmd'):
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
272 req.form['cmd'] = [self.t.cache['default']]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
273
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
274 cmd = req.form['cmd'][0]
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
275
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
276 try:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
277 method = getattr(webcommands, cmd)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
278 method(self, req)
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
279 except revlog.LookupError, err:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
280 req.respond(404, self.t(
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
281 'error', error='revision not found: %s' % err.name))
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
282 except (hg.RepoError, revlog.RevlogError), inst:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
283 req.respond('500 Internal Server Error',
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
284 self.t('error', error=str(inst)))
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
285 except ErrorResponse, inst:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
286 req.respond(inst.code, self.t('error', error=inst.message))
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
287 except AttributeError:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
288 req.respond(400,
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
289 self.t('error', error='No such method: ' + cmd))
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
290 finally:
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
291 self.t = None
08887121a652 split out hgweb commands into a separate file, move some code around
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 5579
diff changeset
292
1498
78590fb4a82b hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1473
diff changeset
293 def archivelist(self, nodeid):
3555
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
294 allowed = self.configlist("web", "allow_archive")
3260
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3231
diff changeset
295 for i, spec in self.archive_specs.iteritems():
3555
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
296 if i in allowed or self.configbool("web", "allow" + i):
3260
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3231
diff changeset
297 yield {"type" : i, "extension" : spec[2], "node" : nodeid}
1498
78590fb4a82b hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1473
diff changeset
298
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
299 def listfilediffs(self, files, changeset):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
300 for f in files[:self.maxfiles]:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
301 yield self.t("filedifflink", node=hex(changeset), file=f)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
302 if len(files) > self.maxfiles:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
303 yield self.t("fileellipses")
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
304
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
305 def siblings(self, siblings=[], hiderev=None, **args):
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
306 siblings = [s for s in siblings if s.node() != nullid]
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
307 if len(siblings) == 1 and siblings[0].rev() == hiderev:
1416
19d2776f1725 hgweb: hide trivial parent (like in show_changeset)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1411
diff changeset
308 return
1606
ba625c8083d8 - duplicate the parent link logic to show child links
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1579
diff changeset
309 for s in siblings:
3392
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
310 d = {'node': hex(s.node()), 'rev': s.rev()}
3394
be628f1cd3f4 hgweb: really fix parent/child rename links
Brendan Cully <brendan@kublai.com>
parents: 3392
diff changeset
311 if hasattr(s, 'path'):
be628f1cd3f4 hgweb: really fix parent/child rename links
Brendan Cully <brendan@kublai.com>
parents: 3392
diff changeset
312 d['file'] = s.path()
3392
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
313 d.update(args)
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
314 yield d
569
3e347929f5f9 [PATCH 1/5]: cleaning the template parent management in hgweb
mpm@selenic.com
parents: 568
diff changeset
315
1653
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
316 def renamelink(self, fl, node):
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
317 r = fl.renamed(node)
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
318 if r:
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
319 return [dict(file=r[0], node=hex(r[1]))]
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
320 return []
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
321
4539
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
322 def nodetagsdict(self, node):
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
323 return [{"name": i} for i in self.repo.nodetags(node)]
4538
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
324
4539
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
325 def nodebranchdict(self, ctx):
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
326 branches = []
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
327 branch = ctx.branch()
5331
8ee5b8129e7b hgweb: don't raise an exception when displying empty repos
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5289
diff changeset
328 # If this is an empty repo, ctx.node() == nullid,
8ee5b8129e7b hgweb: don't raise an exception when displying empty repos
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5289
diff changeset
329 # ctx.branch() == 'default', but branchtags() is
8ee5b8129e7b hgweb: don't raise an exception when displying empty repos
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5289
diff changeset
330 # an empty dict. Using dict.get avoids a traceback.
8ee5b8129e7b hgweb: don't raise an exception when displying empty repos
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5289
diff changeset
331 if self.repo.branchtags().get(branch) == ctx.node():
4539
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
332 branches.append({"name": branch})
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
333 return branches
4538
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
334
568
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
335 def showtag(self, t1, node=nullid, **args):
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
336 for t in self.repo.nodetags(node):
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3612
diff changeset
337 yield self.t(t1, tag=t, **args)
568
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
338
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
339 def diff(self, node1, node2, files):
1626
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
340 def filterfiles(filters, files):
1627
11cd38286fdb fix for hgweb.filterfiles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1626
diff changeset
341 l = [x for x in files if x in filters]
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
342
1626
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
343 for t in filters:
1627
11cd38286fdb fix for hgweb.filterfiles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1626
diff changeset
344 if t and t[-1] != os.sep:
1626
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
345 t += os.sep
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
346 l += [x for x in files if x.startswith(t)]
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
347 return l
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
348
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
349 parity = paritygen(self.stripecount)
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
350 def diffblock(diff, f, fn):
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
351 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
352 lines=prettyprintlines(diff),
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
353 parity=parity.next(),
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
354 file=f,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
355 filenode=hex(fn or nullid))
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
356
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
357 def prettyprintlines(diff):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
358 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
359 if l.startswith('+'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
360 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
361 elif l.startswith('-'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
362 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
363 elif l.startswith('@'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
364 yield self.t("difflineat", line=l)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
365 else:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
366 yield self.t("diffline", line=l)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
367
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
368 r = self.repo
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
369 c1 = r.changectx(node1)
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
370 c2 = r.changectx(node2)
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
371 date1 = util.datestr(c1.date())
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
372 date2 = util.datestr(c2.date())
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
373
2876
cf86bbb8ed68 hgweb: repo.changes() is now called repo.status()
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2874
diff changeset
374 modified, added, removed, deleted, unknown = r.status(node1, node2)[:5]
645
a55048b2ae3a this patch permits hgweb to show the deleted files in the changeset diff
kreijack@inwind.REMOVEME.it
parents: 635
diff changeset
375 if files:
1626
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
376 modified, added, removed = map(lambda x: filterfiles(files, x),
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1606
diff changeset
377 (modified, added, removed))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
378
3555
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
379 diffopts = patch.diffopts(self.repo.ui, untrusted=True)
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1606
diff changeset
380 for f in modified:
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
381 to = c1.filectx(f).data()
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
382 tn = c2.filectx(f).data()
5486
48c22c719f8c hgweb_mod: update unidiff() calls and finish e5eedd74e70f job
Rocco Rutte <pdmef@gmx.net>
parents: 5336
diff changeset
383 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f, f,
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2859
diff changeset
384 opts=diffopts), f, tn)
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1606
diff changeset
385 for f in added:
265
7ca05593bd30 hgweb: fix non-existent source or destination for diff
mpm@selenic.com
parents: 258
diff changeset
386 to = None
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
387 tn = c2.filectx(f).data()
5486
48c22c719f8c hgweb_mod: update unidiff() calls and finish e5eedd74e70f job
Rocco Rutte <pdmef@gmx.net>
parents: 5336
diff changeset
388 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f, f,
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2859
diff changeset
389 opts=diffopts), f, tn)
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1606
diff changeset
390 for f in removed:
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
391 to = c1.filectx(f).data()
265
7ca05593bd30 hgweb: fix non-existent source or destination for diff
mpm@selenic.com
parents: 258
diff changeset
392 tn = None
5486
48c22c719f8c hgweb_mod: update unidiff() calls and finish e5eedd74e70f job
Rocco Rutte <pdmef@gmx.net>
parents: 5336
diff changeset
393 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f, f,
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2859
diff changeset
394 opts=diffopts), f, tn)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
395
3220
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
396 def changelog(self, ctx, shortlog=False):
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
397 def changelist(limit=0,**map):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
398 cl = self.repo.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
399 l = [] # build a list in forward order for efficiency
3473
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3445
diff changeset
400 for i in xrange(start, end):
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
401 ctx = self.repo.changectx(i)
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
402 n = ctx.node()
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
403
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
404 l.insert(0, {"parity": parity.next(),
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
405 "author": ctx.user(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
406 "parent": self.siblings(ctx.parents(), i - 1),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
407 "child": self.siblings(ctx.children(), i + 1),
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
408 "changelogtag": self.showtag("changelogtag",n),
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
409 "desc": ctx.description(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
410 "date": ctx.date(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
411 "files": self.listfilediffs(ctx.files(), n),
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
412 "rev": i,
4538
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
413 "node": hex(n),
4539
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
414 "tags": self.nodetagsdict(n),
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
415 "branches": self.nodebranchdict(ctx)})
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
416
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
417 if limit > 0:
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
418 l = l[:limit]
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
419
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
420 for e in l:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
421 yield e
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
422
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
423 maxchanges = shortlog and self.maxshortchanges or self.maxchanges
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
424 cl = self.repo.changelog
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
425 count = cl.count()
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
426 pos = ctx.rev()
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
427 start = max(0, pos - maxchanges + 1)
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
428 end = min(count, start + maxchanges)
351
9525208e1c1d hgweb: change number navigation tidy up
mpm@selenic.com
parents: 350
diff changeset
429 pos = end - 1
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
430 parity = paritygen(self.stripecount, offset=start-end)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
431
3422
0eba7e76cd02 Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents: 3409
diff changeset
432 changenav = revnavgen(pos, maxchanges, count, self.repo.changectx)
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
433
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
434 yield self.t(shortlog and 'shortlog' or 'changelog',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
435 changenav=changenav,
3205
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
436 node=hex(cl.tip()),
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
437 rev=pos, changesets=count,
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
438 entries=lambda **x: changelist(limit=0,**x),
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
439 latestentry=lambda **x: changelist(limit=1,**x),
2170
29eeb2717915 Add archive download links to tip on main changeset list page
Colin McMillen <mcmillen@cs.cmu.edu>
parents: 2148
diff changeset
440 archives=self.archivelist("tip"))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
441
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
442 def search(self, query):
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
443
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
444 def changelist(**map):
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
445 cl = self.repo.changelog
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
446 count = 0
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
447 qw = query.lower().split()
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
448
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
449 def revgen():
3473
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3445
diff changeset
450 for i in xrange(cl.count() - 1, 0, -100):
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
451 l = []
3473
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3445
diff changeset
452 for j in xrange(max(0, i - 100), i):
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
453 ctx = self.repo.changectx(j)
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
454 l.append(ctx)
1023
bc806ba72959 Minor tweak to the revgen algorithm
mpm@selenic.com
parents: 1022
diff changeset
455 l.reverse()
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
456 for e in l:
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
457 yield e
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
458
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
459 for ctx in revgen():
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
460 miss = 0
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
461 for q in qw:
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
462 if not (q in ctx.user().lower() or
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
463 q in ctx.description().lower() or
4323
7843528a7922 hgweb: expand keyword search to full list of files
TK Soh <teekaysoh@yahoo.com>
parents: 4243
diff changeset
464 q in " ".join(ctx.files()).lower()):
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
465 miss = 1
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
466 break
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
467 if miss:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
468 continue
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
469
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
470 count += 1
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
471 n = ctx.node()
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
472
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
473 yield self.t('searchentry',
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
474 parity=parity.next(),
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
475 author=ctx.user(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
476 parent=self.siblings(ctx.parents()),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
477 child=self.siblings(ctx.children()),
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
478 changelogtag=self.showtag("changelogtag",n),
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
479 desc=ctx.description(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
480 date=ctx.date(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
481 files=self.listfilediffs(ctx.files(), n),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
482 rev=ctx.rev(),
4538
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
483 node=hex(n),
4539
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
484 tags=self.nodetagsdict(n),
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
485 branches=self.nodebranchdict(ctx))
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
486
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
487 if count >= self.maxchanges:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
488 break
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
489
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
490 cl = self.repo.changelog
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
491 parity = paritygen(self.stripecount)
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
492
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
493 yield self.t('search',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
494 query=query,
3205
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
495 node=hex(cl.tip()),
4469
8af65bc092b0 gitweb: Fixed-up search template
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4462
diff changeset
496 entries=changelist,
8af65bc092b0 gitweb: Fixed-up search template
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4462
diff changeset
497 archives=self.archivelist("tip"))
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
498
3220
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
499 def changeset(self, ctx):
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
500 n = ctx.node()
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
501 parents = ctx.parents()
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
502 p1 = parents[0].node()
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
503
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
504 files = []
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
505 parity = paritygen(self.stripecount)
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
506 for f in ctx.files():
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
507 files.append(self.t("filenodelink",
3206
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
508 node=hex(n), file=f,
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
509 parity=parity.next()))
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
510
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
511 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
512 yield self.diff(p1, n, None)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
513
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
514 yield self.t('changeset',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
515 diff=diff,
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
516 rev=ctx.rev(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
517 node=hex(n),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
518 parent=self.siblings(parents),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
519 child=self.siblings(ctx.children()),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
520 changesettag=self.showtag("changesettag",n),
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
521 author=ctx.user(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
522 desc=ctx.description(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
523 date=ctx.date(),
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
524 files=files,
4538
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
525 archives=self.archivelist(hex(n)),
4539
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
526 tags=self.nodetagsdict(n),
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
527 branches=self.nodebranchdict(ctx))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
528
3206
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
529 def filelog(self, fctx):
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
530 f = fctx.path()
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
531 fl = fctx.filelog()
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
532 count = fl.count()
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
533 pagelen = self.maxshortchanges
3409
1ae738bacf74 Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3407
diff changeset
534 pos = fctx.filerev()
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3612
diff changeset
535 start = max(0, pos - pagelen + 1)
3409
1ae738bacf74 Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3407
diff changeset
536 end = min(count, start + pagelen)
1ae738bacf74 Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3407
diff changeset
537 pos = end - 1
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
538 parity = paritygen(self.stripecount, offset=start-end)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
539
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
540 def entries(limit=0, **map):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
541 l = []
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
542
3473
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3445
diff changeset
543 for i in xrange(start, end):
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
544 ctx = fctx.filectx(i)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
545 n = fl.node(i)
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
546
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
547 l.insert(0, {"parity": parity.next(),
978
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
548 "filerev": i,
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
549 "file": f,
3206
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
550 "node": hex(ctx.node()),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
551 "author": ctx.user(),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
552 "date": ctx.date(),
1653
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
553 "rename": self.renamelink(fl, n),
3392
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
554 "parent": self.siblings(fctx.parents()),
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
555 "child": self.siblings(fctx.children()),
3206
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
556 "desc": ctx.description()})
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
557
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
558 if limit > 0:
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
559 l = l[:limit]
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
560
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
561 for e in l:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
562 yield e
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
563
3422
0eba7e76cd02 Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents: 3409
diff changeset
564 nodefunc = lambda x: fctx.filectx(fileid=x)
0eba7e76cd02 Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents: 3409
diff changeset
565 nav = revnavgen(pos, pagelen, count, nodefunc)
3407
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3406
diff changeset
566 yield self.t("filelog", file=f, node=hex(fctx.node()), nav=nav,
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
567 entries=lambda **x: entries(limit=0, **x),
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
568 latestentry=lambda **x: entries(limit=1, **x))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
569
3206
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
570 def filerevision(self, fctx):
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
571 f = fctx.path()
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
572 text = fctx.data()
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
573 fl = fctx.filelog()
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
574 n = fctx.filenode()
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
575 parity = paritygen(self.stripecount)
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
576
1411
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
577 mt = mimetypes.guess_type(f)[0]
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
578 rawtext = text
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
579 if util.binary(text):
2103
caccf539c9a4 Use application/octet-stream as the content-type of unknown binary files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2095
diff changeset
580 mt = mt or 'application/octet-stream'
caccf539c9a4 Use application/octet-stream as the content-type of unknown binary files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2095
diff changeset
581 text = "(binary:%s)" % mt
2095
0bf2a9e5eff1 Don't send "Content-Type: none"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 1964
diff changeset
582 mt = mt or 'text/plain'
1411
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
583
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
584 def lines():
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
585 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
586 yield {"line": t,
5d5ab159d197 hgweb: Changed file page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 975
diff changeset
587 "linenumber": "% 6d" % (l + 1),
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
588 "parity": parity.next()}
359
0c4688e9ee5c hgweb: add file permissions
mpm@selenic.com
parents: 351
diff changeset
589
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
590 yield self.t("filerevision",
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
591 file=f,
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
592 path=_up(f),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
593 text=lines(),
1411
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
594 raw=rawtext,
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
595 mimetype=mt,
3206
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
596 rev=fctx.rev(),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
597 node=hex(fctx.node()),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
598 author=fctx.user(),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
599 date=fctx.date(),
3395
3c8f0dc9a6d3 hgweb: add changeset description to file revision page
Brendan Cully <brendan@kublai.com>
parents: 3394
diff changeset
600 desc=fctx.description(),
3392
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
601 parent=self.siblings(fctx.parents()),
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
602 child=self.siblings(fctx.children()),
1653
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
603 rename=self.renamelink(fl, n),
4745
e21a0e12ff10 hgweb: use lrwxrwxrwx as the permissions of a symlink
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4690
diff changeset
604 permissions=fctx.manifest().flags(f))
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
605
3206
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
606 def fileannotate(self, fctx):
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3205
diff changeset
607 f = fctx.path()
3173
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3131
diff changeset
608 n = fctx.filenode()
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3131
diff changeset
609 fl = fctx.filelog()
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
610 parity = paritygen(self.stripecount)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
611
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
612 def annotate(**map):
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
613 last = None
3175
fc379b91f602 hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents: 3173
diff changeset
614 for f, l in fctx.annotate(follow=True):
fc379b91f602 hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents: 3173
diff changeset
615 fnode = f.filenode()
3173
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3131
diff changeset
616 name = self.repo.ui.shortuser(f.user())
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
617
3175
fc379b91f602 hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents: 3173
diff changeset
618 if last != fnode:
fc379b91f602 hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents: 3173
diff changeset
619 last = fnode
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
620
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
621 yield {"parity": parity.next(),
3178
0d0d7317bbc8 hgweb: yield filenode as well as node in annotate, use filenode in annotateline
Brendan Cully <brendan@kublai.com>
parents: 3177
diff changeset
622 "node": hex(f.node()),
3403
372999405787 Back out d8eba1c3ce9b and a004164dbeef
Brendan Cully <brendan@kublai.com>
parents: 3402
diff changeset
623 "rev": f.rev(),
977
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
624 "author": name,
3173
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3131
diff changeset
625 "file": f.path(),
977
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
626 "line": l}
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
627
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
628 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
629 file=f,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
630 annotate=annotate,
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
631 path=_up(f),
3173
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3131
diff changeset
632 rev=fctx.rev(),
3177
8683c7a637ad hgweb: fix changeset link in annotate view.
Brendan Cully <brendan@kublai.com>
parents: 3175
diff changeset
633 node=hex(fctx.node()),
3173
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3131
diff changeset
634 author=fctx.user(),
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3131
diff changeset
635 date=fctx.date(),
3391
defadc26e674 hgweb: add changeset description to annotate page
Brendan Cully <brendan@kublai.com>
parents: 3382
diff changeset
636 desc=fctx.description(),
1653
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
637 rename=self.renamelink(fl, n),
3392
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
638 parent=self.siblings(fctx.parents()),
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3391
diff changeset
639 child=self.siblings(fctx.children()),
4745
e21a0e12ff10 hgweb: use lrwxrwxrwx as the permissions of a symlink
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4690
diff changeset
640 permissions=fctx.manifest().flags(f))
136
0e8d60d2bb2b added annotate
jake@edge2.net
parents: 135
diff changeset
641
3205
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
642 def manifest(self, ctx, path):
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
643 mf = ctx.manifest()
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
644 node = ctx.node()
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
645
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
646 files = {}
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
647 parity = paritygen(self.stripecount)
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
648
3595
fc34fd58ae7b hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3557
diff changeset
649 if path and path[-1] != "/":
fc34fd58ae7b hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3557
diff changeset
650 path += "/"
fc34fd58ae7b hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3557
diff changeset
651 l = len(path)
fc34fd58ae7b hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3557
diff changeset
652 abspath = "/" + path
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
653
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3612
diff changeset
654 for f, n in mf.items():
3595
fc34fd58ae7b hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3557
diff changeset
655 if f[:l] != path:
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
656 continue
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
657 remain = f[l:]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
658 if "/" in remain:
2579
0875cda033fd use __contains__, index or split instead of str.find
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2558
diff changeset
659 short = remain[:remain.index("/") + 1] # bleah
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
660 files[short] = (f, None)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
661 else:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
662 short = os.path.basename(remain)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
663 files[short] = (f, n)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
664
5561
22713dce19f6 hgweb: return meaningful HTTP status codes instead of nonsense
Bryan O'Sullivan <bos@serpentine.com>
parents: 5486
diff changeset
665 if not files:
22713dce19f6 hgweb: return meaningful HTTP status codes instead of nonsense
Bryan O'Sullivan <bos@serpentine.com>
parents: 5486
diff changeset
666 raise ErrorResponse(404, 'Path not found: ' + path)
22713dce19f6 hgweb: return meaningful HTTP status codes instead of nonsense
Bryan O'Sullivan <bos@serpentine.com>
parents: 5486
diff changeset
667
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
668 def filelist(**map):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
669 fl = files.keys()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
670 fl.sort()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
671 for f in fl:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
672 full, fnode = files[f]
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
673 if not fnode:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
674 continue
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
675
5273
6e0f05f6f68d hgweb: Show date of last change for each file in manifest
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5269
diff changeset
676 fctx = ctx.filectx(full)
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
677 yield {"file": full,
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
678 "parity": parity.next(),
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
679 "basename": f,
5273
6e0f05f6f68d hgweb: Show date of last change for each file in manifest
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5269
diff changeset
680 "date": fctx.changectx().date(),
6e0f05f6f68d hgweb: Show date of last change for each file in manifest
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5269
diff changeset
681 "size": fctx.size(),
4745
e21a0e12ff10 hgweb: use lrwxrwxrwx as the permissions of a symlink
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4690
diff changeset
682 "permissions": mf.flags(full)}
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
683
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
684 def dirlist(**map):
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
685 fl = files.keys()
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
686 fl.sort()
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
687 for f in fl:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
688 full, fnode = files[f]
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
689 if fnode:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
690 continue
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
691
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
692 yield {"parity": parity.next(),
5064
ccdc8db02bdf hgweb: don't use os.path.join to build URL parts
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4834
diff changeset
693 "path": "%s%s" % (abspath, f),
980
5197fb9d65d5 Merge with MPM
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 979 939
diff changeset
694 "basename": f[:-1]}
982
8d2e24bae760 hgweb: convert index entries to list expansion style
mpm@selenic.com
parents: 981
diff changeset
695
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
696 yield self.t("manifest",
3205
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
697 rev=ctx.rev(),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
698 node=hex(node),
3595
fc34fd58ae7b hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3557
diff changeset
699 path=abspath,
fc34fd58ae7b hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3557
diff changeset
700 up=_up(abspath),
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
701 upparity=parity.next(),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
702 fentries=filelist,
1498
78590fb4a82b hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1473
diff changeset
703 dentries=dirlist,
4538
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
704 archives=self.archivelist(hex(node)),
4539
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
705 tags=self.nodetagsdict(node),
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
706 branches=self.nodebranchdict(ctx))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
707
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
708 def tags(self):
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 330
diff changeset
709 i = self.repo.tagslist()
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 330
diff changeset
710 i.reverse()
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
711 parity = paritygen(self.stripecount)
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
712
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
713 def entries(notip=False,limit=0, **map):
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
714 count = 0
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3612
diff changeset
715 for k, n in i:
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3612
diff changeset
716 if notip and k == "tip":
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3612
diff changeset
717 continue
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
718 if limit > 0 and count >= limit:
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
719 continue
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
720 count = count + 1
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
721 yield {"parity": parity.next(),
974
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
722 "tag": k,
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
723 "date": self.repo.changectx(n).date(),
974
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
724 "node": hex(n)}
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
725
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
726 yield self.t("tags",
3205
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
727 node=hex(self.repo.changelog.tip()),
5269
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
728 entries=lambda **x: entries(False,0, **x),
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
729 entriesnotip=lambda **x: entries(True,0, **x),
46c5e1ee8aaa Added support for the Atom syndication format
Robert Bachmann <rbach@rbach.priv.at>
parents: 5123
diff changeset
730 latestentry=lambda **x: entries(True,1, **x))
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
731
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
732 def summary(self):
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
733 i = self.repo.tagslist()
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
734 i.reverse()
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
735
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
736 def tagentries(**map):
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
737 parity = paritygen(self.stripecount)
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
738 count = 0
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3612
diff changeset
739 for k, n in i:
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
740 if k == "tip": # skip tip
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
741 continue;
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
742
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
743 count += 1
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
744 if count > 10: # limit to 10 tags
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
745 break;
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
746
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
747 yield self.t("tagentry",
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
748 parity=parity.next(),
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
749 tag=k,
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
750 node=hex(n),
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
751 date=self.repo.changectx(n).date())
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
752
4300
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
753
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
754 def branches(**map):
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
755 parity = paritygen(self.stripecount)
3499
e0db0b7934f2 hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents: 3488
diff changeset
756
4300
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
757 b = self.repo.branchtags()
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
758 l = [(-self.repo.changelog.rev(n), n, t) for t, n in b.items()]
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
759 l.sort()
3499
e0db0b7934f2 hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents: 3488
diff changeset
760
4300
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
761 for r,n,t in l:
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
762 ctx = self.repo.changectx(n)
3499
e0db0b7934f2 hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents: 3488
diff changeset
763
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
764 yield {'parity': parity.next(),
4300
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
765 'branch': t,
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
766 'node': hex(n),
3499
e0db0b7934f2 hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents: 3488
diff changeset
767 'date': ctx.date()}
e0db0b7934f2 hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents: 3488
diff changeset
768
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
769 def changelist(**map):
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
770 parity = paritygen(self.stripecount, offset=start-end)
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
771 l = [] # build a list in forward order for efficiency
3473
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3445
diff changeset
772 for i in xrange(start, end):
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
773 ctx = self.repo.changectx(i)
4538
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
774 n = ctx.node()
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
775 hn = hex(n)
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
776
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
777 l.insert(0, self.t(
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
778 'shortlogentry',
4462
12e4d9524951 hgweb: use generator to count parity of horizontal stripes for easier reading.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4458
diff changeset
779 parity=parity.next(),
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
780 author=ctx.user(),
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
781 desc=ctx.description(),
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
782 date=ctx.date(),
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
783 rev=i,
4538
4272ae760bb1 gitweb: Display branch and tag labels
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 4469
diff changeset
784 node=hn,
4539
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
785 tags=self.nodetagsdict(n),
e6c69a2491ed Small cleanups for the new tag code
Brendan Cully <brendan@kublai.com>
parents: 4538
diff changeset
786 branches=self.nodebranchdict(ctx)))
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
787
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
788 yield l
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
789
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
790 cl = self.repo.changelog
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
791 count = cl.count()
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
792 start = max(0, count - self.maxchanges)
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
793 end = min(count, start + self.maxchanges)
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
794
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
795 yield self.t("summary",
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
796 desc=self.config("web", "description", "unknown"),
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
797 owner=(self.config("ui", "username") or # preferred
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
798 self.config("web", "contact") or # deprecated
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
799 self.config("web", "author", "unknown")), # also
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
800 lastchange=cl.read(cl.tip())[2],
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
801 tags=tagentries,
4300
05d15c456fb2 hgweb: display named branches in gitweb-style summary page
greg@maptuit.com
parents: 4282
diff changeset
802 branches=branches,
3973
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
803 shortlog=changelist,
b485a4459d96 hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3936
diff changeset
804 node=hex(cl.tip()),
2683
8a798185809d [hgweb] Fixed up gitweb templates
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2622
diff changeset
805 archives=self.archivelist("tip"))
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
806
3220
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
807 def filediff(self, fctx):
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
808 n = fctx.node()
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
809 path = fctx.path()
3406
970b2d6de3b3 hgweb: link to file parents in filediff, rather than changeset parents
Brendan Cully <brendan@kublai.com>
parents: 3403
diff changeset
810 parents = fctx.parents()
970b2d6de3b3 hgweb: link to file parents in filediff, rather than changeset parents
Brendan Cully <brendan@kublai.com>
parents: 3403
diff changeset
811 p1 = parents and parents[0].node() or nullid
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
812
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
813 def diff(**map):
3220
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
814 yield self.diff(p1, n, [path])
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
815
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
816 yield self.t("filediff",
3220
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
817 file=path,
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
818 node=hex(n),
3220
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
819 rev=fctx.rev(),
3208
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3206
diff changeset
820 parent=self.siblings(parents),
3220
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3208
diff changeset
821 child=self.siblings(fctx.children()),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
822 diff=diff)
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
823
2113
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
824 archive_specs = {
2361
d3adb454c5a9 Fix automatic decompression of tarballs with Firefox.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2359
diff changeset
825 'bz2': ('application/x-tar', 'tbz2', '.tar.bz2', None),
d3adb454c5a9 Fix automatic decompression of tarballs with Firefox.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2359
diff changeset
826 'gz': ('application/x-tar', 'tgz', '.tar.gz', None),
2113
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
827 'zip': ('application/zip', 'zip', '.zip', None),
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
828 }
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
829
4669
96e096fe9e86 hgweb_mod.archive(): Use 'key' instead of builtin 'id'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4635
diff changeset
830 def archive(self, req, key, type_):
2113
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
831 reponame = re.sub(r"\W+", "-", os.path.basename(self.reponame))
4669
96e096fe9e86 hgweb_mod.archive(): Use 'key' instead of builtin 'id'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4635
diff changeset
832 cnode = self.repo.lookup(key)
96e096fe9e86 hgweb_mod.archive(): Use 'key' instead of builtin 'id'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4635
diff changeset
833 arch_version = key
96e096fe9e86 hgweb_mod.archive(): Use 'key' instead of builtin 'id'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4635
diff changeset
834 if cnode == key or key == 'tip':
4164
5c1e18bb804c hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents: 4096
diff changeset
835 arch_version = short(cnode)
5c1e18bb804c hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents: 4096
diff changeset
836 name = "%s-%s" % (reponame, arch_version)
2394
a8f1049d1d2d hgweb: fix errors and warnings found by pychecker
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2391
diff changeset
837 mimetype, artype, extension, encoding = self.archive_specs[type_]
2113
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
838 headers = [('Content-type', mimetype),
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
839 ('Content-disposition', 'attachment; filename=%s%s' %
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
840 (name, extension))]
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
841 if encoding:
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
842 headers.append(('Content-encoding', encoding))
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
843 req.header(headers)
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
844 archival.archive(self.repo, req.out, cnode, artype, prefix=name)
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
845
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
846 # add tags to things
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
847 # tags -> list of changesets corresponding to tags
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
848 # find tag, changeset, file
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
849
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
850 def cleanpath(self, path):
3595
fc34fd58ae7b hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3557
diff changeset
851 path = path.lstrip('/')
3382
80721b86a448 hgweb: fix path cleaning
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3363
diff changeset
852 return util.canonpath(self.repo.root, '', path)
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
853
3226
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
854 def changectx(self, req):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
855 if req.form.has_key('node'):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
856 changeid = req.form['node'][0]
3333
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3327
diff changeset
857 elif req.form.has_key('manifest'):
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3327
diff changeset
858 changeid = req.form['manifest'][0]
3226
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
859 else:
3333
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3327
diff changeset
860 changeid = self.repo.changelog.count() - 1
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3327
diff changeset
861
3226
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
862 try:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
863 ctx = self.repo.changectx(changeid)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
864 except hg.RepoError:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
865 man = self.repo.manifest
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
866 mn = man.lookup(changeid)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
867 ctx = self.repo.changectx(man.linkrev(mn))
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
868
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
869 return ctx
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
870
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
871 def filectx(self, req):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
872 path = self.cleanpath(req.form['file'][0])
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
873 if req.form.has_key('node'):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
874 changeid = req.form['node'][0]
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
875 else:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
876 changeid = req.form['filenode'][0]
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
877 try:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
878 ctx = self.repo.changectx(changeid)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
879 fctx = ctx.filectx(path)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
880 except hg.RepoError:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
881 fctx = self.repo.filectx(path, fileid=changeid)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
882
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
883 return fctx
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3220
diff changeset
884
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
885 def check_perm(self, req, op, default):
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
886 '''check permission for operation based on user auth.
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
887 return true if op allowed, else false.
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
888 default is policy to use if no config given.'''
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
889
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
890 user = req.env.get('REMOTE_USER')
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
891
3555
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
892 deny = self.configlist('web', 'deny_' + op)
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
893 if deny and (not user or deny == ['*'] or user in deny):
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
894 return False
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
895
3555
881064004fd0 use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3499
diff changeset
896 allow = self.configlist('web', 'allow_' + op)
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
897 return (allow and (allow == ['*'] or user in allow)) or default