hgweb: fix handling of path for old style template
- path from old style are prefixed by '/', make cleanpath strip them
- make manifest() use relative paths, that was the only function using
'/' prefixed paths
--- a/mercurial/hgweb/hgweb_mod.py Tue Oct 31 13:03:52 2006 +0100
+++ b/mercurial/hgweb/hgweb_mod.py Tue Oct 31 13:09:43 2006 +0100
@@ -441,13 +441,13 @@
files = {}
- p = path[1:]
- if p and p[-1] != "/":
- p += "/"
- l = len(p)
+ if path and path[-1] != "/":
+ path += "/"
+ l = len(path)
+ abspath = "/" + path
for f,n in mf.items():
- if f[:l] != p:
+ if f[:l] != path:
continue
remain = f[l:]
if "/" in remain:
@@ -483,15 +483,15 @@
continue
yield {"parity": self.stripes(parity),
- "path": os.path.join(path, f),
+ "path": os.path.join(abspath, f),
"basename": f[:-1]}
parity += 1
yield self.t("manifest",
rev=ctx.rev(),
node=hex(node),
- path=path,
- up=_up(path),
+ path=abspath,
+ up=_up(abspath),
fentries=filelist,
dentries=dirlist,
archives=self.archivelist(hex(node)))
@@ -639,6 +639,7 @@
# find tag, changeset, file
def cleanpath(self, path):
+ path = path.lstrip('/')
return util.canonpath(self.repo.root, '', path)
def run(self):
@@ -865,16 +866,15 @@
self.do_changeset(req)
def do_file(self, req):
- path = req.form.get('file', [''])[0]
+ path = self.cleanpath(req.form.get('file', [''])[0])
if path:
try:
req.write(self.filerevision(self.filectx(req)))
return
except hg.RepoError:
pass
- path = self.cleanpath(path)
- req.write(self.manifest(self.changectx(req), '/' + path))
+ req.write(self.manifest(self.changectx(req), path))
def do_diff(self, req):
self.do_filediff(req)