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: |
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: |