comparison mercurial/hgweb/hgweb_mod.py @ 6379:d2bb66a8a435

hgweb: add compatibility code for old templates Up to changeset 3340aa5a64f7, HTTP headers were expected to be embedded in the "headers" template. Since that changeset, the content-type is supposed to be defined as the "mimetype" template in the map file. This changeset makes sure the old templates still work.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Mon, 24 Mar 2008 13:45:01 -0300
parents 31a01e3d99cc
children a1007f7b9b7b 8189e03adb44
comparison
equal deleted inserted replaced
6378:f0f830114a9b 6379:d2bb66a8a435
4 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> 4 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
5 # 5 #
6 # This software may be used and distributed according to the terms 6 # This software may be used and distributed according to the terms
7 # of the GNU General Public License, incorporated herein by reference. 7 # of the GNU General Public License, incorporated herein by reference.
8 8
9 import os, mimetypes, re 9 import os, mimetypes, re, mimetools, cStringIO
10 from mercurial.node import hex, nullid, short 10 from mercurial.node import hex, nullid, short
11 from mercurial.repo import RepoError 11 from mercurial.repo import RepoError
12 from mercurial import mdiff, ui, hg, util, archival, patch, hook 12 from mercurial import mdiff, ui, hg, util, archival, patch, hook
13 from mercurial import revlog, templater, templatefilters, changegroup 13 from mercurial import revlog, templater, templatefilters, changegroup
14 from common import get_mtime, style_map, paritygen, countgen, get_contact 14 from common import get_mtime, style_map, paritygen, countgen, get_contact
224 # process the web interface request 224 # process the web interface request
225 225
226 try: 226 try:
227 227
228 tmpl = self.templater(req) 228 tmpl = self.templater(req)
229 ctype = tmpl('mimetype', encoding=self.encoding) 229 try:
230 ctype = templater.stringify(ctype) 230 ctype = tmpl('mimetype', encoding=self.encoding)
231 ctype = templater.stringify(ctype)
232 except KeyError:
233 # old templates with inline HTTP headers?
234 if 'mimetype' in tmpl:
235 raise
236 header = tmpl('header', encoding=self.encoding)
237 header_file = cStringIO.StringIO(templater.stringify(header))
238 msg = mimetools.Message(header_file, 0)
239 ctype = msg['content-type']
231 240
232 if cmd == '': 241 if cmd == '':
233 req.form['cmd'] = [tmpl.cache['default']] 242 req.form['cmd'] = [tmpl.cache['default']]
234 cmd = req.form['cmd'][0] 243 cmd = req.form['cmd'][0]
235 244
280 staticurl += '/' 289 staticurl += '/'
281 290
282 # some functions for the templater 291 # some functions for the templater
283 292
284 def header(**map): 293 def header(**map):
285 yield tmpl('header', encoding=self.encoding, **map) 294 header = tmpl('header', encoding=self.encoding, **map)
295 if 'mimetype' not in tmpl:
296 # old template with inline HTTP headers
297 header_file = cStringIO.StringIO(templater.stringify(header))
298 msg = mimetools.Message(header_file, 0)
299 header = header_file.read()
300 yield header
286 301
287 def footer(**map): 302 def footer(**map):
288 yield tmpl("footer", **map) 303 yield tmpl("footer", **map)
289 304
290 def motd(**map): 305 def motd(**map):