Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/hgwebdir_mod.py @ 13066:86888ae9ce90 stable
hgwebdir: fix incorrect index generation for invalid paths (issue2023)
edd07be943dd moved the subdirectory match inside the repository match
loop. A virtual path existing/path/invalid/path would then match
existing/path, and generate a wrong index page.
author | Wagner Bruna <wbruna@softwareexpress.com.br> |
---|---|
date | Tue, 30 Nov 2010 12:45:25 -0200 |
parents | ef969e58a394 |
children | 5bcb6c9d16db |
comparison
equal
deleted
inserted
replaced
13065:de4a18cbfc98 | 13066:86888ae9ce90 |
---|---|
151 return self.makeindex(req, tmpl) | 151 return self.makeindex(req, tmpl) |
152 | 152 |
153 # nested indexes and hgwebs | 153 # nested indexes and hgwebs |
154 | 154 |
155 repos = dict(self.repos) | 155 repos = dict(self.repos) |
156 while virtual: | 156 virtualrepo = virtual |
157 real = repos.get(virtual) | 157 while virtualrepo: |
158 real = repos.get(virtualrepo) | |
158 if real: | 159 if real: |
159 req.env['REPO_NAME'] = virtual | 160 req.env['REPO_NAME'] = virtualrepo |
160 try: | 161 try: |
161 repo = hg.repository(self.ui, real) | 162 repo = hg.repository(self.ui, real) |
162 return hgweb(repo).run_wsgi(req) | 163 return hgweb(repo).run_wsgi(req) |
163 except IOError, inst: | 164 except IOError, inst: |
164 msg = inst.strerror | 165 msg = inst.strerror |
165 raise ErrorResponse(HTTP_SERVER_ERROR, msg) | 166 raise ErrorResponse(HTTP_SERVER_ERROR, msg) |
166 except error.RepoError, inst: | 167 except error.RepoError, inst: |
167 raise ErrorResponse(HTTP_SERVER_ERROR, str(inst)) | 168 raise ErrorResponse(HTTP_SERVER_ERROR, str(inst)) |
168 | 169 |
169 # browse subdirectories | 170 up = virtualrepo.rfind('/') |
170 subdir = virtual + '/' | |
171 if [r for r in repos if r.startswith(subdir)]: | |
172 req.respond(HTTP_OK, ctype) | |
173 return self.makeindex(req, tmpl, subdir) | |
174 | |
175 up = virtual.rfind('/') | |
176 if up < 0: | 171 if up < 0: |
177 break | 172 break |
178 virtual = virtual[:up] | 173 virtualrepo = virtualrepo[:up] |
174 | |
175 # browse subdirectories | |
176 subdir = virtual + '/' | |
177 if [r for r in repos if r.startswith(subdir)]: | |
178 req.respond(HTTP_OK, ctype) | |
179 return self.makeindex(req, tmpl, subdir) | |
179 | 180 |
180 # prefixes not found | 181 # prefixes not found |
181 req.respond(HTTP_NOT_FOUND, ctype) | 182 req.respond(HTTP_NOT_FOUND, ctype) |
182 return tmpl("notfound", repo=virtual) | 183 return tmpl("notfound", repo=virtual) |
183 | 184 |