Mercurial > hg-stable
changeset 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 | de4a18cbfc98 |
children | 9696954415db |
files | mercurial/hgweb/hgwebdir_mod.py tests/test-hgwebdir.t tests/test-hgwebdirsym.t |
diffstat | 3 files changed, 16 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hgweb/hgwebdir_mod.py Fri Nov 26 18:45:35 2010 +0100 +++ b/mercurial/hgweb/hgwebdir_mod.py Tue Nov 30 12:45:25 2010 -0200 @@ -153,10 +153,11 @@ # nested indexes and hgwebs repos = dict(self.repos) - while virtual: - real = repos.get(virtual) + virtualrepo = virtual + while virtualrepo: + real = repos.get(virtualrepo) if real: - req.env['REPO_NAME'] = virtual + req.env['REPO_NAME'] = virtualrepo try: repo = hg.repository(self.ui, real) return hgweb(repo).run_wsgi(req) @@ -166,16 +167,16 @@ except error.RepoError, inst: raise ErrorResponse(HTTP_SERVER_ERROR, str(inst)) - # browse subdirectories - subdir = virtual + '/' - if [r for r in repos if r.startswith(subdir)]: - req.respond(HTTP_OK, ctype) - return self.makeindex(req, tmpl, subdir) - - up = virtual.rfind('/') + up = virtualrepo.rfind('/') if up < 0: break - virtual = virtual[:up] + virtualrepo = virtualrepo[:up] + + # browse subdirectories + subdir = virtual + '/' + if [r for r in repos if r.startswith(subdir)]: + req.respond(HTTP_OK, ctype) + return self.makeindex(req, tmpl, subdir) # prefixes not found req.respond(HTTP_NOT_FOUND, ctype)
--- a/tests/test-hgwebdir.t Fri Nov 26 18:45:35 2010 +0100 +++ b/tests/test-hgwebdir.t Tue Nov 30 12:45:25 2010 -0200 @@ -77,7 +77,7 @@ 404 Not Found - error: repository c not found + error: repository c/file/tip/c not found [1] atom-log without basedir
--- a/tests/test-hgwebdirsym.t Fri Nov 26 18:45:35 2010 +0100 +++ b/tests/test-hgwebdirsym.t Tue Nov 30 12:45:25 2010 -0200 @@ -56,19 +56,19 @@ 404 Not Found - error: repository circle not found + error: repository circle/al/file/tip/a not found [1] $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/circle/b/file/tip/a?style=raw' 404 Not Found - error: repository circle not found + error: repository circle/b/file/tip/a not found [1] $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/circle/c/file/tip/a?style=raw' 404 Not Found - error: repository circle not found + error: repository circle/c/file/tip/a not found [1] collections errors