51 ('gz', ('application/x-gzip', 'tgz', '.tar.gz', None)), |
51 ('gz', ('application/x-gzip', 'tgz', '.tar.gz', None)), |
52 ('bz2', ('application/x-bzip2', 'tbz2', '.tar.bz2', None)), |
52 ('bz2', ('application/x-bzip2', 'tbz2', '.tar.bz2', None)), |
53 )) |
53 )) |
54 |
54 |
55 def getstyle(req, configfn, templatepath): |
55 def getstyle(req, configfn, templatepath): |
56 fromreq = req.form.get('style', [None])[0] |
|
57 styles = ( |
56 styles = ( |
58 fromreq, |
57 req.qsparams.get('style', None), |
59 configfn('web', 'style'), |
58 configfn('web', 'style'), |
60 'paper', |
59 'paper', |
61 ) |
60 ) |
62 return styles, templater.stylemap(styles, templatepath) |
61 return styles, templater.stylemap(styles, templatepath) |
63 |
62 |
158 yield self.config('web', 'motd') |
157 yield self.config('web', 'motd') |
159 |
158 |
160 # figure out which style to use |
159 # figure out which style to use |
161 |
160 |
162 vars = {} |
161 vars = {} |
163 styles, (style, mapfile) = getstyle(wsgireq, self.config, |
162 styles, (style, mapfile) = getstyle(wsgireq.req, self.config, |
164 self.templatepath) |
163 self.templatepath) |
165 if style == styles[0]: |
164 if style == styles[0]: |
166 vars['style'] = style |
165 vars['style'] = style |
167 |
166 |
168 sessionvars = webutil.sessionvars(vars, '?') |
167 sessionvars = webutil.sessionvars(vars, '?') |
335 args = query.split('/', 2) |
334 args = query.split('/', 2) |
336 if 'cmd' not in wsgireq.form and args and args[0]: |
335 if 'cmd' not in wsgireq.form and args and args[0]: |
337 cmd = args.pop(0) |
336 cmd = args.pop(0) |
338 style = cmd.rfind('-') |
337 style = cmd.rfind('-') |
339 if style != -1: |
338 if style != -1: |
340 wsgireq.form['style'] = [cmd[:style]] |
339 req.qsparams['style'] = cmd[:style] |
341 cmd = cmd[style + 1:] |
340 cmd = cmd[style + 1:] |
342 |
341 |
343 # avoid accepting e.g. style parameter as command |
342 # avoid accepting e.g. style parameter as command |
344 if util.safehasattr(webcommands, cmd): |
343 if util.safehasattr(webcommands, cmd): |
345 wsgireq.form['cmd'] = [cmd] |
344 wsgireq.form['cmd'] = [cmd] |
353 if args: |
352 if args: |
354 wsgireq.form['file'] = args |
353 wsgireq.form['file'] = args |
355 |
354 |
356 ua = req.headers.get('User-Agent', '') |
355 ua = req.headers.get('User-Agent', '') |
357 if cmd == 'rev' and 'mercurial' in ua: |
356 if cmd == 'rev' and 'mercurial' in ua: |
358 wsgireq.form['style'] = ['raw'] |
357 req.qsparams['style'] = 'raw' |
359 |
358 |
360 if cmd == 'archive': |
359 if cmd == 'archive': |
361 fn = wsgireq.form['node'][0] |
360 fn = wsgireq.form['node'][0] |
362 for type_, spec in rctx.archivespecs.iteritems(): |
361 for type_, spec in rctx.archivespecs.iteritems(): |
363 ext = spec[2] |
362 ext = spec[2] |
387 if rctx.configbool('web', 'cache') and not rctx.nonce: |
386 if rctx.configbool('web', 'cache') and not rctx.nonce: |
388 caching(self, wsgireq) # sets ETag header or raises NOT_MODIFIED |
387 caching(self, wsgireq) # sets ETag header or raises NOT_MODIFIED |
389 if cmd not in webcommands.__all__: |
388 if cmd not in webcommands.__all__: |
390 msg = 'no such method: %s' % cmd |
389 msg = 'no such method: %s' % cmd |
391 raise ErrorResponse(HTTP_BAD_REQUEST, msg) |
390 raise ErrorResponse(HTTP_BAD_REQUEST, msg) |
392 elif cmd == 'file' and 'raw' in wsgireq.form.get('style', []): |
391 elif cmd == 'file' and req.qsparams.get('style') == 'raw': |
393 rctx.ctype = ctype |
392 rctx.ctype = ctype |
394 content = webcommands.rawfile(rctx, wsgireq, tmpl) |
393 content = webcommands.rawfile(rctx, wsgireq, tmpl) |
395 else: |
394 else: |
396 content = getattr(webcommands, cmd)(rctx, wsgireq, tmpl) |
395 content = getattr(webcommands, cmd)(rctx, wsgireq, tmpl) |
397 wsgireq.respond(HTTP_OK, ctype) |
396 wsgireq.respond(HTTP_OK, ctype) |