mercurial/hgweb/hgwebdir_mod.py
changeset 3261 1e322b44b366
parent 3215 53e843840349
child 3262 3207e30bf468
equal deleted inserted replaced
3260:329ac0c0c0e8 3261:1e322b44b366
    83                                    defaults={"header": header,
    83                                    defaults={"header": header,
    84                                              "footer": footer})
    84                                              "footer": footer})
    85 
    85 
    86         def archivelist(ui, nodeid, url):
    86         def archivelist(ui, nodeid, url):
    87             allowed = ui.configlist("web", "allow_archive")
    87             allowed = ui.configlist("web", "allow_archive")
    88             for i in ['zip', 'gz', 'bz2']:
    88             for i in [('zip', '.zip'), ('gz', '.tar.gz'), ('bz2', '.tar.bz2')]:
    89                 if i in allowed or ui.configbool("web", "allow" + i):
    89                 if i[0] in allowed or ui.configbool("web", "allow" + i[0]):
    90                     yield {"type" : i, "node": nodeid, "url": url}
    90                     yield {"type" : i[0], "extension": i[1],
       
    91                            "node": nodeid, "url": url}
    91 
    92 
    92         def entries(sortcolumn="", descending=False, **map):
    93         def entries(sortcolumn="", descending=False, **map):
    93             rows = []
    94             rows = []
    94             parity = 0
    95             parity = 0
    95             for name, path in self.repos:
    96             for name, path in self.repos:
    99                 except IOError:
   100                 except IOError:
   100                     pass
   101                     pass
   101                 get = u.config
   102                 get = u.config
   102 
   103 
   103                 url = ('/'.join([req.env["REQUEST_URI"].split('?')[0], name])
   104                 url = ('/'.join([req.env["REQUEST_URI"].split('?')[0], name])
   104                        .replace("//", "/"))
   105                        .replace("//", "/")) + '/'
   105 
   106 
   106                 # update time with local timezone
   107                 # update time with local timezone
   107                 try:
   108                 try:
   108                     d = (get_mtime(path), util.makedate()[1])
   109                     d = (get_mtime(path), util.makedate()[1])
   109                 except OSError:
   110                 except OSError:
   141                     parity = 1 - parity
   142                     parity = 1 - parity
   142                     yield row
   143                     yield row
   143 
   144 
   144         virtual = req.env.get("PATH_INFO", "").strip('/')
   145         virtual = req.env.get("PATH_INFO", "").strip('/')
   145         if virtual:
   146         if virtual:
   146             real = dict(self.repos).get(virtual)
   147             while virtual:
       
   148                 real = dict(self.repos).get(virtual)
       
   149                 if real:
       
   150                     break
       
   151                 up = virtual.rfind('/')
       
   152                 if up < 0:
       
   153                     break
       
   154                 virtual = virtual[:up]
   147             if real:
   155             if real:
       
   156                 req.env['REPO_NAME'] = virtual
   148                 try:
   157                 try:
   149                     hgweb(real).run_wsgi(req)
   158                     hgweb(real).run_wsgi(req)
   150                 except IOError, inst:
   159                 except IOError, inst:
   151                     req.write(tmpl("error", error=inst.strerror))
   160                     req.write(tmpl("error", error=inst.strerror))
   152                 except hg.RepoError, inst:
   161                 except hg.RepoError, inst: