mercurial/hgweb/hgwebdir_mod.py
changeset 6785 4879468fa28f
parent 6762 f67d1468ac50
child 6796 943f066c0d58
equal deleted inserted replaced
6784:18c429ea3a0e 6785:4879468fa28f
    68         import mercurial.hgweb.wsgicgi as wsgicgi
    68         import mercurial.hgweb.wsgicgi as wsgicgi
    69         wsgicgi.launch(self)
    69         wsgicgi.launch(self)
    70 
    70 
    71     def __call__(self, env, respond):
    71     def __call__(self, env, respond):
    72         req = wsgirequest(env, respond)
    72         req = wsgirequest(env, respond)
    73         self.run_wsgi(req)
    73         return self.run_wsgi(req)
    74         return req
       
    75 
    74 
    76     def run_wsgi(self, req):
    75     def run_wsgi(self, req):
    77 
    76 
    78         try:
    77         try:
    79             try:
    78             try:
    88                     static = os.path.join(templater.templatepath(), 'static')
    87                     static = os.path.join(templater.templatepath(), 'static')
    89                     if virtual.startswith('static/'):
    88                     if virtual.startswith('static/'):
    90                         fname = virtual[7:]
    89                         fname = virtual[7:]
    91                     else:
    90                     else:
    92                         fname = req.form['static'][0]
    91                         fname = req.form['static'][0]
    93                     req.write(staticfile(static, fname, req))
    92                     return staticfile(static, fname, req),
    94                     return
       
    95 
    93 
    96                 # top-level index
    94                 # top-level index
    97                 elif not virtual:
    95                 elif not virtual:
    98                     req.respond(HTTP_OK, ctype)
    96                     req.respond(HTTP_OK, ctype)
    99                     req.write(self.makeindex(req, tmpl))
    97                     return ''.join(self.makeindex(req, tmpl)),
   100                     return
       
   101 
    98 
   102                 # nested indexes and hgwebs
    99                 # nested indexes and hgwebs
   103 
   100 
   104                 repos = dict(self.repos)
   101                 repos = dict(self.repos)
   105                 while virtual:
   102                 while virtual:
   106                     real = repos.get(virtual)
   103                     real = repos.get(virtual)
   107                     if real:
   104                     if real:
   108                         req.env['REPO_NAME'] = virtual
   105                         req.env['REPO_NAME'] = virtual
   109                         try:
   106                         try:
   110                             repo = hg.repository(self.parentui, real)
   107                             repo = hg.repository(self.parentui, real)
   111                             hgweb(repo).run_wsgi(req)
   108                             return hgweb(repo).run_wsgi(req)
   112                             return
       
   113                         except IOError, inst:
   109                         except IOError, inst:
   114                             msg = inst.strerror
   110                             msg = inst.strerror
   115                             raise ErrorResponse(HTTP_SERVER_ERROR, msg)
   111                             raise ErrorResponse(HTTP_SERVER_ERROR, msg)
   116                         except RepoError, inst:
   112                         except RepoError, inst:
   117                             raise ErrorResponse(HTTP_SERVER_ERROR, str(inst))
   113                             raise ErrorResponse(HTTP_SERVER_ERROR, str(inst))
   118 
   114 
   119                     # browse subdirectories
   115                     # browse subdirectories
   120                     subdir = virtual + '/'
   116                     subdir = virtual + '/'
   121                     if [r for r in repos if r.startswith(subdir)]:
   117                     if [r for r in repos if r.startswith(subdir)]:
   122                         req.respond(HTTP_OK, ctype)
   118                         req.respond(HTTP_OK, ctype)
   123                         req.write(self.makeindex(req, tmpl, subdir))
   119                         return ''.join(self.makeindex(req, tmpl, subdir)),
   124                         return
       
   125 
   120 
   126                     up = virtual.rfind('/')
   121                     up = virtual.rfind('/')
   127                     if up < 0:
   122                     if up < 0:
   128                         break
   123                         break
   129                     virtual = virtual[:up]
   124                     virtual = virtual[:up]
   130 
   125 
   131                 # prefixes not found
   126                 # prefixes not found
   132                 req.respond(HTTP_NOT_FOUND, ctype)
   127                 req.respond(HTTP_NOT_FOUND, ctype)
   133                 req.write(tmpl("notfound", repo=virtual))
   128                 return ''.join(tmpl("notfound", repo=virtual)),
   134 
   129 
   135             except ErrorResponse, err:
   130             except ErrorResponse, err:
   136                 req.respond(err.code, ctype)
   131                 req.respond(err.code, ctype)
   137                 req.write(tmpl('error', error=err.message or ''))
   132                 return ''.join(tmpl('error', error=err.message or '')),
   138         finally:
   133         finally:
   139             tmpl = None
   134             tmpl = None
   140 
   135 
   141     def makeindex(self, req, tmpl, subdir=""):
   136     def makeindex(self, req, tmpl, subdir=""):
   142 
   137