Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/hgweb/hgweb_mod.py @ 3595:fc34fd58ae7b
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
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Tue, 31 Oct 2006 13:09:43 +0100 |
parents | f7dee427cd14 |
children | f8589028a7fa |
comparison
equal
deleted
inserted
replaced
3594:5f08389bcf06 | 3595:fc34fd58ae7b |
---|---|
439 mf = ctx.manifest() | 439 mf = ctx.manifest() |
440 node = ctx.node() | 440 node = ctx.node() |
441 | 441 |
442 files = {} | 442 files = {} |
443 | 443 |
444 p = path[1:] | 444 if path and path[-1] != "/": |
445 if p and p[-1] != "/": | 445 path += "/" |
446 p += "/" | 446 l = len(path) |
447 l = len(p) | 447 abspath = "/" + path |
448 | 448 |
449 for f,n in mf.items(): | 449 for f,n in mf.items(): |
450 if f[:l] != p: | 450 if f[:l] != path: |
451 continue | 451 continue |
452 remain = f[l:] | 452 remain = f[l:] |
453 if "/" in remain: | 453 if "/" in remain: |
454 short = remain[:remain.index("/") + 1] # bleah | 454 short = remain[:remain.index("/") + 1] # bleah |
455 files[short] = (f, None) | 455 files[short] = (f, None) |
481 full, fnode = files[f] | 481 full, fnode = files[f] |
482 if fnode: | 482 if fnode: |
483 continue | 483 continue |
484 | 484 |
485 yield {"parity": self.stripes(parity), | 485 yield {"parity": self.stripes(parity), |
486 "path": os.path.join(path, f), | 486 "path": os.path.join(abspath, f), |
487 "basename": f[:-1]} | 487 "basename": f[:-1]} |
488 parity += 1 | 488 parity += 1 |
489 | 489 |
490 yield self.t("manifest", | 490 yield self.t("manifest", |
491 rev=ctx.rev(), | 491 rev=ctx.rev(), |
492 node=hex(node), | 492 node=hex(node), |
493 path=path, | 493 path=abspath, |
494 up=_up(path), | 494 up=_up(abspath), |
495 fentries=filelist, | 495 fentries=filelist, |
496 dentries=dirlist, | 496 dentries=dirlist, |
497 archives=self.archivelist(hex(node))) | 497 archives=self.archivelist(hex(node))) |
498 | 498 |
499 def tags(self): | 499 def tags(self): |
637 # add tags to things | 637 # add tags to things |
638 # tags -> list of changesets corresponding to tags | 638 # tags -> list of changesets corresponding to tags |
639 # find tag, changeset, file | 639 # find tag, changeset, file |
640 | 640 |
641 def cleanpath(self, path): | 641 def cleanpath(self, path): |
642 path = path.lstrip('/') | |
642 return util.canonpath(self.repo.root, '', path) | 643 return util.canonpath(self.repo.root, '', path) |
643 | 644 |
644 def run(self): | 645 def run(self): |
645 if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."): | 646 if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."): |
646 raise RuntimeError("This function is only intended to be called while running as a CGI script.") | 647 raise RuntimeError("This function is only intended to be called while running as a CGI script.") |
863 | 864 |
864 def do_rev(self, req): | 865 def do_rev(self, req): |
865 self.do_changeset(req) | 866 self.do_changeset(req) |
866 | 867 |
867 def do_file(self, req): | 868 def do_file(self, req): |
868 path = req.form.get('file', [''])[0] | 869 path = self.cleanpath(req.form.get('file', [''])[0]) |
869 if path: | 870 if path: |
870 try: | 871 try: |
871 req.write(self.filerevision(self.filectx(req))) | 872 req.write(self.filerevision(self.filectx(req))) |
872 return | 873 return |
873 except hg.RepoError: | 874 except hg.RepoError: |
874 pass | 875 pass |
875 path = self.cleanpath(path) | 876 |
876 | 877 req.write(self.manifest(self.changectx(req), path)) |
877 req.write(self.manifest(self.changectx(req), '/' + path)) | |
878 | 878 |
879 def do_diff(self, req): | 879 def do_diff(self, req): |
880 self.do_filediff(req) | 880 self.do_filediff(req) |
881 | 881 |
882 def do_changelog(self, req, shortlog = False): | 882 def do_changelog(self, req, shortlog = False): |