annotate mercurial/hgweb/hgweb_mod.py @ 3415:1ae738bacf74

Fixed page overlap for file revision links in hgweb. This is another step to fix issue189, but currently the file revision numbers are read as changeset revision numbers, so the link will point to the wrong revision.
author Thomas Arendsen Hein <thomas@intevation.de>
date Mon, 16 Oct 2006 09:53:31 +0200
parents 03e7e8958a27
children 0eba7e76cd02
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>
2865
345bac2bc4ec update copyrights.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2863
diff changeset
4 # Copyright 2005, 2006 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
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
9 import os
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
10 import os.path
1777
a2316878f19d [hgweb] Static content serving
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1703
diff changeset
11 import mimetypes
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
12 from mercurial.demandload import demandload
2514
419c42223bee Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents: 2509
diff changeset
13 demandload(globals(), "re zlib ConfigParser mimetools cStringIO sys tempfile")
3276
a7370503d800 hgweb: provide means for handling query parameters
Brendan Cully <brendan@kublai.com>
parents: 3273
diff changeset
14 demandload(globals(), 'urllib')
2894
3848488244fc Move ui.diffopts to patch.diffopts where it belongs
Matt Mackall <mpm@selenic.com>
parents: 2882
diff changeset
15 demandload(globals(), "mercurial:mdiff,ui,hg,util,archival,streamclone,patch")
3365
41741218504d hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents: 3364
diff changeset
16 demandload(globals(), "mercurial:revlog,templater")
3282
db9d2a624521 hgweb: Search templates in templatepath/style/map, too, using a common function.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3280
diff changeset
17 demandload(globals(), "mercurial.hgweb.common:get_mtime,staticfile,style_map")
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
18 from mercurial.node import *
b832b6eb65ab Moving hgweb.py into it's own module in preparation for breaking it up.
Eric Hopper <hopper@omnifarious.org>
parents: 2275
diff changeset
19 from mercurial.i18n import gettext as _
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
20
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
21 def _up(p):
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
22 if p[0] != "/":
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
23 p = "/" + p
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
24 if p[-1] == "/":
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
25 p = p[:-1]
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
26 up = os.path.dirname(p)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
27 if up == "/":
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
28 return "/"
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
29 return up + "/"
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
30
3413
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
31 def revnavgen(pos, pagelen, limit):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
32 def seq(factor, limit=None):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
33 if limit:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
34 yield limit
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
35 if limit >= 20 and limit <= 40:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
36 yield 50
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
37 else:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
38 yield 1 * factor
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
39 yield 3 * factor
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
40 for f in seq(factor * 10):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
41 yield f
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
42
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
43 def nav(**map):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
44 l = []
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
45 last = 0
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
46 for f in seq(1, pagelen):
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
47 if f < pagelen or f <= last:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
48 continue
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
49 if f > limit:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
50 break
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
51 last = f
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
52 if pos + f < limit:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
53 l.append(("+%d" % f, pos + f))
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
54 if pos - f >= 0:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
55 l.insert(0, ("-%d" % f, pos - f))
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
56
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
57 yield {"label": "(0)", "rev": 0}
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
58
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
59 for label, rev in l:
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
60 yield {"label": label, "rev": rev}
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
61
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
62 yield {"label": "tip", "rev": "tip"}
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
63
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
64 return nav
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
65
1559
59b3639df0a9 Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents: 1554
diff changeset
66 class hgweb(object):
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
67 def __init__(self, repo, name=None):
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 986
diff changeset
68 if type(repo) == type(""):
1213
db9639b8594c Clean up hgweb imports
mpm@selenic.com
parents: 1210
diff changeset
69 self.repo = hg.repository(ui.ui(), 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
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
77 self.templatepath = self.repo.ui.config("web", "templates",
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
78 templater.templatepath())
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
79
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
80 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
81 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
82 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
83 self.mtime = mtime
1213
db9639b8594c Clean up hgweb imports
mpm@selenic.com
parents: 1210
diff changeset
84 self.repo = hg.repository(self.repo.ui, self.repo.root)
1275
a1a84dd489ff Fix cut and paste error in hgweb.py
Florian La Roche <laroche@redhat.com>
parents: 1260
diff changeset
85 self.maxchanges = int(self.repo.ui.config("web", "maxchanges", 10))
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
86 self.stripecount = int(self.repo.ui.config("web", "stripes", 1))
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
87 self.maxshortchanges = int(self.repo.ui.config("web", "maxshortchanges", 60))
1275
a1a84dd489ff Fix cut and paste error in hgweb.py
Florian La Roche <laroche@redhat.com>
parents: 1260
diff changeset
88 self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10))
964
3f37720e7dc7 hgweb: Make maxfiles, maxchanges, and allowpull proper config options
mpm@selenic.com
parents: 957
diff changeset
89 self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
90
1498
78590fb4a82b hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1473
diff changeset
91 def archivelist(self, nodeid):
2500
76ff5efe8181 Fixed [web] allow_archive for comma separated parameters by using ui.configlist.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2466
diff changeset
92 allowed = self.repo.ui.configlist("web", "allow_archive")
3266
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
93 for i, spec in self.archive_specs.iteritems():
2359
a392eaa81f29 Allow comma to separate types in allow_archive, too. Use longer variable name.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2358
diff changeset
94 if i in allowed or self.repo.ui.configbool("web", "allow" + i):
3266
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
95 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
96
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
97 def listfilediffs(self, files, changeset):
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
98 for f in files[:self.maxfiles]:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
99 yield self.t("filedifflink", node=hex(changeset), file=f)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
100 if len(files) > self.maxfiles:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
101 yield self.t("fileellipses")
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
102
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
103 def siblings(self, siblings=[], hiderev=None, **args):
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
104 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: 3212
diff changeset
105 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
106 return
1606
ba625c8083d8 - duplicate the parent link logic to show child links
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1579
diff changeset
107 for s in siblings:
3398
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
108 d = {'node': hex(s.node()), 'rev': s.rev()}
3400
be628f1cd3f4 hgweb: really fix parent/child rename links
Brendan Cully <brendan@kublai.com>
parents: 3398
diff changeset
109 if hasattr(s, 'path'):
be628f1cd3f4 hgweb: really fix parent/child rename links
Brendan Cully <brendan@kublai.com>
parents: 3398
diff changeset
110 d['file'] = s.path()
3398
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
111 d.update(args)
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
112 yield d
569
3e347929f5f9 [PATCH 1/5]: cleaning the template parent management in hgweb
mpm@selenic.com
parents: 568
diff changeset
113
1653
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
114 def renamelink(self, fl, node):
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
115 r = fl.renamed(node)
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
116 if r:
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
117 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
118 return []
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
119
568
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
120 def showtag(self, t1, node=nullid, **args):
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
121 for t in self.repo.nodetags(node):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
122 yield self.t(t1, tag=t, **args)
568
e8fd41110dce [PATCH] Add tags to hgweb
mpm@selenic.com
parents: 547
diff changeset
123
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
124 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
125 def filterfiles(filters, files):
1627
11cd38286fdb fix for hgweb.filterfiles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1626
diff changeset
126 l = [x for x in files if x in filters]
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
127
1626
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
128 for t in filters:
1627
11cd38286fdb fix for hgweb.filterfiles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1626
diff changeset
129 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
130 t += os.sep
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
131 l += [x for x in files if x.startswith(t)]
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
132 return l
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
133
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
134 parity = [0]
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
135 def diffblock(diff, f, fn):
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
136 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
137 lines=prettyprintlines(diff),
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
138 parity=parity[0],
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
139 file=f,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
140 filenode=hex(fn or nullid))
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
141 parity[0] = 1 - parity[0]
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
142
172
e9b1147db448 hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents: 168
diff changeset
143 def prettyprintlines(diff):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
144 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
145 if l.startswith('+'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
146 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
147 elif l.startswith('-'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
148 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
149 elif l.startswith('@'):
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
150 yield self.t("difflineat", line=l)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
151 else:
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
152 yield self.t("diffline", line=l)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
153
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
154 r = self.repo
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
155 cl = r.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
156 mf = r.manifest
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
157 change1 = cl.read(node1)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
158 change2 = cl.read(node2)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
159 mmap1 = mf.read(change1[0])
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
160 mmap2 = mf.read(change2[0])
1333
901c645c1943 hgweb: fix date bug in hgweb diff generation
mpm@selenic.com
parents: 1324
diff changeset
161 date1 = util.datestr(change1[2])
901c645c1943 hgweb: fix date bug in hgweb diff generation
mpm@selenic.com
parents: 1324
diff changeset
162 date2 = util.datestr(change2[2])
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
163
2882
cf86bbb8ed68 hgweb: repo.changes() is now called repo.status()
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2880
diff changeset
164 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
165 if files:
1626
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
166 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
167 (modified, added, removed))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
168
2933
ee6ed2b29e1a Fix hgweb's patch display in changeset view.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2894
diff changeset
169 diffopts = patch.diffopts(self.repo.ui)
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
170 for f in modified:
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
171 to = r.file(f).read(mmap1[f])
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
172 tn = r.file(f).read(mmap2[f])
1637
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1627
diff changeset
173 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f,
2880
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
174 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
175 for f in added:
265
7ca05593bd30 hgweb: fix non-existent source or destination for diff
mpm@selenic.com
parents: 258
diff changeset
176 to = None
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
177 tn = r.file(f).read(mmap2[f])
1637
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1627
diff changeset
178 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f,
2880
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
179 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
180 for f in removed:
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
181 to = r.file(f).read(mmap1[f])
265
7ca05593bd30 hgweb: fix non-existent source or destination for diff
mpm@selenic.com
parents: 258
diff changeset
182 tn = None
1637
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1627
diff changeset
183 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f,
2880
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
184 opts=diffopts), f, tn)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
185
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
186 def changelog(self, ctx, shortlog=False):
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
187 def changelist(**map):
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
188 parity = (start - end) & 1
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
189 cl = self.repo.changelog
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
190 l = [] # build a list in forward order for efficiency
351
9525208e1c1d hgweb: change number navigation tidy up
mpm@selenic.com
parents: 350
diff changeset
191 for i in range(start, end):
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
192 ctx = self.repo.changectx(i)
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
193 n = ctx.node()
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
194
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
195 l.insert(0, {"parity": parity,
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
196 "author": ctx.user(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
197 "parent": self.siblings(ctx.parents(), i - 1),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
198 "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
199 "changelogtag": self.showtag("changelogtag",n),
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
200 "desc": ctx.description(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
201 "date": ctx.date(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
202 "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
203 "rev": i,
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
204 "node": hex(n)})
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
205 parity = 1 - parity
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
206
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
207 for e in l:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
208 yield e
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
209
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
210 maxchanges = shortlog and self.maxshortchanges or self.maxchanges
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
211 cl = self.repo.changelog
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
212 count = cl.count()
3413
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
213 pos = ctx.rev()
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
214 start = max(0, pos - maxchanges + 1)
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
215 end = min(count, start + maxchanges)
351
9525208e1c1d hgweb: change number navigation tidy up
mpm@selenic.com
parents: 350
diff changeset
216 pos = end - 1
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
217
3413
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
218 changenav = revnavgen(pos, maxchanges, count)
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
219
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
220 yield self.t(shortlog and 'shortlog' or 'changelog',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
221 changenav=changenav,
3211
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3185
diff changeset
222 node=hex(cl.tip()),
2170
29eeb2717915 Add archive download links to tip on main changeset list page
Colin McMillen <mcmillen@cs.cmu.edu>
parents: 2148
diff changeset
223 rev=pos, changesets=count, entries=changelist,
29eeb2717915 Add archive download links to tip on main changeset list page
Colin McMillen <mcmillen@cs.cmu.edu>
parents: 2148
diff changeset
224 archives=self.archivelist("tip"))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
225
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
226 def search(self, query):
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
227
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
228 def changelist(**map):
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
229 cl = self.repo.changelog
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
230 count = 0
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
231 qw = query.lower().split()
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
232
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
233 def revgen():
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
234 for i in range(cl.count() - 1, 0, -100):
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
235 l = []
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
236 for j in range(max(0, i - 100), i):
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
237 ctx = self.repo.changectx(j)
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
238 l.append(ctx)
1023
bc806ba72959 Minor tweak to the revgen algorithm
mpm@selenic.com
parents: 1022
diff changeset
239 l.reverse()
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
240 for e in l:
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
241 yield e
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
242
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
243 for ctx in revgen():
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
244 miss = 0
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
245 for q in qw:
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
246 if not (q in ctx.user().lower() or
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
247 q in ctx.description().lower() or
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
248 q in " ".join(ctx.files()[:20]).lower()):
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
249 miss = 1
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
250 break
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
251 if miss:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
252 continue
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
253
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
254 count += 1
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
255 n = ctx.node()
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
256
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
257 yield self.t('searchentry',
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
258 parity=self.stripes(count),
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
259 author=ctx.user(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
260 parent=self.siblings(ctx.parents()),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
261 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
262 changelogtag=self.showtag("changelogtag",n),
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
263 desc=ctx.description(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
264 date=ctx.date(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
265 files=self.listfilediffs(ctx.files(), n),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
266 rev=ctx.rev(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
267 node=hex(n))
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
268
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
269 if count >= self.maxchanges:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
270 break
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
271
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
272 cl = self.repo.changelog
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
273
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
274 yield self.t('search',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
275 query=query,
3211
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3185
diff changeset
276 node=hex(cl.tip()),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
277 entries=changelist)
538
7140bc781655 Add multiple keyword search to hgweb
mpm@selenic.com
parents: 536
diff changeset
278
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
279 def changeset(self, ctx):
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
280 n = ctx.node()
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
281 parents = ctx.parents()
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
282 p1 = parents[0].node()
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
283
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
284 files = []
3185
76ab39df0917 gitweb: cosmetic fixes.
Brendan Cully <brendan@kublai.com>
parents: 3184
diff changeset
285 parity = 0
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
286 for f in ctx.files():
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
287 files.append(self.t("filenodelink",
3212
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
288 node=hex(n), file=f,
3185
76ab39df0917 gitweb: cosmetic fixes.
Brendan Cully <brendan@kublai.com>
parents: 3184
diff changeset
289 parity=parity))
76ab39df0917 gitweb: cosmetic fixes.
Brendan Cully <brendan@kublai.com>
parents: 3184
diff changeset
290 parity = 1 - parity
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
291
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
292 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
293 yield self.diff(p1, n, None)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
294
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
295 yield self.t('changeset',
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
296 diff=diff,
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
297 rev=ctx.rev(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
298 node=hex(n),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
299 parent=self.siblings(parents),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
300 child=self.siblings(ctx.children()),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
301 changesettag=self.showtag("changesettag",n),
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
302 author=ctx.user(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
303 desc=ctx.description(),
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
304 date=ctx.date(),
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
305 files=files,
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
306 archives=self.archivelist(hex(n)))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
307
3212
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
308 def filelog(self, fctx):
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
309 f = fctx.path()
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
310 fl = fctx.filelog()
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
311 count = fl.count()
3413
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
312 pagelen = self.maxshortchanges
3415
1ae738bacf74 Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3413
diff changeset
313 pos = fctx.filerev()
1ae738bacf74 Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3413
diff changeset
314 start = max(0, pos - pagelen + 1)
1ae738bacf74 Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3413
diff changeset
315 end = min(count, start + pagelen)
1ae738bacf74 Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3413
diff changeset
316 pos = end - 1
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
317
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
318 def entries(**map):
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
319 l = []
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
320 parity = (count - 1) & 1
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
321
3413
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
322 for i in range(start, end):
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
323 ctx = fctx.filectx(i)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
324 n = fl.node(i)
133
fb84d3e71042 added template support for some hgweb output, also, template files for
jake@edge2.net
parents: 132
diff changeset
325
978
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
326 l.insert(0, {"parity": parity,
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
327 "filerev": i,
ea67e5b37043 hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 977
diff changeset
328 "file": f,
3212
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
329 "node": hex(ctx.node()),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
330 "author": ctx.user(),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
331 "date": ctx.date(),
1653
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
332 "rename": self.renamelink(fl, n),
3398
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
333 "parent": self.siblings(fctx.parents()),
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
334 "child": self.siblings(fctx.children()),
3212
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
335 "desc": ctx.description()})
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
336 parity = 1 - parity
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
337
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
338 for e in l:
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
339 yield e
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
340
3415
1ae738bacf74 Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3413
diff changeset
341 nav = revnavgen(pos, pagelen, count)
3413
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
342 yield self.t("filelog", file=f, node=hex(fctx.node()), nav=nav,
03e7e8958a27 hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents: 3412
diff changeset
343 entries=entries)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
344
3212
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
345 def filerevision(self, fctx):
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
346 f = fctx.path()
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
347 text = fctx.data()
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
348 fl = fctx.filelog()
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
349 n = fctx.filenode()
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
350
1411
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
351 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
352 rawtext = text
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
353 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
354 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
355 text = "(binary:%s)" % mt
2095
0bf2a9e5eff1 Don't send "Content-Type: none"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 1964
diff changeset
356 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
357
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
358 def lines():
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
359 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
360 yield {"line": t,
5d5ab159d197 hgweb: Changed file page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 975
diff changeset
361 "linenumber": "% 6d" % (l + 1),
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
362 "parity": self.stripes(l)}
359
0c4688e9ee5c hgweb: add file permissions
mpm@selenic.com
parents: 351
diff changeset
363
1063
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
364 yield self.t("filerevision",
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
365 file=f,
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
366 path=_up(f),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
367 text=lines(),
1411
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
368 raw=rawtext,
e2ba788545bf hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents: 1409
diff changeset
369 mimetype=mt,
3212
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
370 rev=fctx.rev(),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
371 node=hex(fctx.node()),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
372 author=fctx.user(),
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
373 date=fctx.date(),
3401
3c8f0dc9a6d3 hgweb: add changeset description to file revision page
Brendan Cully <brendan@kublai.com>
parents: 3400
diff changeset
374 desc=fctx.description(),
3398
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
375 parent=self.siblings(fctx.parents()),
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
376 child=self.siblings(fctx.children()),
1653
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
377 rename=self.renamelink(fl, n),
3212
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
378 permissions=fctx.manifest().execf(f))
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
379
3212
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
380 def fileannotate(self, fctx):
79fd7a92f3e2 hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents: 3211
diff changeset
381 f = fctx.path()
3179
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3137
diff changeset
382 n = fctx.filenode()
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3137
diff changeset
383 fl = fctx.filelog()
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
384
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
385 def annotate(**map):
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
386 parity = 0
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
387 last = None
3181
fc379b91f602 hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
388 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: 3179
diff changeset
389 fnode = f.filenode()
3179
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3137
diff changeset
390 name = self.repo.ui.shortuser(f.user())
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
391
3181
fc379b91f602 hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
392 if last != fnode:
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
393 parity = 1 - parity
3181
fc379b91f602 hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents: 3179
diff changeset
394 last = fnode
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
395
977
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
396 yield {"parity": parity,
3184
0d0d7317bbc8 hgweb: yield filenode as well as node in annotate, use filenode in annotateline
Brendan Cully <brendan@kublai.com>
parents: 3183
diff changeset
397 "node": hex(f.node()),
3409
372999405787 Back out d8eba1c3ce9b and a004164dbeef
Brendan Cully <brendan@kublai.com>
parents: 3408
diff changeset
398 "rev": f.rev(),
977
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
399 "author": name,
3179
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3137
diff changeset
400 "file": f.path(),
977
289975641886 hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 976
diff changeset
401 "line": l}
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
402
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
403 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
404 file=f,
58eefdfb8472 Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
405 annotate=annotate,
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
406 path=_up(f),
3179
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3137
diff changeset
407 rev=fctx.rev(),
3183
8683c7a637ad hgweb: fix changeset link in annotate view.
Brendan Cully <brendan@kublai.com>
parents: 3181
diff changeset
408 node=hex(fctx.node()),
3179
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3137
diff changeset
409 author=fctx.user(),
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3137
diff changeset
410 date=fctx.date(),
3397
defadc26e674 hgweb: add changeset description to annotate page
Brendan Cully <brendan@kublai.com>
parents: 3388
diff changeset
411 desc=fctx.description(),
1653
e8a3df8b62b3 hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents: 1650
diff changeset
412 rename=self.renamelink(fl, n),
3398
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
413 parent=self.siblings(fctx.parents()),
17894d1d9eea hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents: 3397
diff changeset
414 child=self.siblings(fctx.children()),
3179
3466bd7b9754 hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents: 3137
diff changeset
415 permissions=fctx.manifest().execf(f))
136
0e8d60d2bb2b added annotate
jake@edge2.net
parents: 135
diff changeset
416
3211
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3185
diff changeset
417 def manifest(self, ctx, path):
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3185
diff changeset
418 mf = ctx.manifest()
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3185
diff changeset
419 node = ctx.node()
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
420
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
421 files = {}
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
422
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
423 p = path[1:]
1649
beb7da710c8a hgweb: fix breakage on manifest subdirs from path cleaning
Matt Mackall <mpm@selenic.com>
parents: 1646
diff changeset
424 if p and p[-1] != "/":
beb7da710c8a hgweb: fix breakage on manifest subdirs from path cleaning
Matt Mackall <mpm@selenic.com>
parents: 1646
diff changeset
425 p += "/"
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
426 l = len(p)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
427
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
428 for f,n in mf.items():
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
429 if f[:l] != p:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
430 continue
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
431 remain = f[l:]
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
432 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
433 short = remain[:remain.index("/") + 1] # bleah
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
434 files[short] = (f, None)
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
435 else:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
436 short = os.path.basename(remain)
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
437 files[short] = (f, n)
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
438
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
439 def filelist(**map):
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 138
diff changeset
440 parity = 0
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
441 fl = files.keys()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
442 fl.sort()
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
443 for f in fl:
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
444 full, fnode = files[f]
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
445 if not fnode:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
446 continue
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
447
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
448 yield {"file": full,
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
449 "parity": self.stripes(parity),
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
450 "basename": f,
3311
0708bdb4987a hgweb: add file sizes to manifest browsing
Matt Mackall <mpm@selenic.com>
parents: 3310
diff changeset
451 "size": ctx.filectx(full).size(),
2863
18cf5349a361 Fix some bugs introduced during the manifest refactoring
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2840
diff changeset
452 "permissions": mf.execf(full)}
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
453 parity += 1
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
454
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
455 def dirlist(**map):
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
456 parity = 0
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
457 fl = files.keys()
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
458 fl.sort()
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
459 for f in fl:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
460 full, fnode = files[f]
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
461 if fnode:
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
462 continue
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
463
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
464 yield {"parity": self.stripes(parity),
979
87d40e085e08 hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 978
diff changeset
465 "path": os.path.join(path, f),
980
5197fb9d65d5 Merge with MPM
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 979 939
diff changeset
466 "basename": f[:-1]}
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
467 parity += 1
982
8d2e24bae760 hgweb: convert index entries to list expansion style
mpm@selenic.com
parents: 981
diff changeset
468
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
469 yield self.t("manifest",
3211
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3185
diff changeset
470 rev=ctx.rev(),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
471 node=hex(node),
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
472 path=path,
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
473 up=_up(path),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
474 fentries=filelist,
1498
78590fb4a82b hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1473
diff changeset
475 dentries=dirlist,
78590fb4a82b hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1473
diff changeset
476 archives=self.archivelist(hex(node)))
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
477
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
478 def tags(self):
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
479 cl = self.repo.changelog
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
480
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 330
diff changeset
481 i = self.repo.tagslist()
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 330
diff changeset
482 i.reverse()
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
483
1767
adbc392dfd9e implement entriesnotip for tags in hgweb.py ; change entries to entriesnotip in templates/tags-rss.tmpl
Peter van Dijk <peter@dataloss.nl>
parents: 1653
diff changeset
484 def entries(notip=False, **map):
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
485 parity = 0
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
486 for k,n in i:
1767
adbc392dfd9e implement entriesnotip for tags in hgweb.py ; change entries to entriesnotip in templates/tags-rss.tmpl
Peter van Dijk <peter@dataloss.nl>
parents: 1653
diff changeset
487 if notip and k == "tip": continue
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
488 yield {"parity": self.stripes(parity),
974
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
489 "tag": k,
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
490 "date": cl.read(n)[2],
974
aedb47764f29 Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 938
diff changeset
491 "node": hex(n)}
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
492 parity += 1
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
493
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
494 yield self.t("tags",
3211
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3185
diff changeset
495 node=hex(self.repo.changelog.tip()),
1767
adbc392dfd9e implement entriesnotip for tags in hgweb.py ; change entries to entriesnotip in templates/tags-rss.tmpl
Peter van Dijk <peter@dataloss.nl>
parents: 1653
diff changeset
496 entries=lambda **x: entries(False, **x),
adbc392dfd9e implement entriesnotip for tags in hgweb.py ; change entries to entriesnotip in templates/tags-rss.tmpl
Peter van Dijk <peter@dataloss.nl>
parents: 1653
diff changeset
497 entriesnotip=lambda **x: entries(True, **x))
168
65cf1b0cfe86 hgweb: add tags links and manifest links
mpm@selenic.com
parents: 166
diff changeset
498
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
499 def summary(self):
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
500 cl = self.repo.changelog
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
501
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
502 i = self.repo.tagslist()
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
503 i.reverse()
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
504
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
505 def tagentries(**map):
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
506 parity = 0
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
507 count = 0
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
508 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
509 if k == "tip": # skip tip
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
510 continue;
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
511
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
512 count += 1
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
513 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
514 break;
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
515
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
516 c = cl.read(n)
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
517 t = c[2]
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
518
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
519 yield self.t("tagentry",
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
520 parity = self.stripes(parity),
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
521 tag = k,
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
522 node = hex(n),
3211
48395d2692de hgweb: kill #manifest#
Brendan Cully <brendan@kublai.com>
parents: 3185
diff changeset
523 date = t)
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
524 parity += 1
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
525
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
526 def changelist(**map):
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
527 parity = 0
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
528 cl = self.repo.changelog
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
529 l = [] # build a list in forward order for efficiency
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
530 for i in range(start, end):
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
531 n = cl.node(i)
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
532 changes = cl.read(n)
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
533 hn = hex(n)
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
534 t = changes[2]
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
535
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
536 l.insert(0, self.t(
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
537 'shortlogentry',
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
538 parity = parity,
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
539 author = changes[1],
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
540 desc = changes[4],
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
541 date = t,
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
542 rev = i,
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
543 node = hn))
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
544 parity = 1 - parity
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
545
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
546 yield l
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
547
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
548 count = cl.count()
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
549 start = max(0, count - self.maxchanges)
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
550 end = min(count, start + self.maxchanges)
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
551
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
552 yield self.t("summary",
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
553 desc = self.repo.ui.config("web", "description", "unknown"),
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
554 owner = (self.repo.ui.config("ui", "username") or # preferred
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
555 self.repo.ui.config("web", "contact") or # deprecated
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
556 self.repo.ui.config("web", "author", "unknown")), # also
3361
c10eacad7171 gitweb: fix last change field in summary
Brendan Cully <brendan@kublai.com>
parents: 3339
diff changeset
557 lastchange = cl.read(cl.tip())[2],
1572
385b8872b8e3 [hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1559
diff changeset
558 tags = tagentries,
2683
8a798185809d [hgweb] Fixed up gitweb templates
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2622
diff changeset
559 shortlog = changelist,
3361
c10eacad7171 gitweb: fix last change field in summary
Brendan Cully <brendan@kublai.com>
parents: 3339
diff changeset
560 node = hex(cl.tip()),
2683
8a798185809d [hgweb] Fixed up gitweb templates
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2622
diff changeset
561 archives=self.archivelist("tip"))
1579
85803ec2daab Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1575
diff changeset
562
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
563 def filediff(self, fctx):
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
564 n = fctx.node()
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
565 path = fctx.path()
3412
970b2d6de3b3 hgweb: link to file parents in filediff, rather than changeset parents
Brendan Cully <brendan@kublai.com>
parents: 3409
diff changeset
566 parents = fctx.parents()
970b2d6de3b3 hgweb: link to file parents in filediff, rather than changeset parents
Brendan Cully <brendan@kublai.com>
parents: 3409
diff changeset
567 p1 = parents and parents[0].node() or nullid
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
568
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
569 def diff(**map):
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
570 yield self.diff(p1, n, [path])
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
571
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
572 yield self.t("filediff",
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
573 file=path,
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
574 node=hex(n),
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
575 rev=fctx.rev(),
3214
e7b7906cc47e hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents: 3212
diff changeset
576 parent=self.siblings(parents),
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
577 child=self.siblings(fctx.children()),
1062
6d5a62a549fa pep-0008 cleanup
benoit.boissinot@ens-lyon.fr
parents: 1023
diff changeset
578 diff=diff)
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
579
2113
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
580 archive_specs = {
2361
d3adb454c5a9 Fix automatic decompression of tarballs with Firefox.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2359
diff changeset
581 '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
582 '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
583 'zip': ('application/zip', 'zip', '.zip', None),
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
584 }
1076
01db658cc78a tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents: 1073
diff changeset
585
2394
a8f1049d1d2d hgweb: fix errors and warnings found by pychecker
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2391
diff changeset
586 def archive(self, req, cnode, type_):
2113
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
587 reponame = re.sub(r"\W+", "-", os.path.basename(self.reponame))
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
588 name = "%s-%s" % (reponame, short(cnode))
2394
a8f1049d1d2d hgweb: fix errors and warnings found by pychecker
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2391
diff changeset
589 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
590 headers = [('Content-type', mimetype),
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
591 ('Content-disposition', 'attachment; filename=%s%s' %
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
592 (name, extension))]
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
593 if encoding:
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
594 headers.append(('Content-encoding', encoding))
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
595 req.header(headers)
633d733e7b11 make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2103
diff changeset
596 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
597
138
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
598 # add tags to things
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
599 # tags -> list of changesets corresponding to tags
c77a679e9cfa Revamped templated hgweb
mpm@selenic.com
parents: 137
diff changeset
600 # find tag, changeset, file
131
c9d51742471c moving hgweb to mercurial subdir
jake@edge2.net
parents:
diff changeset
601
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
602 def cleanpath(self, path):
3388
80721b86a448 hgweb: fix path cleaning
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3369
diff changeset
603 return util.canonpath(self.repo.root, '', path)
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
604
2535
b8ccf6386db7 Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents: 2534
diff changeset
605 def run(self):
2538
f4b7d71c1c60 Cleanup hgweb and hgwebdir's run method a bit.
Eric Hopper <hopper@omnifarious.org>
parents: 2535
diff changeset
606 if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
2535
b8ccf6386db7 Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents: 2534
diff changeset
607 raise RuntimeError("This function is only intended to be called while running as a CGI script.")
b8ccf6386db7 Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents: 2534
diff changeset
608 import mercurial.hgweb.wsgicgi as wsgicgi
b8ccf6386db7 Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents: 2534
diff changeset
609 from request import wsgiapplication
b8ccf6386db7 Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents: 2534
diff changeset
610 def make_web_app():
2538
f4b7d71c1c60 Cleanup hgweb and hgwebdir's run method a bit.
Eric Hopper <hopper@omnifarious.org>
parents: 2535
diff changeset
611 return self
2535
b8ccf6386db7 Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents: 2534
diff changeset
612 wsgicgi.launch(wsgiapplication(make_web_app))
b8ccf6386db7 Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents: 2534
diff changeset
613
b8ccf6386db7 Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents: 2534
diff changeset
614 def run_wsgi(self, req):
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
615 def header(**map):
2514
419c42223bee Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents: 2509
diff changeset
616 header_file = cStringIO.StringIO(''.join(self.t("header", **map)))
419c42223bee Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents: 2509
diff changeset
617 msg = mimetools.Message(header_file, 0)
419c42223bee Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents: 2509
diff changeset
618 req.header(msg.items())
419c42223bee Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents: 2509
diff changeset
619 yield header_file.read()
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
620
2534
d5a3cc6520d5 Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents: 2514
diff changeset
621 def rawfileheader(**map):
d5a3cc6520d5 Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents: 2514
diff changeset
622 req.header([('Content-type', map['mimetype']),
d5a3cc6520d5 Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents: 2514
diff changeset
623 ('Content-disposition', 'filename=%s' % map['file']),
d5a3cc6520d5 Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents: 2514
diff changeset
624 ('Content-length', str(len(map['raw'])))])
d5a3cc6520d5 Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents: 2514
diff changeset
625 yield ''
d5a3cc6520d5 Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents: 2514
diff changeset
626
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
627 def footer(**map):
2148
c72e618c1204 Add MOTD display to hgweb and hgwebdir.
Colin McMillen <mcmillen@cs.cmu.edu>
parents: 2127
diff changeset
628 yield self.t("footer",
c72e618c1204 Add MOTD display to hgweb and hgwebdir.
Colin McMillen <mcmillen@cs.cmu.edu>
parents: 2127
diff changeset
629 motd=self.repo.ui.config("web", "motd", ""),
c72e618c1204 Add MOTD display to hgweb and hgwebdir.
Colin McMillen <mcmillen@cs.cmu.edu>
parents: 2127
diff changeset
630 **map)
1409
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
631
1406
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
632 def expand_form(form):
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
633 shortcuts = {
1409
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
634 'cl': [('cmd', ['changelog']), ('rev', None)],
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
635 'sl': [('cmd', ['shortlog']), ('rev', None)],
1406
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
636 'cs': [('cmd', ['changeset']), ('node', None)],
1409
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
637 'f': [('cmd', ['file']), ('filenode', None)],
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
638 'fl': [('cmd', ['filelog']), ('filenode', None)],
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
639 'fd': [('cmd', ['filediff']), ('node', None)],
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
640 'fa': [('cmd', ['annotate']), ('filenode', None)],
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
641 'mf': [('cmd', ['manifest']), ('manifest', None)],
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
642 'ca': [('cmd', ['archive']), ('node', None)],
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
643 'tags': [('cmd', ['tags'])],
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
644 'tip': [('cmd', ['changeset']), ('node', ['tip'])],
1777
a2316878f19d [hgweb] Static content serving
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 1703
diff changeset
645 'static': [('cmd', ['static']), ('file', None)]
1406
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
646 }
1409
964baa35faf8 hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents: 1407
diff changeset
647
1406
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
648 for k in shortcuts.iterkeys():
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
649 if form.has_key(k):
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
650 for name, value in shortcuts[k]:
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
651 if value is None:
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
652 value = form[k]
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
653 form[name] = value
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
654 del form[k]
857
41b344235bb7 [PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents: 839
diff changeset
655
3266
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
656 def rewrite_request(req):
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
657 '''translate new web interface to traditional format'''
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
658
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
659 def spliturl(req):
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
660 def firstitem(query):
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
661 return query.split('&', 1)[0].split(';', 1)[0]
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
662
3333
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
663 def normurl(url):
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
664 inner = '/'.join([x for x in url.split('/') if x])
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
665 tl = len(url) > 1 and url.endswith('/') and '/' or ''
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
666
3333
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
667 return '%s%s%s' % (url.startswith('/') and '/' or '',
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
668 inner, tl)
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
669
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
670 root = normurl(req.env.get('REQUEST_URI', '').split('?', 1)[0])
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
671 pi = normurl(req.env.get('PATH_INFO', ''))
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
672 if pi:
3333
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
673 # strip leading /
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
674 pi = pi[1:]
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
675 if pi:
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
676 root = root[:-len(pi)]
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
677 if req.env.has_key('REPO_NAME'):
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
678 rn = req.env['REPO_NAME'] + '/'
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
679 root += rn
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
680 query = pi[len(rn):]
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
681 else:
3333
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
682 query = pi
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
683 else:
3333
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
684 root += '?'
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
685 query = firstitem(req.env['QUERY_STRING'])
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
686
3333
e6353b7b102a NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents: 3311
diff changeset
687 return (root, query)
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
688
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
689 req.url, query = spliturl(req)
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
690
3266
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
691 if req.form.has_key('cmd'):
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
692 # old style
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
693 return
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
694
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
695 args = query.split('/', 2)
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
696 if not args or not args[0]:
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
697 return
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
698
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
699 cmd = args.pop(0)
3267
329ac0c0c0e8 hgweb: extract raw prefix from NWI commands
Brendan Cully <brendan@kublai.com>
parents: 3266
diff changeset
700 style = cmd.rfind('-')
329ac0c0c0e8 hgweb: extract raw prefix from NWI commands
Brendan Cully <brendan@kublai.com>
parents: 3266
diff changeset
701 if style != -1:
329ac0c0c0e8 hgweb: extract raw prefix from NWI commands
Brendan Cully <brendan@kublai.com>
parents: 3266
diff changeset
702 req.form['style'] = [cmd[:style]]
329ac0c0c0e8 hgweb: extract raw prefix from NWI commands
Brendan Cully <brendan@kublai.com>
parents: 3266
diff changeset
703 cmd = cmd[style+1:]
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
704 # avoid accepting e.g. style parameter as command
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
705 if hasattr(self, 'do_' + cmd):
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
706 req.form['cmd'] = [cmd]
3266
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
707
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
708 if args and args[0]:
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
709 node = args.pop(0)
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
710 req.form['node'] = [node]
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
711 if args:
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
712 req.form['file'] = args
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
713
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
714 if cmd == 'static':
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
715 req.form['file'] = req.form['node']
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
716 elif cmd == 'archive':
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
717 fn = req.form['node'][0]
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
718 for type_, spec in self.archive_specs.iteritems():
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
719 ext = spec[2]
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
720 if fn.endswith(ext):
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
721 req.form['node'] = [fn[:-len(ext)]]
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
722 req.form['type'] = [type_]
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
723
3368
887da2247b57 hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3365
diff changeset
724 def sessionvars(**map):
887da2247b57 hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3365
diff changeset
725 fields = []
887da2247b57 hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3365
diff changeset
726 if req.form.has_key('style'):
887da2247b57 hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3365
diff changeset
727 style = req.form['style'][0]
887da2247b57 hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3365
diff changeset
728 if style != self.repo.ui.config('web', 'style', ''):
887da2247b57 hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3365
diff changeset
729 fields.append(('style', style))
887da2247b57 hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3365
diff changeset
730
3369
ce8f31e0b3b8 hgweb: Apply the new method of passing session variables to links.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3368
diff changeset
731 separator = req.url[-1] == '?' and ';' or '?'
3368
887da2247b57 hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3365
diff changeset
732 for name, value in fields:
3369
ce8f31e0b3b8 hgweb: Apply the new method of passing session variables to links.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3368
diff changeset
733 yield dict(name=name, value=value, separator=separator)
ce8f31e0b3b8 hgweb: Apply the new method of passing session variables to links.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3368
diff changeset
734 separator = ';'
3276
a7370503d800 hgweb: provide means for handling query parameters
Brendan Cully <brendan@kublai.com>
parents: 3273
diff changeset
735
258
268bcb5a072a hgweb: watch changelog for changes
mpm@selenic.com
parents: 241
diff changeset
736 self.refresh()
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
737
1406
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
738 expand_form(req.form)
3266
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
739 rewrite_request(req)
1406
34cb3957d875 hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1402
diff changeset
740
986
2810c625ca98 Add web:style option
mpm@selenic.com
parents: 984
diff changeset
741 style = self.repo.ui.config("web", "style", "")
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
742 if req.form.has_key('style'):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
743 style = req.form['style'][0]
3282
db9d2a624521 hgweb: Search templates in templatepath/style/map, too, using a common function.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3280
diff changeset
744 mapfile = style_map(self.templatepath, style)
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 391
diff changeset
745
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
746 if not req.url:
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
747 port = req.env["SERVER_PORT"]
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
748 port = port != "80" and (":" + port) or ""
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
749 uri = req.env["REQUEST_URI"]
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
750 if "?" in uri:
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
751 uri = uri.split("?")[0]
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
752 req.url = "http://%s%s%s" % (req.env["SERVER_NAME"], port, uri)
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
753
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
754 if not self.reponame:
3f30a5e7e15b Use path relative to document root as reponame if published via a web server.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1170
diff changeset
755 self.reponame = (self.repo.ui.config("web", "name")
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
756 or req.env.get('REPO_NAME')
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
757 or req.url.strip('/') or self.repo.root)
601
8865eb8ade99 Add globals to templater/fixup RSS
mpm@selenic.com
parents: 600
diff changeset
758
3282
db9d2a624521 hgweb: Search templates in templatepath/style/map, too, using a common function.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3280
diff changeset
759 self.t = templater.templater(mapfile, templater.common_filters,
3269
3207e30bf468 hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents: 3267
diff changeset
760 defaults={"url": req.url,
1964
778281d46bb2 fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1920
diff changeset
761 "repo": self.reponame,
778281d46bb2 fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1920
diff changeset
762 "header": header,
778281d46bb2 fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1920
diff changeset
763 "footer": footer,
2534
d5a3cc6520d5 Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents: 2514
diff changeset
764 "rawfileheader": rawfileheader,
3369
ce8f31e0b3b8 hgweb: Apply the new method of passing session variables to links.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3368
diff changeset
765 "sessionvars": sessionvars
1964
778281d46bb2 fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1920
diff changeset
766 })
201
f918a6fa2572 hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents: 198
diff changeset
767
1159
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
768 if not req.form.has_key('cmd'):
b6f5a947e62e Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents: 1143
diff changeset
769 req.form['cmd'] = [self.t.cache['default'],]
937
e4f1b76831b2 Whitespace
mpm@selenic.com
parents: 896
diff changeset
770
2119
f62195054c5b Cleaned hgweb.py a little bit
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 2113
diff changeset
771 cmd = req.form['cmd'][0]
575
7f5ce4bbdd7b More whitespace cleanups
mpm@selenic.com
parents: 572
diff changeset
772
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
773 method = getattr(self, 'do_' + cmd, None)
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
774 if method:
3365
41741218504d hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents: 3364
diff changeset
775 try:
41741218504d hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents: 3364
diff changeset
776 method(req)
41741218504d hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents: 3364
diff changeset
777 except (hg.RepoError, revlog.RevlogError), inst:
41741218504d hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents: 3364
diff changeset
778 req.write(self.t("error", error=str(inst)))
132
210eeb6f5197 making hgweb class
jake@edge2.net
parents: 131
diff changeset
779 else:
3364
818598f5bc8b Add better error message for bad commands
Brendan Cully <brendan@kublai.com>
parents: 3361
diff changeset
780 req.write(self.t("error", error='No such method: ' + cmd))
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
781
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
782 def changectx(self, req):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
783 if req.form.has_key('node'):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
784 changeid = req.form['node'][0]
3339
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3333
diff changeset
785 elif req.form.has_key('manifest'):
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3333
diff changeset
786 changeid = req.form['manifest'][0]
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
787 else:
3339
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3333
diff changeset
788 changeid = self.repo.changelog.count() - 1
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3333
diff changeset
789
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
790 try:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
791 ctx = self.repo.changectx(changeid)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
792 except hg.RepoError:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
793 man = self.repo.manifest
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
794 mn = man.lookup(changeid)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
795 ctx = self.repo.changectx(man.linkrev(mn))
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
796
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
797 return ctx
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
798
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
799 def filectx(self, req):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
800 path = self.cleanpath(req.form['file'][0])
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
801 if req.form.has_key('node'):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
802 changeid = req.form['node'][0]
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
803 else:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
804 changeid = req.form['filenode'][0]
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
805 try:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
806 ctx = self.repo.changectx(changeid)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
807 fctx = ctx.filectx(path)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
808 except hg.RepoError:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
809 fctx = self.repo.filectx(path, fileid=changeid)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
810
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
811 return fctx
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
812
2666
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
813 def stripes(self, parity):
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
814 "make horizontal stripes for easier reading"
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
815 if self.stripecount:
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
816 return (1 + parity / self.stripecount) & 1
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
817 else:
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
818 return 0
ebf033bc8eb2 hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 2622
diff changeset
819
3266
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
820 def do_log(self, req):
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
821 if req.form.has_key('file') and req.form['file'][0]:
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
822 self.do_filelog(req)
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
823 else:
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
824 self.do_changelog(req)
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
825
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
826 def do_rev(self, req):
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
827 self.do_changeset(req)
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
828
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
829 def do_file(self, req):
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
830 path = req.form.get('file', [''])[0]
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
831 if path:
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
832 try:
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
833 req.write(self.filerevision(self.filectx(req)))
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
834 return
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
835 except hg.RepoError:
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
836 pass
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
837 path = self.cleanpath(path)
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
838
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
839 req.write(self.manifest(self.changectx(req), '/' + path))
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
840
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
841 def do_diff(self, req):
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
842 self.do_filediff(req)
1f1af9b273e8 hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents: 3237
diff changeset
843
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
844 def do_changelog(self, req, shortlog = False):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
845 if req.form.has_key('node'):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
846 ctx = self.changectx(req)
3226
325278542ea8 hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents: 3214
diff changeset
847 else:
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
848 if req.form.has_key('rev'):
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
849 hi = req.form['rev'][0]
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
850 else:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
851 hi = self.repo.changelog.count() - 1
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
852 try:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
853 ctx = self.repo.changectx(hi)
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
854 except hg.RepoError:
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
855 req.write(self.search(hi)) # XXX redirect to 404 page?
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
856 return
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
857
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
858 req.write(self.changelog(ctx, shortlog = shortlog))
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
859
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
860 def do_shortlog(self, req):
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
861 self.do_changelog(req, shortlog = True)
2684
783220e5d2d1 [hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 2683
diff changeset
862
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
863 def do_changeset(self, req):
3339
8ec80c1b8f0b hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents: 3333
diff changeset
864 req.write(self.changeset(self.changectx(req)))
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
865
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
866 def do_manifest(self, req):
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
867 req.write(self.manifest(self.changectx(req),
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
868 self.cleanpath(req.form['path'][0])))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
869
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
870 def do_tags(self, req):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
871 req.write(self.tags())
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
872
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
873 def do_summary(self, req):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
874 req.write(self.summary())
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
875
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
876 def do_filediff(self, req):
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
877 req.write(self.filediff(self.filectx(req)))
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
878
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
879 def do_annotate(self, req):
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
880 req.write(self.fileannotate(self.filectx(req)))
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
881
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
882 def do_filelog(self, req):
3232
5c6028778c5a hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents: 3226
diff changeset
883 req.write(self.filelog(self.filectx(req)))
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
884
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
885 def do_heads(self, req):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
886 resp = " ".join(map(hex, self.repo.heads())) + "\n"
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
887 req.httphdr("application/mercurial-0.1", length=len(resp))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
888 req.write(resp)
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
889
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
890 def do_branches(self, req):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
891 nodes = []
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
892 if req.form.has_key('nodes'):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
893 nodes = map(bin, req.form['nodes'][0].split(" "))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
894 resp = cStringIO.StringIO()
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
895 for b in self.repo.branches(nodes):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
896 resp.write(" ".join(map(hex, b)) + "\n")
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
897 resp = resp.getvalue()
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
898 req.httphdr("application/mercurial-0.1", length=len(resp))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
899 req.write(resp)
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
900
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
901 def do_between(self, req):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
902 if req.form.has_key('pairs'):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
903 pairs = [map(bin, p.split("-"))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
904 for p in req.form['pairs'][0].split(" ")]
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
905 resp = cStringIO.StringIO()
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
906 for b in self.repo.between(pairs):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
907 resp.write(" ".join(map(hex, b)) + "\n")
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
908 resp = resp.getvalue()
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
909 req.httphdr("application/mercurial-0.1", length=len(resp))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
910 req.write(resp)
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
911
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
912 def do_changegroup(self, req):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
913 req.httphdr("application/mercurial-0.1")
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
914 nodes = []
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
915 if not self.allowpull:
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
916 return
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
917
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
918 if req.form.has_key('roots'):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
919 nodes = map(bin, req.form['roots'][0].split(" "))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
920
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
921 z = zlib.compressobj()
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
922 f = self.repo.changegroup(nodes, 'serve')
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
923 while 1:
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
924 chunk = f.read(4096)
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
925 if not chunk:
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
926 break
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
927 req.write(z.compress(chunk))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
928
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
929 req.write(z.flush())
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
930
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
931 def do_archive(self, req):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
932 changeset = self.repo.lookup(req.form['node'][0])
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
933 type_ = req.form['type'][0]
2500
76ff5efe8181 Fixed [web] allow_archive for comma separated parameters by using ui.configlist.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2466
diff changeset
934 allowed = self.repo.ui.configlist("web", "allow_archive")
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
935 if (type_ in self.archives and (type_ in allowed or
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
936 self.repo.ui.configbool("web", "allow" + type_, False))):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
937 self.archive(req, changeset, type_)
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
938 return
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
939
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
940 req.write(self.t("error"))
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
941
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
942 def do_static(self, req):
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
943 fname = req.form['file'][0]
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
944 static = self.repo.ui.config("web", "static",
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
945 os.path.join(self.templatepath,
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
946 "static"))
2514
419c42223bee Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents: 2509
diff changeset
947 req.write(staticfile(static, fname, req)
2436
f910b91dd912 hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2434
diff changeset
948 or self.t("error", error="%r not found" % fname))
2442
c660691fb45d http: query server for capabilities
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2436
diff changeset
949
c660691fb45d http: query server for capabilities
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2436
diff changeset
950 def do_capabilities(self, req):
2621
5a5852a417b1 clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2612
diff changeset
951 caps = ['unbundle']
2622
064aef9162cc rename stream hgrc option to compressed.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2621
diff changeset
952 if self.repo.ui.configbool('server', 'uncompressed'):
2621
5a5852a417b1 clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2612
diff changeset
953 caps.append('stream=%d' % self.repo.revlogversion)
5a5852a417b1 clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2612
diff changeset
954 resp = ' '.join(caps)
2442
c660691fb45d http: query server for capabilities
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2436
diff changeset
955 req.httphdr("application/mercurial-0.1", length=len(resp))
c660691fb45d http: query server for capabilities
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2436
diff changeset
956 req.write(resp)
c660691fb45d http: query server for capabilities
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2436
diff changeset
957
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
958 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
959 '''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
960 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
961 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
962
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
963 user = req.env.get('REMOTE_USER')
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
964
2501
b73552a00b20 Make "[web] allow_push, deny_push" and "[http_proxy] no" use ui.configlist.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2500
diff changeset
965 deny = self.repo.ui.configlist('web', 'deny_' + op)
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
966 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
967 return False
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
968
2501
b73552a00b20 Make "[web] allow_push, deny_push" and "[http_proxy] no" use ui.configlist.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2500
diff changeset
969 allow = self.repo.ui.configlist('web', 'allow_' + op)
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
970 return (allow and (allow == ['*'] or user in allow)) or default
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
971
2464
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
972 def do_unbundle(self, req):
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
973 def bail(response, headers={}):
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
974 length = int(req.env['CONTENT_LENGTH'])
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
975 for s in util.filechunkiter(req, limit=length):
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
976 # drain incoming bundle, else client will not see
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
977 # response when run outside cgi script
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
978 pass
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
979 req.httphdr("application/mercurial-0.1", headers=headers)
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
980 req.write('0\n')
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
981 req.write(response)
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
982
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
983 # require ssl by default, auth info cannot be sniffed and
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
984 # replayed
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
985 ssl_req = self.repo.ui.configbool('web', 'push_ssl', True)
2673
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
986 if ssl_req:
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
987 if not req.env.get('HTTPS'):
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
988 bail(_('ssl required\n'))
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
989 return
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
990 proto = 'https'
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
991 else:
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
992 proto = 'http'
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
993
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
994 # do not allow push unless explicitly allowed
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
995 if not self.check_perm(req, 'push', False):
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
996 bail(_('push not authorized\n'),
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
997 headers={'status': '401 Unauthorized'})
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
998 return
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
999
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
1000 req.httphdr("application/mercurial-0.1")
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
1001
2464
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1002 their_heads = req.form['heads'][0].split(' ')
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1003
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1004 def check_heads():
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1005 heads = map(hex, self.repo.heads())
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1006 return their_heads == [hex('force')] or their_heads == heads
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1007
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1008 # fail early if possible
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1009 if not check_heads():
2466
e10665147d26 push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2464
diff changeset
1010 bail(_('unsynced changes\n'))
2464
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1011 return
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1012
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1013 # do not lock repo until all changegroup data is
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1014 # streamed. save to temporary file.
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1015
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1016 fd, tempname = tempfile.mkstemp(prefix='hg-unbundle-')
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1017 fp = os.fdopen(fd, 'wb+')
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1018 try:
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1019 length = int(req.env['CONTENT_LENGTH'])
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1020 for s in util.filechunkiter(req, limit=length):
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1021 fp.write(s)
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1022
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1023 lock = self.repo.lock()
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1024 try:
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1025 if not check_heads():
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1026 req.write('0\n')
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1027 req.write(_('unsynced changes\n'))
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1028 return
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1029
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1030 fp.seek(0)
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1031
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1032 # send addchangegroup output to client
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1033
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1034 old_stdout = sys.stdout
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1035 sys.stdout = cStringIO.StringIO()
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1036
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1037 try:
2673
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
1038 url = 'remote:%s:%s' % (proto,
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
1039 req.env.get('REMOTE_HOST', ''))
109a22f5434a hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2666
diff changeset
1040 ret = self.repo.addchangegroup(fp, 'serve', url)
2464
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1041 finally:
2558
1120302009d7 hgweb: fix unbundle.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2538
diff changeset
1042 val = sys.stdout.getvalue()
2464
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1043 sys.stdout = old_stdout
2558
1120302009d7 hgweb: fix unbundle.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2538
diff changeset
1044 req.write('%d\n' % ret)
1120302009d7 hgweb: fix unbundle.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2538
diff changeset
1045 req.write(val)
2464
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1046 finally:
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1047 lock.release()
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1048 finally:
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1049 fp.close()
09b1c9ef317c push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2442
diff changeset
1050 os.unlink(tempname)
2612
ffb895f16925 add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2580
diff changeset
1051
ffb895f16925 add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2580
diff changeset
1052 def do_stream_out(self, req):
ffb895f16925 add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2580
diff changeset
1053 req.httphdr("application/mercurial-0.1")
ffb895f16925 add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2580
diff changeset
1054 streamclone.stream_out(self.repo, req)