Mercurial > public > mercurial-scm > hg
annotate mercurial/hgweb/hgweb_mod.py @ 4164:5c1e18bb804c
hgweb: use the given revision in the name of the archive
If you ask for an archive in hgweb by tagname the directory in the archive
should include the tagname not the changeset-id.
author | Michael Gebetsroither <michael.geb@gmx.at> |
---|---|
date | Thu, 08 Mar 2007 22:36:12 +0100 |
parents | 49237d6ae97d |
children | 0d51eb296fb9 |
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 | 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> |
2859 | 4 # Copyright 2005, 2006 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 | |
3974
a3aa97171546
hgweb: fix unused import
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3973
diff
changeset
|
9 import os, mimetypes, re, zlib, mimetools, cStringIO, sys |
3877
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
3781
diff
changeset
|
10 import tempfile, urllib, bz2 |
2311
b832b6eb65ab
Moving hgweb.py into it's own module in preparation for breaking it up.
Eric Hopper <hopper@omnifarious.org>
parents:
2275
diff
changeset
|
11 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
|
12 from mercurial.i18n import gettext as _ |
3877
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
3781
diff
changeset
|
13 from mercurial import mdiff, ui, hg, util, archival, streamclone, patch |
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
3781
diff
changeset
|
14 from mercurial import revlog, templater |
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
3781
diff
changeset
|
15 from common import get_mtime, staticfile, style_map |
138 | 16 |
2356
2db831b33e8f
Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents:
2355
diff
changeset
|
17 def _up(p): |
1063
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
18 if p[0] != "/": |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
19 p = "/" + p |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
20 if p[-1] == "/": |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
21 p = p[:-1] |
138 | 22 up = os.path.dirname(p) |
23 if up == "/": | |
24 return "/" | |
25 return up + "/" | |
131 | 26 |
3422
0eba7e76cd02
Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents:
3409
diff
changeset
|
27 def revnavgen(pos, pagelen, limit, nodefunc): |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
28 def seq(factor, limit=None): |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
29 if limit: |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
30 yield limit |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
31 if limit >= 20 and limit <= 40: |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
32 yield 50 |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
33 else: |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
34 yield 1 * factor |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
35 yield 3 * factor |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
36 for f in seq(factor * 10): |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
37 yield f |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
38 |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
39 def nav(**map): |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
40 l = [] |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
41 last = 0 |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
42 for f in seq(1, pagelen): |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
43 if f < pagelen or f <= last: |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
44 continue |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
45 if f > limit: |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
46 break |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
47 last = f |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
48 if pos + f < limit: |
3422
0eba7e76cd02
Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents:
3409
diff
changeset
|
49 l.append(("+%d" % f, hex(nodefunc(pos + f).node()))) |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
50 if pos - f >= 0: |
3422
0eba7e76cd02
Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents:
3409
diff
changeset
|
51 l.insert(0, ("-%d" % f, hex(nodefunc(pos - f).node()))) |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
52 |
3424
9b1c126b74cd
Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents:
3423
diff
changeset
|
53 try: |
9b1c126b74cd
Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents:
3423
diff
changeset
|
54 yield {"label": "(0)", "node": hex(nodefunc('0').node())} |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
55 |
3424
9b1c126b74cd
Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents:
3423
diff
changeset
|
56 for label, node in l: |
9b1c126b74cd
Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents:
3423
diff
changeset
|
57 yield {"label": label, "node": node} |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
58 |
3427
6bd676ee8b99
Explicitly use "tip" in revision navigation.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3424
diff
changeset
|
59 yield {"label": "tip", "node": "tip"} |
3424
9b1c126b74cd
Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents:
3423
diff
changeset
|
60 except hg.RepoError: |
9b1c126b74cd
Fix test-oldcgi after navbar update
Brendan Cully <brendan@kublai.com>
parents:
3423
diff
changeset
|
61 pass |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
62 |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
63 return nav |
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
64 |
1559
59b3639df0a9
Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents:
1554
diff
changeset
|
65 class hgweb(object): |
987 | 66 def __init__(self, repo, name=None): |
67 if type(repo) == type(""): | |
3557
f7dee427cd14
Turn of "Not trusting file" logging when running hgweb and hgwebdir
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3555
diff
changeset
|
68 self.repo = hg.repository(ui.ui(report_untrusted=False), repo) |
987 | 69 else: |
70 self.repo = repo | |
133
fb84d3e71042
added template support for some hgweb output, also, template files for
jake@edge2.net
parents:
132
diff
changeset
|
71 |
258 | 72 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
|
73 self.reponame = name |
1078 | 74 self.archives = 'zip', 'gz', 'bz2' |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
75 self.stripecount = 1 |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
76 # a repo owner may set web.templates in .hg/hgrc to get any file |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
77 # readable by the user running the CGI script |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
78 self.templatepath = self.config("web", "templates", |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
79 templater.templatepath(), |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
80 untrusted=False) |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
81 |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
82 # The CGI scripts are often run by a user different from the repo owner. |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
83 # Trust the settings from the .hg/hgrc files by default. |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
84 def config(self, section, name, default=None, untrusted=True): |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
85 return self.repo.ui.config(section, name, default, |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
86 untrusted=untrusted) |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
87 |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
88 def configbool(self, section, name, default=False, untrusted=True): |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
89 return self.repo.ui.configbool(section, name, default, |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
90 untrusted=untrusted) |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
91 |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
92 def configlist(self, section, name, default=None, untrusted=True): |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
93 return self.repo.ui.configlist(section, name, default, |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
94 untrusted=untrusted) |
131 | 95 |
258 | 96 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
|
97 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
|
98 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
|
99 self.mtime = mtime |
1213 | 100 self.repo = hg.repository(self.repo.ui, self.repo.root) |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
101 self.maxchanges = int(self.config("web", "maxchanges", 10)) |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
102 self.stripecount = int(self.config("web", "stripes", 1)) |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
103 self.maxshortchanges = int(self.config("web", "maxshortchanges", 60)) |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
104 self.maxfiles = int(self.config("web", "maxfiles", 10)) |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
105 self.allowpull = self.configbool("web", "allowpull", True) |
258 | 106 |
1498
78590fb4a82b
hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1473
diff
changeset
|
107 def archivelist(self, nodeid): |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
108 allowed = self.configlist("web", "allow_archive") |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
109 for i, spec in self.archive_specs.iteritems(): |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
110 if i in allowed or self.configbool("web", "allow" + i): |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
111 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
|
112 |
138 | 113 def listfilediffs(self, files, changeset): |
114 for f in files[:self.maxfiles]: | |
1062 | 115 yield self.t("filedifflink", node=hex(changeset), file=f) |
138 | 116 if len(files) > self.maxfiles: |
117 yield self.t("fileellipses") | |
118 | |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
119 def siblings(self, siblings=[], hiderev=None, **args): |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
120 siblings = [s for s in siblings if s.node() != nullid] |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
121 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
|
122 return |
1606
ba625c8083d8
- duplicate the parent link logic to show child links
Muli Ben-Yehuda <mulix@mulix.org>
parents:
1579
diff
changeset
|
123 for s in siblings: |
3392
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
124 d = {'node': hex(s.node()), 'rev': s.rev()} |
3394
be628f1cd3f4
hgweb: really fix parent/child rename links
Brendan Cully <brendan@kublai.com>
parents:
3392
diff
changeset
|
125 if hasattr(s, 'path'): |
be628f1cd3f4
hgweb: really fix parent/child rename links
Brendan Cully <brendan@kublai.com>
parents:
3392
diff
changeset
|
126 d['file'] = s.path() |
3392
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
127 d.update(args) |
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
128 yield d |
569
3e347929f5f9
[PATCH 1/5]: cleaning the template parent management in hgweb
mpm@selenic.com
parents:
568
diff
changeset
|
129 |
1653
e8a3df8b62b3
hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents:
1650
diff
changeset
|
130 def renamelink(self, fl, node): |
e8a3df8b62b3
hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents:
1650
diff
changeset
|
131 r = fl.renamed(node) |
e8a3df8b62b3
hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents:
1650
diff
changeset
|
132 if r: |
e8a3df8b62b3
hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents:
1650
diff
changeset
|
133 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
|
134 return [] |
e8a3df8b62b3
hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents:
1650
diff
changeset
|
135 |
568 | 136 def showtag(self, t1, node=nullid, **args): |
137 for t in self.repo.nodetags(node): | |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3612
diff
changeset
|
138 yield self.t(t1, tag=t, **args) |
568 | 139 |
138 | 140 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
|
141 def filterfiles(filters, files): |
1627
11cd38286fdb
fix for hgweb.filterfiles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1626
diff
changeset
|
142 l = [x for x in files if x in filters] |
515 | 143 |
1626
f2b1df3dbcbb
make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1619
diff
changeset
|
144 for t in filters: |
1627
11cd38286fdb
fix for hgweb.filterfiles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1626
diff
changeset
|
145 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
|
146 t += os.sep |
f2b1df3dbcbb
make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1619
diff
changeset
|
147 l += [x for x in files if x.startswith(t)] |
138 | 148 return l |
131 | 149 |
172
e9b1147db448
hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents:
168
diff
changeset
|
150 parity = [0] |
e9b1147db448
hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents:
168
diff
changeset
|
151 def diffblock(diff, f, fn): |
e9b1147db448
hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents:
168
diff
changeset
|
152 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
|
153 lines=prettyprintlines(diff), |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
154 parity=parity[0], |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
155 file=f, |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
156 filenode=hex(fn or nullid)) |
172
e9b1147db448
hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents:
168
diff
changeset
|
157 parity[0] = 1 - parity[0] |
515 | 158 |
172
e9b1147db448
hgweb: alternating colors for multifile diffs
mpm@selenic.com
parents:
168
diff
changeset
|
159 def prettyprintlines(diff): |
138 | 160 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
|
161 if l.startswith('+'): |
1062 | 162 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
|
163 elif l.startswith('-'): |
1062 | 164 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
|
165 elif l.startswith('@'): |
1062 | 166 yield self.t("difflineat", line=l) |
138 | 167 else: |
1062 | 168 yield self.t("diffline", line=l) |
131 | 169 |
138 | 170 r = self.repo |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
171 c1 = r.changectx(node1) |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
172 c2 = r.changectx(node2) |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
173 date1 = util.datestr(c1.date()) |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
174 date2 = util.datestr(c2.date()) |
131 | 175 |
2876
cf86bbb8ed68
hgweb: repo.changes() is now called repo.status()
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents:
2874
diff
changeset
|
176 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
|
177 if files: |
1626
f2b1df3dbcbb
make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1619
diff
changeset
|
178 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
|
179 (modified, added, removed)) |
131 | 180 |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
181 diffopts = patch.diffopts(self.repo.ui, untrusted=True) |
1618
ff339dd21976
Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1606
diff
changeset
|
182 for f in modified: |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
183 to = c1.filectx(f).data() |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
184 tn = c2.filectx(f).data() |
1637 | 185 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f, |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2859
diff
changeset
|
186 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
|
187 for f in added: |
265
7ca05593bd30
hgweb: fix non-existent source or destination for diff
mpm@selenic.com
parents:
258
diff
changeset
|
188 to = None |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
189 tn = c2.filectx(f).data() |
1637 | 190 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f, |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2859
diff
changeset
|
191 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
|
192 for f in removed: |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
193 to = c1.filectx(f).data() |
265
7ca05593bd30
hgweb: fix non-existent source or destination for diff
mpm@selenic.com
parents:
258
diff
changeset
|
194 tn = None |
1637 | 195 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f, |
2874
4ec58b157265
refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2859
diff
changeset
|
196 opts=diffopts), f, tn) |
131 | 197 |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
198 def changelog(self, ctx, shortlog=False): |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
199 def changelist(**map): |
142 | 200 parity = (start - end) & 1 |
138 | 201 cl = self.repo.changelog |
202 l = [] # build a list in forward order for efficiency | |
3473
0e68608bd11d
use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3445
diff
changeset
|
203 for i in xrange(start, end): |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
204 ctx = self.repo.changectx(i) |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
205 n = ctx.node() |
131 | 206 |
1063
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
207 l.insert(0, {"parity": parity, |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
208 "author": ctx.user(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
209 "parent": self.siblings(ctx.parents(), i - 1), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
210 "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
|
211 "changelogtag": self.showtag("changelogtag",n), |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
212 "desc": ctx.description(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
213 "date": ctx.date(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
214 "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
|
215 "rev": i, |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
216 "node": hex(n)}) |
142 | 217 parity = 1 - parity |
138 | 218 |
1063
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
219 for e in l: |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
220 yield e |
131 | 221 |
2684
783220e5d2d1
[hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
2683
diff
changeset
|
222 maxchanges = shortlog and self.maxshortchanges or self.maxchanges |
168 | 223 cl = self.repo.changelog |
224 count = cl.count() | |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
225 pos = ctx.rev() |
2684
783220e5d2d1
[hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
2683
diff
changeset
|
226 start = max(0, pos - maxchanges + 1) |
783220e5d2d1
[hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
2683
diff
changeset
|
227 end = min(count, start + maxchanges) |
351 | 228 pos = end - 1 |
138 | 229 |
3422
0eba7e76cd02
Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents:
3409
diff
changeset
|
230 changenav = revnavgen(pos, maxchanges, count, self.repo.changectx) |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
231 |
2684
783220e5d2d1
[hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
2683
diff
changeset
|
232 yield self.t(shortlog and 'shortlog' or 'changelog', |
1062 | 233 changenav=changenav, |
3205 | 234 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
|
235 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
|
236 archives=self.archivelist("tip")) |
131 | 237 |
538 | 238 def search(self, query): |
239 | |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
240 def changelist(**map): |
538 | 241 cl = self.repo.changelog |
242 count = 0 | |
243 qw = query.lower().split() | |
244 | |
245 def revgen(): | |
3473
0e68608bd11d
use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3445
diff
changeset
|
246 for i in xrange(cl.count() - 1, 0, -100): |
538 | 247 l = [] |
3473
0e68608bd11d
use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3445
diff
changeset
|
248 for j in xrange(max(0, i - 100), i): |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
249 ctx = self.repo.changectx(j) |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
250 l.append(ctx) |
1023 | 251 l.reverse() |
538 | 252 for e in l: |
253 yield e | |
254 | |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
255 for ctx in revgen(): |
538 | 256 miss = 0 |
257 for q in qw: | |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
258 if not (q in ctx.user().lower() or |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
259 q in ctx.description().lower() or |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
260 q in " ".join(ctx.files()[:20]).lower()): |
538 | 261 miss = 1 |
262 break | |
1063
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
263 if miss: |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
264 continue |
538 | 265 |
266 count += 1 | |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
267 n = ctx.node() |
538 | 268 |
1063
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
269 yield self.t('searchentry', |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
270 parity=self.stripes(count), |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
271 author=ctx.user(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
272 parent=self.siblings(ctx.parents()), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
273 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
|
274 changelogtag=self.showtag("changelogtag",n), |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
275 desc=ctx.description(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
276 date=ctx.date(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
277 files=self.listfilediffs(ctx.files(), n), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
278 rev=ctx.rev(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
279 node=hex(n)) |
538 | 280 |
1063
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
281 if count >= self.maxchanges: |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
282 break |
538 | 283 |
284 cl = self.repo.changelog | |
285 | |
286 yield self.t('search', | |
1062 | 287 query=query, |
3205 | 288 node=hex(cl.tip()), |
1062 | 289 entries=changelist) |
538 | 290 |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
291 def changeset(self, ctx): |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
292 n = ctx.node() |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
293 parents = ctx.parents() |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
294 p1 = parents[0].node() |
515 | 295 |
133
fb84d3e71042
added template support for some hgweb output, also, template files for
jake@edge2.net
parents:
132
diff
changeset
|
296 files = [] |
3179
76ab39df0917
gitweb: cosmetic fixes.
Brendan Cully <brendan@kublai.com>
parents:
3178
diff
changeset
|
297 parity = 0 |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
298 for f in ctx.files(): |
138 | 299 files.append(self.t("filenodelink", |
3206
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
300 node=hex(n), file=f, |
3179
76ab39df0917
gitweb: cosmetic fixes.
Brendan Cully <brendan@kublai.com>
parents:
3178
diff
changeset
|
301 parity=parity)) |
76ab39df0917
gitweb: cosmetic fixes.
Brendan Cully <brendan@kublai.com>
parents:
3178
diff
changeset
|
302 parity = 1 - parity |
138 | 303 |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
304 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
|
305 yield self.diff(p1, n, None) |
131 | 306 |
138 | 307 yield self.t('changeset', |
1062 | 308 diff=diff, |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
309 rev=ctx.rev(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
310 node=hex(n), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
311 parent=self.siblings(parents), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
312 child=self.siblings(ctx.children()), |
1062 | 313 changesettag=self.showtag("changesettag",n), |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
314 author=ctx.user(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
315 desc=ctx.description(), |
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
316 date=ctx.date(), |
1076
01db658cc78a
tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents:
1073
diff
changeset
|
317 files=files, |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
318 archives=self.archivelist(hex(n))) |
131 | 319 |
3206
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
320 def filelog(self, fctx): |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
321 f = fctx.path() |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
322 fl = fctx.filelog() |
138 | 323 count = fl.count() |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
324 pagelen = self.maxshortchanges |
3409
1ae738bacf74
Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3407
diff
changeset
|
325 pos = fctx.filerev() |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3612
diff
changeset
|
326 start = max(0, pos - pagelen + 1) |
3409
1ae738bacf74
Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3407
diff
changeset
|
327 end = min(count, start + pagelen) |
1ae738bacf74
Fixed page overlap for file revision links in hgweb.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3407
diff
changeset
|
328 pos = end - 1 |
138 | 329 |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
330 def entries(**map): |
138 | 331 l = [] |
142 | 332 parity = (count - 1) & 1 |
515 | 333 |
3473
0e68608bd11d
use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3445
diff
changeset
|
334 for i in xrange(start, end): |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
335 ctx = fctx.filectx(i) |
138 | 336 n = fl.node(i) |
133
fb84d3e71042
added template support for some hgweb output, also, template files for
jake@edge2.net
parents:
132
diff
changeset
|
337 |
978
ea67e5b37043
hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
977
diff
changeset
|
338 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
|
339 "filerev": i, |
ea67e5b37043
hgweb: Changed file revision page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
977
diff
changeset
|
340 "file": f, |
3206
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
341 "node": hex(ctx.node()), |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
342 "author": ctx.user(), |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
343 "date": ctx.date(), |
1653
e8a3df8b62b3
hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents:
1650
diff
changeset
|
344 "rename": self.renamelink(fl, n), |
3392
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
345 "parent": self.siblings(fctx.parents()), |
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
346 "child": self.siblings(fctx.children()), |
3206
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
347 "desc": ctx.description()}) |
142 | 348 parity = 1 - parity |
138 | 349 |
1063
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
350 for e in l: |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
351 yield e |
138 | 352 |
3422
0eba7e76cd02
Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents:
3409
diff
changeset
|
353 nodefunc = lambda x: fctx.filectx(fileid=x) |
0eba7e76cd02
Convert changenav bar from revisions to hashes (closes issue189)
Brendan Cully <brendan@kublai.com>
parents:
3409
diff
changeset
|
354 nav = revnavgen(pos, pagelen, count, nodefunc) |
3407
03e7e8958a27
hgweb: hoist changenav up, and use it in the filelog
Brendan Cully <brendan@kublai.com>
parents:
3406
diff
changeset
|
355 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:
3406
diff
changeset
|
356 entries=entries) |
131 | 357 |
3206
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
358 def filerevision(self, fctx): |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
359 f = fctx.path() |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
360 text = fctx.data() |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
361 fl = fctx.filelog() |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
362 n = fctx.filenode() |
142 | 363 |
1411
e2ba788545bf
hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents:
1409
diff
changeset
|
364 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
|
365 rawtext = text |
e2ba788545bf
hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents:
1409
diff
changeset
|
366 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
|
367 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
|
368 text = "(binary:%s)" % mt |
2095
0bf2a9e5eff1
Don't send "Content-Type: none"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
1964
diff
changeset
|
369 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
|
370 |
142 | 371 def lines(): |
372 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
|
373 yield {"line": t, |
5d5ab159d197
hgweb: Changed file page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
975
diff
changeset
|
374 "linenumber": "% 6d" % (l + 1), |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
375 "parity": self.stripes(l)} |
359 | 376 |
1063
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
377 yield self.t("filerevision", |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
378 file=f, |
2356
2db831b33e8f
Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents:
2355
diff
changeset
|
379 path=_up(f), |
1062 | 380 text=lines(), |
1411
e2ba788545bf
hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents:
1409
diff
changeset
|
381 raw=rawtext, |
e2ba788545bf
hgweb: make viewing of non-text work in hgweb
Matt Mackall <mpm@selenic.com>
parents:
1409
diff
changeset
|
382 mimetype=mt, |
3206
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
383 rev=fctx.rev(), |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
384 node=hex(fctx.node()), |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
385 author=fctx.user(), |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
386 date=fctx.date(), |
3395
3c8f0dc9a6d3
hgweb: add changeset description to file revision page
Brendan Cully <brendan@kublai.com>
parents:
3394
diff
changeset
|
387 desc=fctx.description(), |
3392
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
388 parent=self.siblings(fctx.parents()), |
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
389 child=self.siblings(fctx.children()), |
1653
e8a3df8b62b3
hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents:
1650
diff
changeset
|
390 rename=self.renamelink(fl, n), |
3206
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
391 permissions=fctx.manifest().execf(f)) |
138 | 392 |
3206
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
393 def fileannotate(self, fctx): |
79fd7a92f3e2
hgweb: kill off #filenode#
Brendan Cully <brendan@kublai.com>
parents:
3205
diff
changeset
|
394 f = fctx.path() |
3173
3466bd7b9754
hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents:
3131
diff
changeset
|
395 n = fctx.filenode() |
3466bd7b9754
hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents:
3131
diff
changeset
|
396 fl = fctx.filelog() |
131 | 397 |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
398 def annotate(**map): |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
399 parity = 0 |
142 | 400 last = None |
3175
fc379b91f602
hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents:
3173
diff
changeset
|
401 for f, l in fctx.annotate(follow=True): |
fc379b91f602
hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents:
3173
diff
changeset
|
402 fnode = f.filenode() |
3173
3466bd7b9754
hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents:
3131
diff
changeset
|
403 name = self.repo.ui.shortuser(f.user()) |
131 | 404 |
3175
fc379b91f602
hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents:
3173
diff
changeset
|
405 if last != fnode: |
142 | 406 parity = 1 - parity |
3175
fc379b91f602
hgweb: make annotate line revisions point to annotation for that rev
Brendan Cully <brendan@kublai.com>
parents:
3173
diff
changeset
|
407 last = fnode |
142 | 408 |
977
289975641886
hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
976
diff
changeset
|
409 yield {"parity": parity, |
3178
0d0d7317bbc8
hgweb: yield filenode as well as node in annotate, use filenode in annotateline
Brendan Cully <brendan@kublai.com>
parents:
3177
diff
changeset
|
410 "node": hex(f.node()), |
3403
372999405787
Back out d8eba1c3ce9b and a004164dbeef
Brendan Cully <brendan@kublai.com>
parents:
3402
diff
changeset
|
411 "rev": f.rev(), |
977
289975641886
hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
976
diff
changeset
|
412 "author": name, |
3173
3466bd7b9754
hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents:
3131
diff
changeset
|
413 "file": f.path(), |
977
289975641886
hgweb: Changed annotate page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
976
diff
changeset
|
414 "line": l} |
138 | 415 |
416 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
|
417 file=f, |
58eefdfb8472
Some more spacing/indentation/linebreak cleanups to hgweb.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
418 annotate=annotate, |
2356
2db831b33e8f
Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents:
2355
diff
changeset
|
419 path=_up(f), |
3173
3466bd7b9754
hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents:
3131
diff
changeset
|
420 rev=fctx.rev(), |
3177
8683c7a637ad
hgweb: fix changeset link in annotate view.
Brendan Cully <brendan@kublai.com>
parents:
3175
diff
changeset
|
421 node=hex(fctx.node()), |
3173
3466bd7b9754
hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents:
3131
diff
changeset
|
422 author=fctx.user(), |
3466bd7b9754
hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents:
3131
diff
changeset
|
423 date=fctx.date(), |
3391
defadc26e674
hgweb: add changeset description to annotate page
Brendan Cully <brendan@kublai.com>
parents:
3382
diff
changeset
|
424 desc=fctx.description(), |
1653
e8a3df8b62b3
hgweb: show copy/rename links in file history
Matt Mackall <mpm@selenic.com>
parents:
1650
diff
changeset
|
425 rename=self.renamelink(fl, n), |
3392
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
426 parent=self.siblings(fctx.parents()), |
17894d1d9eea
hgweb: fix parent/child links across renames
Brendan Cully <brendan@kublai.com>
parents:
3391
diff
changeset
|
427 child=self.siblings(fctx.children()), |
3173
3466bd7b9754
hgweb: use filectx.annotate instead of filelog
Brendan Cully <brendan@kublai.com>
parents:
3131
diff
changeset
|
428 permissions=fctx.manifest().execf(f)) |
136 | 429 |
3205 | 430 def manifest(self, ctx, path): |
431 mf = ctx.manifest() | |
432 node = ctx.node() | |
138 | 433 |
434 files = {} | |
515 | 435 |
3595
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
436 if path and path[-1] != "/": |
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
437 path += "/" |
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
438 l = len(path) |
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
439 abspath = "/" + path |
131 | 440 |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3612
diff
changeset
|
441 for f, n in mf.items(): |
3595
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
442 if f[:l] != path: |
138 | 443 continue |
444 remain = f[l:] | |
445 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
|
446 short = remain[:remain.index("/") + 1] # bleah |
142 | 447 files[short] = (f, None) |
138 | 448 else: |
449 short = os.path.basename(remain) | |
450 files[short] = (f, n) | |
131 | 451 |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
452 def filelist(**map): |
142 | 453 parity = 0 |
138 | 454 fl = files.keys() |
455 fl.sort() | |
456 for f in fl: | |
457 full, fnode = files[f] | |
979
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
458 if not fnode: |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
459 continue |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
460 |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
461 yield {"file": full, |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
462 "parity": self.stripes(parity), |
979
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
463 "basename": f, |
3305
0708bdb4987a
hgweb: add file sizes to manifest browsing
Matt Mackall <mpm@selenic.com>
parents:
3304
diff
changeset
|
464 "size": ctx.filectx(full).size(), |
2857
18cf5349a361
Fix some bugs introduced during the manifest refactoring
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2840
diff
changeset
|
465 "permissions": mf.execf(full)} |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
466 parity += 1 |
138 | 467 |
979
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
468 def dirlist(**map): |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
469 parity = 0 |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
470 fl = files.keys() |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
471 fl.sort() |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
472 for f in fl: |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
473 full, fnode = files[f] |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
474 if fnode: |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
475 continue |
87d40e085e08
hgweb: Changed manifest page to list format syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
978
diff
changeset
|
476 |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
477 yield {"parity": self.stripes(parity), |
3595
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
478 "path": os.path.join(abspath, f), |
980 | 479 "basename": f[:-1]} |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
480 parity += 1 |
982
8d2e24bae760
hgweb: convert index entries to list expansion style
mpm@selenic.com
parents:
981
diff
changeset
|
481 |
138 | 482 yield self.t("manifest", |
3205 | 483 rev=ctx.rev(), |
1062 | 484 node=hex(node), |
3595
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
485 path=abspath, |
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
486 up=_up(abspath), |
1062 | 487 fentries=filelist, |
1498
78590fb4a82b
hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1473
diff
changeset
|
488 dentries=dirlist, |
78590fb4a82b
hgweb: Added archive download buttons to manifest page.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1473
diff
changeset
|
489 archives=self.archivelist(hex(node))) |
131 | 490 |
168 | 491 def tags(self): |
343 | 492 i = self.repo.tagslist() |
493 i.reverse() | |
168 | 494 |
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
|
495 def entries(notip=False, **map): |
168 | 496 parity = 0 |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3612
diff
changeset
|
497 for k, n in i: |
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3612
diff
changeset
|
498 if notip and k == "tip": |
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3612
diff
changeset
|
499 continue |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
500 yield {"parity": self.stripes(parity), |
974
aedb47764f29
Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
938
diff
changeset
|
501 "tag": k, |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
502 "date": self.repo.changectx(n).date(), |
974
aedb47764f29
Added support for #foo%bar# syntax
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
938
diff
changeset
|
503 "node": hex(n)} |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
504 parity += 1 |
168 | 505 |
506 yield self.t("tags", | |
3205 | 507 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
|
508 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
|
509 entriesnotip=lambda **x: entries(True, **x)) |
168 | 510 |
1572
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
511 def summary(self): |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
512 i = self.repo.tagslist() |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
513 i.reverse() |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
514 |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
515 def tagentries(**map): |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
516 parity = 0 |
1579
85803ec2daab
Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1575
diff
changeset
|
517 count = 0 |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3612
diff
changeset
|
518 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
|
519 if k == "tip": # skip tip |
1572
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
520 continue; |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
521 |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
522 count += 1 |
1579
85803ec2daab
Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1575
diff
changeset
|
523 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
|
524 break; |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
525 |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
526 yield self.t("tagentry", |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
527 parity=self.stripes(parity), |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
528 tag=k, |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
529 node=hex(n), |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
530 date=self.repo.changectx(n).date()) |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
531 parity += 1 |
1579
85803ec2daab
Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1575
diff
changeset
|
532 |
3499
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
533 def heads(**map): |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
534 parity = 0 |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
535 count = 0 |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
536 |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
537 for node in self.repo.heads(): |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
538 count += 1 |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
539 if count > 10: |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
540 break; |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
541 |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
542 ctx = self.repo.changectx(node) |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
543 |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
544 yield {'parity': self.stripes(parity), |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
545 'branch': ctx.branch(), |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
546 'node': hex(node), |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
547 'date': ctx.date()} |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
548 parity += 1 |
e0db0b7934f2
hgweb: add heads to gitweb summary
Brendan Cully <brendan@kublai.com>
parents:
3488
diff
changeset
|
549 |
1572
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
550 def changelist(**map): |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
551 parity = 0 |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
552 l = [] # build a list in forward order for efficiency |
3473
0e68608bd11d
use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3445
diff
changeset
|
553 for i in xrange(start, end): |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
554 ctx = self.repo.changectx(i) |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
555 hn = hex(ctx.node()) |
1572
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
556 |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
557 l.insert(0, self.t( |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
558 'shortlogentry', |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
559 parity=parity, |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
560 author=ctx.user(), |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
561 desc=ctx.description(), |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
562 date=ctx.date(), |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
563 rev=i, |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
564 node=hn)) |
1572
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
565 parity = 1 - parity |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
566 |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
567 yield l |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
568 |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
569 cl = self.repo.changelog |
1572
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
570 count = cl.count() |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
571 start = max(0, count - self.maxchanges) |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
572 end = min(count, start + self.maxchanges) |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
573 |
385b8872b8e3
[hgweb] Initial import of the "gitweb" style
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1559
diff
changeset
|
574 yield self.t("summary", |
3973
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
575 desc=self.config("web", "description", "unknown"), |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
576 owner=(self.config("ui", "username") or # preferred |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
577 self.config("web", "contact") or # deprecated |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
578 self.config("web", "author", "unknown")), # also |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
579 lastchange=cl.read(cl.tip())[2], |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
580 tags=tagentries, |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
581 heads=heads, |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
582 shortlog=changelist, |
b485a4459d96
hgweb: use contexts, fix coding style
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3936
diff
changeset
|
583 node=hex(cl.tip()), |
2683
8a798185809d
[hgweb] Fixed up gitweb templates
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
2622
diff
changeset
|
584 archives=self.archivelist("tip")) |
1579
85803ec2daab
Remove tabs, and trailing whitespace from hgweb.py
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1575
diff
changeset
|
585 |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
586 def filediff(self, fctx): |
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
587 n = fctx.node() |
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
588 path = fctx.path() |
3406
970b2d6de3b3
hgweb: link to file parents in filediff, rather than changeset parents
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
589 parents = fctx.parents() |
970b2d6de3b3
hgweb: link to file parents in filediff, rather than changeset parents
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
590 p1 = parents and parents[0].node() or nullid |
515 | 591 |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
592 def diff(**map): |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
593 yield self.diff(p1, n, [path]) |
131 | 594 |
138 | 595 yield self.t("filediff", |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
596 file=path, |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
597 node=hex(n), |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
598 rev=fctx.rev(), |
3208
e7b7906cc47e
hgweb: teach siblings and callers to use contexts
Brendan Cully <brendan@kublai.com>
parents:
3206
diff
changeset
|
599 parent=self.siblings(parents), |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
600 child=self.siblings(fctx.children()), |
1062 | 601 diff=diff) |
515 | 602 |
2113
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
603 archive_specs = { |
2361
d3adb454c5a9
Fix automatic decompression of tarballs with Firefox.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2359
diff
changeset
|
604 '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
|
605 '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
|
606 'zip': ('application/zip', 'zip', '.zip', None), |
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
607 } |
1076
01db658cc78a
tarball support v0.3
Wojciech Milkowski <wmilkowski@interia.pl>
parents:
1073
diff
changeset
|
608 |
4164
5c1e18bb804c
hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents:
4096
diff
changeset
|
609 def archive(self, req, id, type_): |
2113
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
610 reponame = re.sub(r"\W+", "-", os.path.basename(self.reponame)) |
4164
5c1e18bb804c
hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents:
4096
diff
changeset
|
611 cnode = self.repo.lookup(id) |
5c1e18bb804c
hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents:
4096
diff
changeset
|
612 arch_version = id |
5c1e18bb804c
hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents:
4096
diff
changeset
|
613 if cnode == id: |
5c1e18bb804c
hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents:
4096
diff
changeset
|
614 arch_version = short(cnode) |
5c1e18bb804c
hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents:
4096
diff
changeset
|
615 name = "%s-%s" % (reponame, arch_version) |
2394
a8f1049d1d2d
hgweb: fix errors and warnings found by pychecker
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2391
diff
changeset
|
616 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
|
617 headers = [('Content-type', mimetype), |
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
618 ('Content-disposition', 'attachment; filename=%s%s' % |
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
619 (name, extension))] |
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
620 if encoding: |
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
621 headers.append(('Content-encoding', encoding)) |
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
622 req.header(headers) |
633d733e7b11
make hgweb use new archival module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2103
diff
changeset
|
623 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
|
624 |
138 | 625 # add tags to things |
626 # tags -> list of changesets corresponding to tags | |
627 # find tag, changeset, file | |
131 | 628 |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
629 def cleanpath(self, path): |
3595
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
630 path = path.lstrip('/') |
3382
80721b86a448
hgweb: fix path cleaning
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3363
diff
changeset
|
631 return util.canonpath(self.repo.root, '', path) |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
632 |
2535
b8ccf6386db7
Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents:
2534
diff
changeset
|
633 def run(self): |
2538
f4b7d71c1c60
Cleanup hgweb and hgwebdir's run method a bit.
Eric Hopper <hopper@omnifarious.org>
parents:
2535
diff
changeset
|
634 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
|
635 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
|
636 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
|
637 from request import wsgiapplication |
b8ccf6386db7
Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents:
2534
diff
changeset
|
638 def make_web_app(): |
2538
f4b7d71c1c60
Cleanup hgweb and hgwebdir's run method a bit.
Eric Hopper <hopper@omnifarious.org>
parents:
2535
diff
changeset
|
639 return self |
2535
b8ccf6386db7
Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents:
2534
diff
changeset
|
640 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
|
641 |
b8ccf6386db7
Arrange for old copies of CGI scripts to still work.
Eric Hopper <hopper@omnifarious.org>
parents:
2534
diff
changeset
|
642 def run_wsgi(self, req): |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
643 def header(**map): |
3781
713e35dcc321
hgweb: report detected character set
Matt Mackall <mpm@selenic.com>
parents:
3673
diff
changeset
|
644 header_file = cStringIO.StringIO( |
3882
9c8488490724
Set charset encoding for hgwebdir, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3781
diff
changeset
|
645 ''.join(self.t("header", encoding=util._encoding, **map))) |
2514
419c42223bee
Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents:
2509
diff
changeset
|
646 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
|
647 req.header(msg.items()) |
419c42223bee
Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents:
2509
diff
changeset
|
648 yield header_file.read() |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
649 |
2534
d5a3cc6520d5
Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents:
2514
diff
changeset
|
650 def rawfileheader(**map): |
d5a3cc6520d5
Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents:
2514
diff
changeset
|
651 req.header([('Content-type', map['mimetype']), |
d5a3cc6520d5
Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents:
2514
diff
changeset
|
652 ('Content-disposition', 'filename=%s' % map['file']), |
d5a3cc6520d5
Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents:
2514
diff
changeset
|
653 ('Content-length', str(len(map['raw'])))]) |
d5a3cc6520d5
Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents:
2514
diff
changeset
|
654 yield '' |
d5a3cc6520d5
Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents:
2514
diff
changeset
|
655 |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
656 def footer(**map): |
3488
8f02223662c8
hgweb: make #motd# available for all templates
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
657 yield self.t("footer", **map) |
8f02223662c8
hgweb: make #motd# available for all templates
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
658 |
8f02223662c8
hgweb: make #motd# available for all templates
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
659 def motd(**map): |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
660 yield self.config("web", "motd", "") |
1409
964baa35faf8
hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents:
1407
diff
changeset
|
661 |
1406
34cb3957d875
hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1402
diff
changeset
|
662 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
|
663 shortcuts = { |
1409
964baa35faf8
hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents:
1407
diff
changeset
|
664 'cl': [('cmd', ['changelog']), ('rev', None)], |
2684
783220e5d2d1
[hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
2683
diff
changeset
|
665 '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
|
666 '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
|
667 '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
|
668 '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
|
669 '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
|
670 '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
|
671 '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
|
672 '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
|
673 '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
|
674 'tip': [('cmd', ['changeset']), ('node', ['tip'])], |
1777
a2316878f19d
[hgweb] Static content serving
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents:
1703
diff
changeset
|
675 '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
|
676 } |
1409
964baa35faf8
hgweb: add shortcuts for all the web commands / fix empty arg bug
Matt Mackall <mpm@selenic.com>
parents:
1407
diff
changeset
|
677 |
1406
34cb3957d875
hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1402
diff
changeset
|
678 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
|
679 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
|
680 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
|
681 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
|
682 value = form[k] |
34cb3957d875
hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1402
diff
changeset
|
683 form[name] = value |
34cb3957d875
hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1402
diff
changeset
|
684 del form[k] |
857
41b344235bb7
[PATCH] Propagate the template map though recursively
Jeff Sipek <jeffpc@optonline.net>
parents:
839
diff
changeset
|
685 |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
686 def rewrite_request(req): |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
687 '''translate new web interface to traditional format''' |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
688 |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
689 def spliturl(req): |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
690 def firstitem(query): |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
691 return query.split('&', 1)[0].split(';', 1)[0] |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
692 |
3327
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
693 def normurl(url): |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
694 inner = '/'.join([x for x in url.split('/') if x]) |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
695 tl = len(url) > 1 and url.endswith('/') and '/' or '' |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
696 |
3327
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
697 return '%s%s%s' % (url.startswith('/') and '/' or '', |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
698 inner, tl) |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
699 |
3606
f8589028a7fa
hgweb: split URLs containing spaces or other escaped characters correctly
Brendan Cully <brendan@kublai.com>
parents:
3595
diff
changeset
|
700 root = normurl(urllib.unquote(req.env.get('REQUEST_URI', '').split('?', 1)[0])) |
3327
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
701 pi = normurl(req.env.get('PATH_INFO', '')) |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
702 if pi: |
3327
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
703 # strip leading / |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
704 pi = pi[1:] |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
705 if pi: |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
706 root = root[:-len(pi)] |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
707 if req.env.has_key('REPO_NAME'): |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
708 rn = req.env['REPO_NAME'] + '/' |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
709 root += rn |
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
710 query = pi[len(rn):] |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
711 else: |
3327
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
712 query = pi |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
713 else: |
3327
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
714 root += '?' |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
715 query = firstitem(req.env['QUERY_STRING']) |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
716 |
3327
e6353b7b102a
NWI base URL detection fixes
Brendan Cully <brendan@kublai.com>
parents:
3305
diff
changeset
|
717 return (root, query) |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
718 |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
719 req.url, query = spliturl(req) |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
720 |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
721 if req.form.has_key('cmd'): |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
722 # old style |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
723 return |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
724 |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
725 args = query.split('/', 2) |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
726 if not args or not args[0]: |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
727 return |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
728 |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
729 cmd = args.pop(0) |
3261
329ac0c0c0e8
hgweb: extract raw prefix from NWI commands
Brendan Cully <brendan@kublai.com>
parents:
3260
diff
changeset
|
730 style = cmd.rfind('-') |
329ac0c0c0e8
hgweb: extract raw prefix from NWI commands
Brendan Cully <brendan@kublai.com>
parents:
3260
diff
changeset
|
731 if style != -1: |
329ac0c0c0e8
hgweb: extract raw prefix from NWI commands
Brendan Cully <brendan@kublai.com>
parents:
3260
diff
changeset
|
732 req.form['style'] = [cmd[:style]] |
329ac0c0c0e8
hgweb: extract raw prefix from NWI commands
Brendan Cully <brendan@kublai.com>
parents:
3260
diff
changeset
|
733 cmd = cmd[style+1:] |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
734 # avoid accepting e.g. style parameter as command |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
735 if hasattr(self, 'do_' + cmd): |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
736 req.form['cmd'] = [cmd] |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
737 |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
738 if args and args[0]: |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
739 node = args.pop(0) |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
740 req.form['node'] = [node] |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
741 if args: |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
742 req.form['file'] = args |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
743 |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
744 if cmd == 'static': |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
745 req.form['file'] = req.form['node'] |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
746 elif cmd == 'archive': |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
747 fn = req.form['node'][0] |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
748 for type_, spec in self.archive_specs.iteritems(): |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
749 ext = spec[2] |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
750 if fn.endswith(ext): |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
751 req.form['node'] = [fn[:-len(ext)]] |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
752 req.form['type'] = [type_] |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
753 |
3362
887da2247b57
hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3359
diff
changeset
|
754 def sessionvars(**map): |
887da2247b57
hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3359
diff
changeset
|
755 fields = [] |
887da2247b57
hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3359
diff
changeset
|
756 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:
3359
diff
changeset
|
757 style = req.form['style'][0] |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
758 if style != self.config('web', 'style', ''): |
3362
887da2247b57
hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3359
diff
changeset
|
759 fields.append(('style', style)) |
887da2247b57
hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3359
diff
changeset
|
760 |
3363
ce8f31e0b3b8
hgweb: Apply the new method of passing session variables to links.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3362
diff
changeset
|
761 separator = req.url[-1] == '?' and ';' or '?' |
3362
887da2247b57
hgweb: Keep session variables (currently only style) in HTML forms, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3359
diff
changeset
|
762 for name, value in fields: |
3363
ce8f31e0b3b8
hgweb: Apply the new method of passing session variables to links.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3362
diff
changeset
|
763 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:
3362
diff
changeset
|
764 separator = ';' |
3270
a7370503d800
hgweb: provide means for handling query parameters
Brendan Cully <brendan@kublai.com>
parents:
3267
diff
changeset
|
765 |
258 | 766 self.refresh() |
132 | 767 |
1406
34cb3957d875
hgweb: allow urls to be shorter by using shortcuts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1402
diff
changeset
|
768 expand_form(req.form) |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
769 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
|
770 |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
771 style = self.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
|
772 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
|
773 style = req.form['style'][0] |
3276
db9d2a624521
hgweb: Search templates in templatepath/style/map, too, using a common function.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3274
diff
changeset
|
774 mapfile = style_map(self.templatepath, style) |
515 | 775 |
3423
a2179e78d18b
Fix RSS URLs (closes issue396)
Brendan Cully <brendan@kublai.com>
parents:
3422
diff
changeset
|
776 port = req.env["SERVER_PORT"] |
a2179e78d18b
Fix RSS URLs (closes issue396)
Brendan Cully <brendan@kublai.com>
parents:
3422
diff
changeset
|
777 port = port != "80" and (":" + port) or "" |
a2179e78d18b
Fix RSS URLs (closes issue396)
Brendan Cully <brendan@kublai.com>
parents:
3422
diff
changeset
|
778 urlbase = 'http://%s%s' % (req.env['SERVER_NAME'], port) |
4084
51e52db6b40d
hgweb: allow static files to be served directly by the HTTP server
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3974
diff
changeset
|
779 staticurl = self.config("web", "staticurl") or req.url + 'static/' |
51e52db6b40d
hgweb: allow static files to be served directly by the HTTP server
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3974
diff
changeset
|
780 if not staticurl.endswith('/'): |
51e52db6b40d
hgweb: allow static files to be served directly by the HTTP server
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3974
diff
changeset
|
781 staticurl += '/' |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
782 |
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
|
783 if not self.reponame: |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
784 self.reponame = (self.config("web", "name") |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
785 or req.env.get('REPO_NAME') |
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
786 or req.url.strip('/') or self.repo.root) |
601 | 787 |
3276
db9d2a624521
hgweb: Search templates in templatepath/style/map, too, using a common function.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3274
diff
changeset
|
788 self.t = templater.templater(mapfile, templater.common_filters, |
3263
3207e30bf468
hgweb: support for generating and parsing NWI URLs
Brendan Cully <brendan@kublai.com>
parents:
3261
diff
changeset
|
789 defaults={"url": req.url, |
4084
51e52db6b40d
hgweb: allow static files to be served directly by the HTTP server
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3974
diff
changeset
|
790 "staticurl": staticurl, |
3423
a2179e78d18b
Fix RSS URLs (closes issue396)
Brendan Cully <brendan@kublai.com>
parents:
3422
diff
changeset
|
791 "urlbase": urlbase, |
1964
778281d46bb2
fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1920
diff
changeset
|
792 "repo": self.reponame, |
778281d46bb2
fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1920
diff
changeset
|
793 "header": header, |
778281d46bb2
fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1920
diff
changeset
|
794 "footer": footer, |
3488
8f02223662c8
hgweb: make #motd# available for all templates
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
795 "motd": motd, |
2534
d5a3cc6520d5
Fix raw files in the web UI.
Eric Hopper <hopper@omnifarious.org>
parents:
2514
diff
changeset
|
796 "rawfileheader": rawfileheader, |
3363
ce8f31e0b3b8
hgweb: Apply the new method of passing session variables to links.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3362
diff
changeset
|
797 "sessionvars": sessionvars |
1964
778281d46bb2
fix template bug that made hgweb break.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1920
diff
changeset
|
798 }) |
201
f918a6fa2572
hgweb: add template filters, template style maps, and raw pages
mpm@selenic.com
parents:
198
diff
changeset
|
799 |
1159
b6f5a947e62e
Change use of global sys.stdout, sys.stdin os.environ to a hgrequest object.
Vincent Wagelaar <vincent@ricardis.tudelft.nl>
parents:
1143
diff
changeset
|
800 if not req.form.has_key('cmd'): |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3612
diff
changeset
|
801 req.form['cmd'] = [self.t.cache['default']] |
937 | 802 |
2119
f62195054c5b
Cleaned hgweb.py a little bit
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
2113
diff
changeset
|
803 cmd = req.form['cmd'][0] |
575 | 804 |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
805 method = getattr(self, 'do_' + cmd, None) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
806 if method: |
3359
41741218504d
hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents:
3358
diff
changeset
|
807 try: |
41741218504d
hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents:
3358
diff
changeset
|
808 method(req) |
41741218504d
hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents:
3358
diff
changeset
|
809 except (hg.RepoError, revlog.RevlogError), inst: |
41741218504d
hgweb: trap lookup errors
Brendan Cully <brendan@kublai.com>
parents:
3358
diff
changeset
|
810 req.write(self.t("error", error=str(inst))) |
132 | 811 else: |
3358
818598f5bc8b
Add better error message for bad commands
Brendan Cully <brendan@kublai.com>
parents:
3355
diff
changeset
|
812 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
|
813 |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
814 def changectx(self, req): |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
815 if req.form.has_key('node'): |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
816 changeid = req.form['node'][0] |
3333
8ec80c1b8f0b
hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents:
3327
diff
changeset
|
817 elif req.form.has_key('manifest'): |
8ec80c1b8f0b
hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents:
3327
diff
changeset
|
818 changeid = req.form['manifest'][0] |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
819 else: |
3333
8ec80c1b8f0b
hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents:
3327
diff
changeset
|
820 changeid = self.repo.changelog.count() - 1 |
8ec80c1b8f0b
hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents:
3327
diff
changeset
|
821 |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
822 try: |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
823 ctx = self.repo.changectx(changeid) |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
824 except hg.RepoError: |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
825 man = self.repo.manifest |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
826 mn = man.lookup(changeid) |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
827 ctx = self.repo.changectx(man.linkrev(mn)) |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
828 |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
829 return ctx |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
830 |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
831 def filectx(self, req): |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
832 path = self.cleanpath(req.form['file'][0]) |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
833 if req.form.has_key('node'): |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
834 changeid = req.form['node'][0] |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
835 else: |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
836 changeid = req.form['filenode'][0] |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
837 try: |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
838 ctx = self.repo.changectx(changeid) |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
839 fctx = ctx.filectx(path) |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
840 except hg.RepoError: |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
841 fctx = self.repo.filectx(path, fileid=changeid) |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
842 |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
843 return fctx |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
844 |
2666
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
845 def stripes(self, parity): |
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
846 "make horizontal stripes for easier reading" |
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
847 if self.stripecount: |
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
848 return (1 + parity / self.stripecount) & 1 |
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
849 else: |
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
850 return 0 |
ebf033bc8eb2
hgweb: Configurable zebra stripes
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
2622
diff
changeset
|
851 |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
852 def do_log(self, req): |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
853 if req.form.has_key('file') and req.form['file'][0]: |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
854 self.do_filelog(req) |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
855 else: |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
856 self.do_changelog(req) |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
857 |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
858 def do_rev(self, req): |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
859 self.do_changeset(req) |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
860 |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
861 def do_file(self, req): |
3595
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
862 path = self.cleanpath(req.form.get('file', [''])[0]) |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
863 if path: |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
864 try: |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
865 req.write(self.filerevision(self.filectx(req))) |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
866 return |
3936
ea238a4e9e8b
Teach hgweb about revlog.LookupError
Brendan Cully <brendan@kublai.com>
parents:
3887
diff
changeset
|
867 except revlog.LookupError: |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
868 pass |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
869 |
3595
fc34fd58ae7b
hgweb: fix handling of path for old style template
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3557
diff
changeset
|
870 req.write(self.manifest(self.changectx(req), path)) |
3260
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
871 |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
872 def do_diff(self, req): |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
873 self.do_filediff(req) |
1f1af9b273e8
hgweb: accept NewWebInterface URLs
Brendan Cully <brendan@kublai.com>
parents:
3231
diff
changeset
|
874 |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
875 def do_changelog(self, req, shortlog = False): |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
876 if req.form.has_key('node'): |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
877 ctx = self.changectx(req) |
3220
325278542ea8
hgweb: use contexts in more handlers
Brendan Cully <brendan@kublai.com>
parents:
3208
diff
changeset
|
878 else: |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
879 if req.form.has_key('rev'): |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
880 hi = req.form['rev'][0] |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
881 else: |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
882 hi = self.repo.changelog.count() - 1 |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
883 try: |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
884 ctx = self.repo.changectx(hi) |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
885 except hg.RepoError: |
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
886 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:
3220
diff
changeset
|
887 return |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
888 |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
889 req.write(self.changelog(ctx, shortlog = shortlog)) |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
890 |
2684
783220e5d2d1
[hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
2683
diff
changeset
|
891 def do_shortlog(self, req): |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
892 self.do_changelog(req, shortlog = True) |
2684
783220e5d2d1
[hgweb] Implemented shortlog (gitweb templates only)
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
2683
diff
changeset
|
893 |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
894 def do_changeset(self, req): |
3333
8ec80c1b8f0b
hgweb: globally default to tip if no revision is specified
Brendan Cully <brendan@kublai.com>
parents:
3327
diff
changeset
|
895 req.write(self.changeset(self.changectx(req))) |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
896 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
897 def do_manifest(self, req): |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
898 req.write(self.manifest(self.changectx(req), |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
899 self.cleanpath(req.form['path'][0]))) |
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_tags(self, req): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
902 req.write(self.tags()) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
903 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
904 def do_summary(self, req): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
905 req.write(self.summary()) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
906 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
907 def do_filediff(self, req): |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
908 req.write(self.filediff(self.filectx(req))) |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
909 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
910 def do_annotate(self, req): |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
911 req.write(self.fileannotate(self.filectx(req))) |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
912 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
913 def do_filelog(self, req): |
3226
5c6028778c5a
hgweb: add methods to get contexts from request
Brendan Cully <brendan@kublai.com>
parents:
3220
diff
changeset
|
914 req.write(self.filelog(self.filectx(req))) |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
915 |
3444
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
916 def do_lookup(self, req): |
3445
233c733e4af5
httprepo: add support for passing lookup exception data
Matt Mackall <mpm@selenic.com>
parents:
3444
diff
changeset
|
917 try: |
233c733e4af5
httprepo: add support for passing lookup exception data
Matt Mackall <mpm@selenic.com>
parents:
3444
diff
changeset
|
918 r = hex(self.repo.lookup(req.form['key'][0])) |
233c733e4af5
httprepo: add support for passing lookup exception data
Matt Mackall <mpm@selenic.com>
parents:
3444
diff
changeset
|
919 success = 1 |
233c733e4af5
httprepo: add support for passing lookup exception data
Matt Mackall <mpm@selenic.com>
parents:
3444
diff
changeset
|
920 except Exception,inst: |
233c733e4af5
httprepo: add support for passing lookup exception data
Matt Mackall <mpm@selenic.com>
parents:
3444
diff
changeset
|
921 r = str(inst) |
233c733e4af5
httprepo: add support for passing lookup exception data
Matt Mackall <mpm@selenic.com>
parents:
3444
diff
changeset
|
922 success = 0 |
233c733e4af5
httprepo: add support for passing lookup exception data
Matt Mackall <mpm@selenic.com>
parents:
3444
diff
changeset
|
923 resp = "%s %s\n" % (success, r) |
3444
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
924 req.httphdr("application/mercurial-0.1", length=len(resp)) |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
925 req.write(resp) |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
926 |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
927 def do_heads(self, req): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
928 resp = " ".join(map(hex, self.repo.heads())) + "\n" |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
929 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
|
930 req.write(resp) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
931 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
932 def do_branches(self, req): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
933 nodes = [] |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
934 if req.form.has_key('nodes'): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
935 nodes = map(bin, req.form['nodes'][0].split(" ")) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
936 resp = cStringIO.StringIO() |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
937 for b in self.repo.branches(nodes): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
938 resp.write(" ".join(map(hex, b)) + "\n") |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
939 resp = resp.getvalue() |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
940 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
|
941 req.write(resp) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
942 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
943 def do_between(self, req): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
944 if req.form.has_key('pairs'): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
945 pairs = [map(bin, p.split("-")) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
946 for p in req.form['pairs'][0].split(" ")] |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
947 resp = cStringIO.StringIO() |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
948 for b in self.repo.between(pairs): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
949 resp.write(" ".join(map(hex, b)) + "\n") |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
950 resp = resp.getvalue() |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
951 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
|
952 req.write(resp) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
953 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
954 def do_changegroup(self, req): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
955 req.httphdr("application/mercurial-0.1") |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
956 nodes = [] |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
957 if not self.allowpull: |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
958 return |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
959 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
960 if req.form.has_key('roots'): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
961 nodes = map(bin, req.form['roots'][0].split(" ")) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
962 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
963 z = zlib.compressobj() |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
964 f = self.repo.changegroup(nodes, 'serve') |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
965 while 1: |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
966 chunk = f.read(4096) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
967 if not chunk: |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
968 break |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
969 req.write(z.compress(chunk)) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
970 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
971 req.write(z.flush()) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
972 |
3444
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
973 def do_changegroupsubset(self, req): |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
974 req.httphdr("application/mercurial-0.1") |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
975 bases = [] |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
976 heads = [] |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
977 if not self.allowpull: |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
978 return |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
979 |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
980 if req.form.has_key('bases'): |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
981 bases = [bin(x) for x in req.form['bases'][0].split(' ')] |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
982 if req.form.has_key('heads'): |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
983 heads = [bin(x) for x in req.form['heads'][0].split(' ')] |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
984 |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
985 z = zlib.compressobj() |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
986 f = self.repo.changegroupsubset(bases, heads, 'serve') |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
987 while 1: |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
988 chunk = f.read(4096) |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
989 if not chunk: |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
990 break |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
991 req.write(z.compress(chunk)) |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
992 |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
993 req.write(z.flush()) |
3505fcd5a231
Adding changegroupsubset and lookup to web protocol so pull -r and
Eric Hopper <hopper@omnifarious.org>
parents:
3427
diff
changeset
|
994 |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
995 def do_archive(self, req): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
996 type_ = req.form['type'][0] |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
997 allowed = self.configlist("web", "allow_archive") |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
998 if (type_ in self.archives and (type_ in allowed or |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
999 self.configbool("web", "allow" + type_, False))): |
4164
5c1e18bb804c
hgweb: use the given revision in the name of the archive
Michael Gebetsroither <michael.geb@gmx.at>
parents:
4096
diff
changeset
|
1000 self.archive(req, req.form['node'][0], type_) |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
1001 return |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
1002 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
1003 req.write(self.t("error")) |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
1004 |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
1005 def do_static(self, req): |
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
1006 fname = req.form['file'][0] |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1007 # a repo owner may set web.static in .hg/hgrc to get any file |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1008 # readable by the user running the CGI script |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1009 static = self.config("web", "static", |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1010 os.path.join(self.templatepath, "static"), |
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1011 untrusted=False) |
2514
419c42223bee
Really fix http headers for web UI and issue 254.
Eric Hopper <hopper@omnifarious.org>
parents:
2509
diff
changeset
|
1012 req.write(staticfile(static, fname, req) |
2436
f910b91dd912
hgweb: split "verbs" into methods.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2434
diff
changeset
|
1013 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
|
1014 |
c660691fb45d
http: query server for capabilities
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2436
diff
changeset
|
1015 def do_capabilities(self, req): |
3612
d1b16a746db6
Add allowed bundle types as argument to hgweb unbundle capability.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3611
diff
changeset
|
1016 caps = ['lookup', 'changegroupsubset'] |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1017 if self.configbool('server', 'uncompressed'): |
2621
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2612
diff
changeset
|
1018 caps.append('stream=%d' % self.repo.revlogversion) |
3612
d1b16a746db6
Add allowed bundle types as argument to hgweb unbundle capability.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3611
diff
changeset
|
1019 # XXX: make configurable and/or share code with do_unbundle: |
d1b16a746db6
Add allowed bundle types as argument to hgweb unbundle capability.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3611
diff
changeset
|
1020 unbundleversions = ['HG10GZ', 'HG10BZ', 'HG10UN'] |
d1b16a746db6
Add allowed bundle types as argument to hgweb unbundle capability.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3611
diff
changeset
|
1021 if unbundleversions: |
d1b16a746db6
Add allowed bundle types as argument to hgweb unbundle capability.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3611
diff
changeset
|
1022 caps.append('unbundle=%s' % ','.join(unbundleversions)) |
2621
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2612
diff
changeset
|
1023 resp = ' '.join(caps) |
2442
c660691fb45d
http: query server for capabilities
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2436
diff
changeset
|
1024 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
|
1025 req.write(resp) |
c660691fb45d
http: query server for capabilities
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2436
diff
changeset
|
1026 |
2466
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1027 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
|
1028 '''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
|
1029 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
|
1030 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
|
1031 |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1032 user = req.env.get('REMOTE_USER') |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1033 |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1034 deny = self.configlist('web', 'deny_' + op) |
2466
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1035 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
|
1036 return False |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1037 |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1038 allow = self.configlist('web', 'allow_' + op) |
2466
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1039 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
|
1040 |
2464
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1041 def do_unbundle(self, req): |
2466
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1042 def bail(response, headers={}): |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1043 length = int(req.env['CONTENT_LENGTH']) |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1044 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
|
1045 # 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
|
1046 # response when run outside cgi script |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1047 pass |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1048 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
|
1049 req.write('0\n') |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1050 req.write(response) |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1051 |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1052 # 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
|
1053 # replayed |
3555
881064004fd0
use untrusted settings in hgweb
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3499
diff
changeset
|
1054 ssl_req = self.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
|
1055 if ssl_req: |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2666
diff
changeset
|
1056 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
|
1057 bail(_('ssl required\n')) |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2666
diff
changeset
|
1058 return |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2666
diff
changeset
|
1059 proto = 'https' |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2666
diff
changeset
|
1060 else: |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2666
diff
changeset
|
1061 proto = 'http' |
2466
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1062 |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1063 # 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
|
1064 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
|
1065 bail(_('push not authorized\n'), |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1066 headers={'status': '401 Unauthorized'}) |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1067 return |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1068 |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1069 req.httphdr("application/mercurial-0.1") |
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1070 |
2464
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1071 their_heads = req.form['heads'][0].split(' ') |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1072 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1073 def check_heads(): |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1074 heads = map(hex, self.repo.heads()) |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1075 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
|
1076 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1077 # fail early if possible |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1078 if not check_heads(): |
2466
e10665147d26
push over http: server side authorization support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2464
diff
changeset
|
1079 bail(_('unsynced changes\n')) |
2464
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1080 return |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1081 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1082 # 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
|
1083 # streamed. save to temporary file. |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1084 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1085 fd, tempname = tempfile.mkstemp(prefix='hg-unbundle-') |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1086 fp = os.fdopen(fd, 'wb+') |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1087 try: |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1088 length = int(req.env['CONTENT_LENGTH']) |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1089 for s in util.filechunkiter(req, limit=length): |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1090 fp.write(s) |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1091 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1092 lock = self.repo.lock() |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1093 try: |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1094 if not check_heads(): |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1095 req.write('0\n') |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1096 req.write(_('unsynced changes\n')) |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1097 return |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1098 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1099 fp.seek(0) |
3610
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1100 header = fp.read(6) |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1101 if not header.startswith("HG"): |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1102 # old client with uncompressed bundle |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1103 def generator(f): |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1104 yield header |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1105 for chunk in f: |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1106 yield chunk |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1107 elif not header.startswith("HG10"): |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1108 req.write("0\n") |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1109 req.write(_("unknown bundle version\n")) |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1110 return |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1111 elif header == "HG10GZ": |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1112 def generator(f): |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1113 zd = zlib.decompressobj() |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1114 for chunk in f: |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1115 yield zd.decompress(chunk) |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1116 elif header == "HG10BZ": |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1117 def generator(f): |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1118 zd = bz2.BZ2Decompressor() |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1119 zd.decompress("BZ") |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1120 for chunk in f: |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1121 yield zd.decompress(chunk) |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1122 elif header == "HG10UN": |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1123 def generator(f): |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1124 for chunk in f: |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1125 yield chunk |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1126 else: |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1127 req.write("0\n") |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1128 req.write(_("unknown bundle compression type\n")) |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1129 return |
44cd1eb72fd7
hgweb: introduce a new capability for sending a compressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3606
diff
changeset
|
1130 gen = generator(util.filechunkiter(fp, 4096)) |
2464
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1131 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1132 # send addchangegroup output to client |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1133 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1134 old_stdout = sys.stdout |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1135 sys.stdout = cStringIO.StringIO() |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1136 |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1137 try: |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2666
diff
changeset
|
1138 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
|
1139 req.env.get('REMOTE_HOST', '')) |
4095
6fa7a2d0fc2e
hgweb: catch util.Abort raised by addchangegroup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3882
diff
changeset
|
1140 try: |
6fa7a2d0fc2e
hgweb: catch util.Abort raised by addchangegroup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3882
diff
changeset
|
1141 ret = self.repo.addchangegroup(util.chunkbuffer(gen), |
6fa7a2d0fc2e
hgweb: catch util.Abort raised by addchangegroup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3882
diff
changeset
|
1142 'serve', url) |
6fa7a2d0fc2e
hgweb: catch util.Abort raised by addchangegroup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3882
diff
changeset
|
1143 except util.Abort, inst: |
6fa7a2d0fc2e
hgweb: catch util.Abort raised by addchangegroup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3882
diff
changeset
|
1144 sys.stdout.write("abort: %s\n" % inst) |
6fa7a2d0fc2e
hgweb: catch util.Abort raised by addchangegroup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3882
diff
changeset
|
1145 ret = 0 |
2464
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1146 finally: |
2558
1120302009d7
hgweb: fix unbundle.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2538
diff
changeset
|
1147 val = sys.stdout.getvalue() |
2464
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1148 sys.stdout = old_stdout |
2558
1120302009d7
hgweb: fix unbundle.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2538
diff
changeset
|
1149 req.write('%d\n' % ret) |
1120302009d7
hgweb: fix unbundle.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
2538
diff
changeset
|
1150 req.write(val) |
2464
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1151 finally: |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1152 lock.release() |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1153 finally: |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1154 fp.close() |
09b1c9ef317c
push over http: server support.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2442
diff
changeset
|
1155 os.unlink(tempname) |
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2580
diff
changeset
|
1156 |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2580
diff
changeset
|
1157 def do_stream_out(self, req): |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2580
diff
changeset
|
1158 req.httphdr("application/mercurial-0.1") |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2580
diff
changeset
|
1159 streamclone.stream_out(self.repo, req) |