mercurial/hgweb/hgweb_mod.py
changeset 36879 9675147aec06
parent 36878 ccb70a77f746
child 36880 67fb0dca29bc
equal deleted inserted replaced
36878:ccb70a77f746 36879:9675147aec06
    12 import os
    12 import os
    13 
    13 
    14 from .common import (
    14 from .common import (
    15     ErrorResponse,
    15     ErrorResponse,
    16     HTTP_BAD_REQUEST,
    16     HTTP_BAD_REQUEST,
    17     HTTP_NOT_FOUND,
       
    18     HTTP_OK,
    17     HTTP_OK,
    19     HTTP_SERVER_ERROR,
       
    20     cspvalues,
    18     cspvalues,
    21     permhooks,
    19     permhooks,
       
    20     statusmessage,
    22 )
    21 )
    23 
    22 
    24 from .. import (
    23 from .. import (
    25     encoding,
    24     encoding,
    26     error,
    25     error,
   415                 else:
   414                 else:
   416                     wsgireq.respond(HTTP_OK, ctype)
   415                     wsgireq.respond(HTTP_OK, ctype)
   417                     return content
   416                     return content
   418 
   417 
   419         except (error.LookupError, error.RepoLookupError) as err:
   418         except (error.LookupError, error.RepoLookupError) as err:
   420             wsgireq.respond(HTTP_NOT_FOUND, ctype)
       
   421             msg = pycompat.bytestr(err)
   419             msg = pycompat.bytestr(err)
   422             if (util.safehasattr(err, 'name') and
   420             if (util.safehasattr(err, 'name') and
   423                 not isinstance(err,  error.ManifestLookupError)):
   421                 not isinstance(err,  error.ManifestLookupError)):
   424                 msg = 'revision not found: %s' % err.name
   422                 msg = 'revision not found: %s' % err.name
   425             return tmpl('error', error=msg)
   423 
   426         except (error.RepoError, error.RevlogError) as inst:
   424             res.status = '404 Not Found'
   427             wsgireq.respond(HTTP_SERVER_ERROR, ctype)
   425             res.headers['Content-Type'] = ctype
   428             return tmpl('error', error=pycompat.bytestr(inst))
   426             res.setbodygen(tmpl('error', error=msg))
   429         except ErrorResponse as inst:
   427             return res.sendresponse()
   430             wsgireq.respond(inst, ctype)
   428         except (error.RepoError, error.RevlogError) as e:
   431             return tmpl('error', error=pycompat.bytestr(inst))
   429             res.status = '500 Internal Server Error'
       
   430             res.headers['Content-Type'] = ctype
       
   431             res.setbodygen(tmpl('error', error=pycompat.bytestr(e)))
       
   432             return res.sendresponse()
       
   433         except ErrorResponse as e:
       
   434             res.status = statusmessage(e.code, pycompat.bytestr(e))
       
   435             res.headers['Content-Type'] = ctype
       
   436             res.setbodygen(tmpl('error', error=pycompat.bytestr(e)))
       
   437             return res.sendresponse()
   432 
   438 
   433     def check_perm(self, rctx, req, op):
   439     def check_perm(self, rctx, req, op):
   434         for permhook in permhooks:
   440         for permhook in permhooks:
   435             permhook(rctx, req, op)
   441             permhook(rctx, req, op)
   436 
   442