Mercurial > hg > mercurial-crew-with-dirclash
annotate mercurial/hgweb/hgwebdir_mod.py @ 2439:e8c4f3d3df8c
extend network protocol to stop clients from locking servers
now all repositories have capabilities slot, tuple with list of names.
if 'unbundle' capability present, repo supports push where client does
not need to lock server. repository classes that have unbundle capability
also have unbundle method.
implemented for ssh now, will be base for push over http.
unbundle protocol acts this way. server tells client what heads it
has during normal negotiate step. client starts unbundle by repeat
server's heads back to it. if server has new heads, abort immediately.
otherwise, transfer changes to server. once data transferred, server
locks and checks heads again. if heads same, changes can be added.
else someone else added heads, and server aborts.
if client wants to force server to add heads, sends special heads list of
'force'.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Thu, 15 Jun 2006 16:37:23 -0700 |
parents | d351a3be3371 |
children | 76ff5efe8181 d0db3462d568 |
rev | line source |
---|---|
2391
d351a3be3371
Fixing up comment headers for split up code.
Eric Hopper <hopper@omnifarious.org>
parents:
2360
diff
changeset
|
1 # hgweb/hgwebdir_mod.py - Web interface for a directory of repositories. |
131 | 2 # |
238
3b92f8fe47ae
hgweb.py: kill #! line, clean up copyright notice
mpm@selenic.com
parents:
222
diff
changeset
|
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net> |
575 | 4 # Copyright 2005 Matt Mackall <mpm@selenic.com> |
131 | 5 # |
6 # This software may be used and distributed according to the terms | |
7 # of the GNU General Public License, incorporated herein by reference. | |
8 | |
2356
2db831b33e8f
Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents:
2355
diff
changeset
|
9 import os |
2311
b832b6eb65ab
Moving hgweb.py into it's own module in preparation for breaking it up.
Eric Hopper <hopper@omnifarious.org>
parents:
2275
diff
changeset
|
10 from mercurial.demandload import demandload |
2356
2db831b33e8f
Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents:
2355
diff
changeset
|
11 demandload(globals(), "ConfigParser") |
2db831b33e8f
Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents:
2355
diff
changeset
|
12 demandload(globals(), "mercurial:ui,hg,util,templater") |
2360
25ec4981883e
hgweb: fix tracebacks on both index and repo pages
TK Soh <teekaysoh@yahoo.com>
parents:
2359
diff
changeset
|
13 demandload(globals(), "mercurial.hgweb.hgweb_mod:hgweb") |
2355
eb08fb4d41e1
Splitting up hgweb so it's easier to change.
Eric Hopper <hopper@omnifarious.org>
parents:
2328
diff
changeset
|
14 demandload(globals(), "mercurial.hgweb.request:hgrequest") |
2360
25ec4981883e
hgweb: fix tracebacks on both index and repo pages
TK Soh <teekaysoh@yahoo.com>
parents:
2359
diff
changeset
|
15 demandload(globals(), "mercurial.hgweb.common:get_mtime,staticfile") |
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
|
16 from mercurial.i18n import gettext as _ |
138 | 17 |
941 | 18 # This is a stopgap |
1559
59b3639df0a9
Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents:
1554
diff
changeset
|
19 class hgwebdir(object): |
941 | 20 def __init__(self, config): |
1181
4f5001f5b4c3
Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents:
1180
diff
changeset
|
21 def cleannames(items): |
1829
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
22 return [(name.strip(os.sep), path) for name, path in items] |
1181
4f5001f5b4c3
Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents:
1180
diff
changeset
|
23 |
2148
c72e618c1204
Add MOTD display to hgweb and hgwebdir.
Colin McMillen <mcmillen@cs.cmu.edu>
parents:
2127
diff
changeset
|
24 self.motd = "" |
2174
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
25 self.repos_sorted = ('name', False) |
1829
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
26 if isinstance(config, (list, tuple)): |
1181
4f5001f5b4c3
Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents:
1180
diff
changeset
|
27 self.repos = cleannames(config) |
2174
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
28 self.repos_sorted = ('', False) |
1829
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
29 elif isinstance(config, dict): |
1181
4f5001f5b4c3
Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents:
1180
diff
changeset
|
30 self.repos = cleannames(config.items()) |
1143
4fffb3d84b7c
Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1142
diff
changeset
|
31 self.repos.sort() |
4fffb3d84b7c
Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1142
diff
changeset
|
32 else: |
4fffb3d84b7c
Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1142
diff
changeset
|
33 cp = ConfigParser.SafeConfigParser() |
4fffb3d84b7c
Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1142
diff
changeset
|
34 cp.read(config) |
1829
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
35 self.repos = [] |
2148
c72e618c1204
Add MOTD display to hgweb and hgwebdir.
Colin McMillen <mcmillen@cs.cmu.edu>
parents:
2127
diff
changeset
|
36 if cp.has_section('web') and cp.has_option('web', 'motd'): |
c72e618c1204
Add MOTD display to hgweb and hgwebdir.
Colin McMillen <mcmillen@cs.cmu.edu>
parents:
2127
diff
changeset
|
37 self.motd = cp.get('web', 'motd') |
1829
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
38 if cp.has_section('paths'): |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
39 self.repos.extend(cleannames(cp.items('paths'))) |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
40 if cp.has_section('collections'): |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
41 for prefix, root in cp.items('collections'): |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
42 for path in util.walkrepos(root): |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
43 repo = os.path.normpath(path) |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
44 name = repo |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
45 if name.startswith(prefix): |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
46 name = name[len(prefix):] |
b0f6af327fd4
hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1703
diff
changeset
|
47 self.repos.append((name.lstrip(os.sep), repo)) |
1143
4fffb3d84b7c
Allow list of (virtual, real) or dictionary to be passed to hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1142
diff
changeset
|
48 self.repos.sort() |
941 | 49 |
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
|
50 def run(self, req=hgrequest()): |
941 | 51 def header(**map): |
52 yield tmpl("header", **map) | |
53 | |
54 def footer(**map): | |
2148
c72e618c1204
Add MOTD display to hgweb and hgwebdir.
Colin McMillen <mcmillen@cs.cmu.edu>
parents:
2127
diff
changeset
|
55 yield tmpl("footer", motd=self.motd, **map) |
941 | 56 |
1897
58b6784cf9f1
move hgweb.templatepath into templater
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1896
diff
changeset
|
57 m = os.path.join(templater.templatepath(), "map") |
1898
e517189f168d
missed hunk when moving code to templater module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1897
diff
changeset
|
58 tmpl = templater.templater(m, templater.common_filters, |
1964
778281d46bb2
fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1920
diff
changeset
|
59 defaults={"header": header, |
778281d46bb2
fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1920
diff
changeset
|
60 "footer": footer}) |
941 | 61 |
2171
290534ee163c
Add download links to hgwebdir index page for allowed archive types.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2170
diff
changeset
|
62 def archivelist(ui, nodeid, url): |
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
|
63 allowed = (ui.config("web", "allow_archive", "") |
a392eaa81f29
Allow comma to separate types in allow_archive, too. Use longer variable name.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2358
diff
changeset
|
64 .replace(",", " ").split()) |
2171
290534ee163c
Add download links to hgwebdir index page for allowed archive types.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2170
diff
changeset
|
65 for i in ['zip', 'gz', 'bz2']: |
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
|
66 if i in allowed or ui.configbool("web", "allow" + i): |
2171
290534ee163c
Add download links to hgwebdir index page for allowed archive types.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2170
diff
changeset
|
67 yield {"type" : i, "node": nodeid, "url": url} |
290534ee163c
Add download links to hgwebdir index page for allowed archive types.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2170
diff
changeset
|
68 |
2173
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
69 def entries(sortcolumn="", descending=False, **map): |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
70 rows = [] |
941 | 71 parity = 0 |
1141
033c968d7c66
Use ConfigParser only in hgwebdir.__init__()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1140
diff
changeset
|
72 for name, path in self.repos: |
1213 | 73 u = ui.ui() |
1170
85555540a4e2
Make .hg/hgrc optional for repositories published by hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1165
diff
changeset
|
74 try: |
1473
7d66ce9895fa
make readconfig take a filename instead of a file pointer as argument
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1445
diff
changeset
|
75 u.readconfig(os.path.join(path, '.hg', 'hgrc')) |
1170
85555540a4e2
Make .hg/hgrc optional for repositories published by hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1165
diff
changeset
|
76 except IOError: |
85555540a4e2
Make .hg/hgrc optional for repositories published by hgwebdir.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1165
diff
changeset
|
77 pass |
1140
04d52b446e5e
Don't create repo objects in hgwebdir, ui object is enough.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1139
diff
changeset
|
78 get = u.config |
941 | 79 |
1181
4f5001f5b4c3
Make sure the repository names don't have slashes at the at or else in some
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents:
1180
diff
changeset
|
80 url = ('/'.join([req.env["REQUEST_URI"].split('?')[0], name]) |
1142
74d184a40a2e
Cleaned up hgweb.hgwebdir.run()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1141
diff
changeset
|
81 .replace("//", "/")) |
1022 | 82 |
1348 | 83 # update time with local timezone |
1524
0d47bb884330
hgweb: fix traceback by skipping invalid repo paths
TK Soh <teekaysoh@yahoo.com>
parents:
1511
diff
changeset
|
84 try: |
0d47bb884330
hgweb: fix traceback by skipping invalid repo paths
TK Soh <teekaysoh@yahoo.com>
parents:
1511
diff
changeset
|
85 d = (get_mtime(path), util.makedate()[1]) |
0d47bb884330
hgweb: fix traceback by skipping invalid repo paths
TK Soh <teekaysoh@yahoo.com>
parents:
1511
diff
changeset
|
86 except OSError: |
0d47bb884330
hgweb: fix traceback by skipping invalid repo paths
TK Soh <teekaysoh@yahoo.com>
parents:
1511
diff
changeset
|
87 continue |
1348 | 88 |
2173
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
89 contact = (get("ui", "username") or # preferred |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
90 get("web", "contact") or # deprecated |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
91 get("web", "author", "")) # also |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
92 description = get("web", "description", "") |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
93 name = get("web", "name", name) |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
94 row = dict(contact=contact or "unknown", |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
95 contact_sort=contact.upper() or "unknown", |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
96 name=name, |
2174
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
97 name_sort=name, |
1062 | 98 url=url, |
2173
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
99 description=description or "unknown", |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
100 description_sort=description.upper() or "unknown", |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
101 lastchange=d, |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
102 lastchange_sort=d[1]-d[0], |
2171
290534ee163c
Add download links to hgwebdir index page for allowed archive types.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2170
diff
changeset
|
103 archives=archivelist(u, "tip", url)) |
2174
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
104 if (not sortcolumn |
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
105 or (sortcolumn, descending) == self.repos_sorted): |
2173
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
106 # fast path for unsorted output |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
107 row['parity'] = parity |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
108 parity = 1 - parity |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
109 yield row |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
110 else: |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
111 rows.append((row["%s_sort" % sortcolumn], row)) |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
112 if rows: |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
113 rows.sort() |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
114 if descending: |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
115 rows.reverse() |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
116 for key, row in rows: |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
117 row['parity'] = parity |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
118 parity = 1 - parity |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
119 yield row |
941 | 120 |
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
|
121 virtual = req.env.get("PATH_INFO", "").strip('/') |
1142
74d184a40a2e
Cleaned up hgweb.hgwebdir.run()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1141
diff
changeset
|
122 if virtual: |
1141
033c968d7c66
Use ConfigParser only in hgwebdir.__init__()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1140
diff
changeset
|
123 real = dict(self.repos).get(virtual) |
033c968d7c66
Use ConfigParser only in hgwebdir.__init__()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1140
diff
changeset
|
124 if real: |
1554
68ec7b9e09a4
Catch IOErrors and RepoErrors when serving repositories via hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1545
diff
changeset
|
125 try: |
68ec7b9e09a4
Catch IOErrors and RepoErrors when serving repositories via hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1545
diff
changeset
|
126 hgweb(real).run(req) |
68ec7b9e09a4
Catch IOErrors and RepoErrors when serving repositories via hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1545
diff
changeset
|
127 except IOError, inst: |
68ec7b9e09a4
Catch IOErrors and RepoErrors when serving repositories via hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1545
diff
changeset
|
128 req.write(tmpl("error", error=inst.strerror)) |
68ec7b9e09a4
Catch IOErrors and RepoErrors when serving repositories via hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1545
diff
changeset
|
129 except hg.RepoError, inst: |
68ec7b9e09a4
Catch IOErrors and RepoErrors when serving repositories via hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1545
diff
changeset
|
130 req.write(tmpl("error", error=str(inst))) |
1123
457c23af92bd
Use a template for the error message.
Ollivier Robert <roberto@keltia.freenix.fr>
parents:
1122
diff
changeset
|
131 else: |
1159
b6f5a947e62e
Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents:
1143
diff
changeset
|
132 req.write(tmpl("notfound", repo=virtual)) |
1142
74d184a40a2e
Cleaned up hgweb.hgwebdir.run()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1141
diff
changeset
|
133 else: |
1793
83c6d8355909
Allow serving static files from hgwebdir to fix CSS and favicon.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1792
diff
changeset
|
134 if req.form.has_key('static'): |
1897
58b6784cf9f1
move hgweb.templatepath into templater
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1896
diff
changeset
|
135 static = os.path.join(templater.templatepath(), "static") |
1793
83c6d8355909
Allow serving static files from hgwebdir to fix CSS and favicon.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1792
diff
changeset
|
136 fname = req.form['static'][0] |
83c6d8355909
Allow serving static files from hgwebdir to fix CSS and favicon.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1792
diff
changeset
|
137 req.write(staticfile(static, fname) |
83c6d8355909
Allow serving static files from hgwebdir to fix CSS and favicon.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1792
diff
changeset
|
138 or tmpl("error", error="%r not found" % fname)) |
83c6d8355909
Allow serving static files from hgwebdir to fix CSS and favicon.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1792
diff
changeset
|
139 else: |
2173
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
140 sortable = ["name", "description", "contact", "lastchange"] |
2174
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
141 sortcolumn, descending = self.repos_sorted |
2173
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
142 if req.form.has_key('sort'): |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
143 sortcolumn = req.form['sort'][0] |
2174
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
144 descending = sortcolumn.startswith('-') |
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
145 if descending: |
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
146 sortcolumn = sortcolumn[1:] |
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
147 if sortcolumn not in sortable: |
3044a3fdae76
If default sorting is name, offer name-descending with one click.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2173
diff
changeset
|
148 sortcolumn = "" |
2173
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
149 |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
150 sort = [("sort_%s" % column, |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
151 "%s%s" % ((not descending and column == sortcolumn) |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
152 and "-" or "", column)) |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
153 for column in sortable] |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
154 req.write(tmpl("index", entries=entries, |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
155 sortcolumn=sortcolumn, descending=descending, |
d1943df604c4
Make hgwebdir columns sortable.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2171
diff
changeset
|
156 **dict(sort))) |