18 'archive', 'static', |
18 'archive', 'static', |
19 ] |
19 ] |
20 |
20 |
21 def log(web, req, tmpl): |
21 def log(web, req, tmpl): |
22 if 'file' in req.form and req.form['file'][0]: |
22 if 'file' in req.form and req.form['file'][0]: |
23 filelog(web, req, tmpl) |
23 return filelog(web, req, tmpl) |
24 else: |
24 else: |
25 changelog(web, req, tmpl) |
25 return changelog(web, req, tmpl) |
26 |
26 |
27 def rawfile(web, req, tmpl): |
27 def rawfile(web, req, tmpl): |
28 path = web.cleanpath(req.form.get('file', [''])[0]) |
28 path = web.cleanpath(req.form.get('file', [''])[0]) |
29 if not path: |
29 if not path: |
30 req.write(web.manifest(tmpl, web.changectx(req), path)) |
30 return web.manifest(tmpl, web.changectx(req), path) |
31 return |
|
32 |
31 |
33 try: |
32 try: |
34 fctx = web.filectx(req) |
33 fctx = web.filectx(req) |
35 except revlog.LookupError: |
34 except revlog.LookupError: |
36 req.write(web.manifest(tmpl, web.changectx(req), path)) |
35 return web.manifest(tmpl, web.changectx(req), path) |
37 return |
|
38 |
36 |
39 path = fctx.path() |
37 path = fctx.path() |
40 text = fctx.data() |
38 text = fctx.data() |
41 mt = mimetypes.guess_type(path)[0] |
39 mt = mimetypes.guess_type(path)[0] |
42 if mt is None or util.binary(text): |
40 if mt is None or util.binary(text): |
43 mt = mt or 'application/octet-stream' |
41 mt = mt or 'application/octet-stream' |
44 |
42 |
45 req.httphdr(mt, path, len(text)) |
43 req.httphdr(mt, path, len(text)) |
46 req.write(text) |
44 return [text] |
47 |
45 |
48 def file(web, req, tmpl): |
46 def file(web, req, tmpl): |
49 path = web.cleanpath(req.form.get('file', [''])[0]) |
47 path = web.cleanpath(req.form.get('file', [''])[0]) |
50 if path: |
48 if path: |
51 try: |
49 try: |
52 req.write(web.filerevision(tmpl, web.filectx(req))) |
50 return web.filerevision(tmpl, web.filectx(req)) |
53 return |
|
54 except revlog.LookupError: |
51 except revlog.LookupError: |
55 pass |
52 pass |
56 |
53 |
57 req.write(web.manifest(tmpl, web.changectx(req), path)) |
54 return web.manifest(tmpl, web.changectx(req), path) |
58 |
55 |
59 def changelog(web, req, tmpl, shortlog = False): |
56 def changelog(web, req, tmpl, shortlog = False): |
60 if 'node' in req.form: |
57 if 'node' in req.form: |
61 ctx = web.changectx(req) |
58 ctx = web.changectx(req) |
62 else: |
59 else: |
65 else: |
62 else: |
66 hi = web.repo.changelog.count() - 1 |
63 hi = web.repo.changelog.count() - 1 |
67 try: |
64 try: |
68 ctx = web.repo.changectx(hi) |
65 ctx = web.repo.changectx(hi) |
69 except hg.RepoError: |
66 except hg.RepoError: |
70 req.write(web.search(tmpl, hi)) # XXX redirect to 404 page? |
67 return web.search(tmpl, hi) # XXX redirect to 404 page? |
71 return |
|
72 |
68 |
73 req.write(web.changelog(tmpl, ctx, shortlog = shortlog)) |
69 return web.changelog(tmpl, ctx, shortlog = shortlog) |
74 |
70 |
75 def shortlog(web, req, tmpl): |
71 def shortlog(web, req, tmpl): |
76 changelog(web, req, tmpl, shortlog = True) |
72 return changelog(web, req, tmpl, shortlog = True) |
77 |
73 |
78 def changeset(web, req, tmpl): |
74 def changeset(web, req, tmpl): |
79 req.write(web.changeset(tmpl, web.changectx(req))) |
75 return web.changeset(tmpl, web.changectx(req)) |
80 |
76 |
81 rev = changeset |
77 rev = changeset |
82 |
78 |
83 def manifest(web, req, tmpl): |
79 def manifest(web, req, tmpl): |
84 req.write(web.manifest(tmpl, web.changectx(req), |
80 return web.manifest(tmpl, web.changectx(req), |
85 web.cleanpath(req.form['path'][0]))) |
81 web.cleanpath(req.form['path'][0])) |
86 |
82 |
87 def tags(web, req, tmpl): |
83 def tags(web, req, tmpl): |
88 req.write(web.tags(tmpl)) |
84 return web.tags(tmpl) |
89 |
85 |
90 def summary(web, req, tmpl): |
86 def summary(web, req, tmpl): |
91 req.write(web.summary(tmpl)) |
87 return web.summary(tmpl) |
92 |
88 |
93 def filediff(web, req, tmpl): |
89 def filediff(web, req, tmpl): |
94 req.write(web.filediff(tmpl, web.filectx(req))) |
90 return web.filediff(tmpl, web.filectx(req)) |
95 |
91 |
96 diff = filediff |
92 diff = filediff |
97 |
93 |
98 def annotate(web, req, tmpl): |
94 def annotate(web, req, tmpl): |
99 req.write(web.fileannotate(tmpl, web.filectx(req))) |
95 return web.fileannotate(tmpl, web.filectx(req)) |
100 |
96 |
101 def filelog(web, req, tmpl): |
97 def filelog(web, req, tmpl): |
102 req.write(web.filelog(tmpl, web.filectx(req))) |
98 return web.filelog(tmpl, web.filectx(req)) |
103 |
99 |
104 def archive(web, req, tmpl): |
100 def archive(web, req, tmpl): |
105 type_ = req.form['type'][0] |
101 type_ = req.form['type'][0] |
106 allowed = web.configlist("web", "allow_archive") |
102 allowed = web.configlist("web", "allow_archive") |
107 if (type_ in web.archives and (type_ in allowed or |
103 if (type_ in web.archives and (type_ in allowed or |
108 web.configbool("web", "allow" + type_, False))): |
104 web.configbool("web", "allow" + type_, False))): |
109 web.archive(tmpl, req, req.form['node'][0], type_) |
105 web.archive(tmpl, req, req.form['node'][0], type_) |
110 return |
106 return [] |
111 |
107 |
112 raise ErrorResponse(400, 'Unsupported archive type: %s' % type_) |
108 raise ErrorResponse(400, 'Unsupported archive type: %s' % type_) |
113 |
109 |
114 def static(web, req, tmpl): |
110 def static(web, req, tmpl): |
115 fname = req.form['file'][0] |
111 fname = req.form['file'][0] |
116 # a repo owner may set web.static in .hg/hgrc to get any file |
112 # a repo owner may set web.static in .hg/hgrc to get any file |
117 # readable by the user running the CGI script |
113 # readable by the user running the CGI script |
118 static = web.config("web", "static", |
114 static = web.config("web", "static", |
119 os.path.join(web.templatepath, "static"), |
115 os.path.join(web.templatepath, "static"), |
120 untrusted=False) |
116 untrusted=False) |
121 req.write(staticfile(static, fname, req)) |
117 return [staticfile(static, fname, req)] |