mercurial/hgweb/hgwebdir_mod.py
changeset 6379 d2bb66a8a435
parent 6287 c86207d41512
child 6391 a1007f7b9b7b
child 6459 8189e03adb44
equal deleted inserted replaced
6378:f0f830114a9b 6379:d2bb66a8a435
     4 # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
     4 # Copyright 2005, 2006 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
     9 import os, mimetools, cStringIO
    10 from mercurial.i18n import gettext as _
    10 from mercurial.i18n import gettext as _
    11 from mercurial.repo import RepoError
    11 from mercurial.repo import RepoError
    12 from mercurial import ui, hg, util, templater, templatefilters
    12 from mercurial import ui, hg, util, templater, templatefilters
    13 from common import ErrorResponse, get_mtime, staticfile, style_map, paritygen,\
    13 from common import ErrorResponse, get_mtime, staticfile, style_map, paritygen,\
    14                    get_contact, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
    14                    get_contact, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
    79         try:
    79         try:
    80             try:
    80             try:
    81 
    81 
    82                 virtual = req.env.get("PATH_INFO", "").strip('/')
    82                 virtual = req.env.get("PATH_INFO", "").strip('/')
    83                 tmpl = self.templater(req)
    83                 tmpl = self.templater(req)
    84                 ctype = tmpl('mimetype', encoding=util._encoding)
    84                 try:
    85                 ctype = templater.stringify(ctype)
    85                     ctype = tmpl('mimetype', encoding=util._encoding)
       
    86                     ctype = templater.stringify(ctype)
       
    87                 except KeyError:
       
    88                     # old templates with inline HTTP headers?
       
    89                     if 'mimetype' in tmpl:
       
    90                         raise
       
    91                     header = tmpl('header', encoding=util._encoding)
       
    92                     header_file = cStringIO.StringIO(templater.stringify(header))
       
    93                     msg = mimetools.Message(header_file, 0)
       
    94                     ctype = msg['content-type']
    86 
    95 
    87                 # a static file
    96                 # a static file
    88                 if virtual.startswith('static/') or 'static' in req.form:
    97                 if virtual.startswith('static/') or 'static' in req.form:
    89                     static = os.path.join(templater.templatepath(), 'static')
    98                     static = os.path.join(templater.templatepath(), 'static')
    90                     if virtual.startswith('static/'):
    99                     if virtual.startswith('static/'):
   244                     **dict(sort))
   253                     **dict(sort))
   245 
   254 
   246     def templater(self, req):
   255     def templater(self, req):
   247 
   256 
   248         def header(**map):
   257         def header(**map):
   249             yield tmpl('header', encoding=util._encoding, **map)
   258             header = tmpl('header', encoding=util._encoding, **map)
       
   259             if 'mimetype' not in tmpl:
       
   260                 # old template with inline HTTP headers
       
   261                 header_file = cStringIO.StringIO(templater.stringify(header))
       
   262                 msg = mimetools.Message(header_file, 0)
       
   263                 header = header_file.read()
       
   264             yield header
   250 
   265 
   251         def footer(**map):
   266         def footer(**map):
   252             yield tmpl("footer", **map)
   267             yield tmpl("footer", **map)
   253 
   268 
   254         def motd(**map):
   269         def motd(**map):