comparison mercurial/hgweb/hgweb_mod.py @ 3260:1f1af9b273e8

hgweb: accept NewWebInterface URLs
author Brendan Cully <brendan@kublai.com>
date Wed, 04 Oct 2006 17:04:40 -0700
parents 35d61e653174
children 329ac0c0c0e8
comparison
equal deleted inserted replaced
3258:03acd01520ac 3260:1f1af9b273e8
52 self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10)) 52 self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10))
53 self.allowpull = self.repo.ui.configbool("web", "allowpull", True) 53 self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
54 54
55 def archivelist(self, nodeid): 55 def archivelist(self, nodeid):
56 allowed = self.repo.ui.configlist("web", "allow_archive") 56 allowed = self.repo.ui.configlist("web", "allow_archive")
57 for i in self.archives: 57 for i, spec in self.archive_specs.iteritems():
58 if i in allowed or self.repo.ui.configbool("web", "allow" + i): 58 if i in allowed or self.repo.ui.configbool("web", "allow" + i):
59 yield {"type" : i, "node" : nodeid, "url": ""} 59 yield {"type" : i, "extension" : spec[2], "node" : nodeid}
60 60
61 def listfiles(self, files, mf): 61 def listfiles(self, files, mf):
62 for f in files[:self.maxfiles]: 62 for f in files[:self.maxfiles]:
63 yield self.t("filenodelink", node=hex(mf[f]), file=f) 63 yield self.t("filenodelink", node=hex(mf[f]), file=f)
64 if len(files) > self.maxfiles: 64 if len(files) > self.maxfiles:
643 if value is None: 643 if value is None:
644 value = form[k] 644 value = form[k]
645 form[name] = value 645 form[name] = value
646 del form[k] 646 del form[k]
647 647
648 def rewrite_request(req):
649 '''translate new web interface to traditional format'''
650
651 if req.form.has_key('cmd'):
652 # old style
653 return
654 if req.env.has_key('SCRIPT_URL'):
655 # run through web server
656 base = req.env['SCRIPT_URL']
657 # strip repo and leading '/' or '?'
658 query = req.env['REQUEST_URI'][len(base)+1:]
659 else:
660 query = req.env['PATH_INFO'][1:]
661
662 args = query.split('/', 2)
663 if not args or not args[0]:
664 return
665
666 cmd = args.pop(0)
667 if cmd == 'raw':
668 req.form['style'] = ['raw']
669 cmd = 'rev'
670 elif cmd == 'rawdiff':
671 req.form['style'] = ['raw']
672 cmd = 'diff'
673 req.form['cmd'] = [cmd]
674
675 if args and args[0]:
676 node = args.pop(0)
677 req.form['node'] = [node]
678 if args:
679 req.form['file'] = args
680
681 if cmd == 'static':
682 req.form['file'] = req.form['node']
683 elif cmd == 'archive':
684 fn = req.form['node'][0]
685 for type_, spec in self.archive_specs.iteritems():
686 ext = spec[2]
687 if fn.endswith(ext):
688 req.form['node'] = [fn[:-len(ext)]]
689 req.form['type'] = [type_]
690
648 self.refresh() 691 self.refresh()
649 692
650 expand_form(req.form) 693 expand_form(req.form)
694 rewrite_request(req)
651 695
652 m = os.path.join(self.templatepath, "map") 696 m = os.path.join(self.templatepath, "map")
653 style = self.repo.ui.config("web", "style", "") 697 style = self.repo.ui.config("web", "style", "")
654 if req.form.has_key('style'): 698 if req.form.has_key('style'):
655 style = req.form['style'][0] 699 style = req.form['style'][0]
720 "make horizontal stripes for easier reading" 764 "make horizontal stripes for easier reading"
721 if self.stripecount: 765 if self.stripecount:
722 return (1 + parity / self.stripecount) & 1 766 return (1 + parity / self.stripecount) & 1
723 else: 767 else:
724 return 0 768 return 0
769
770 def do_log(self, req):
771 if req.form.has_key('file') and req.form['file'][0]:
772 self.do_filelog(req)
773 else:
774 self.do_changelog(req)
775
776 def do_rev(self, req):
777 self.do_changeset(req)
778
779 def do_file(self, req):
780 path = req.form.get('file', [''])[0]
781 if path:
782 try:
783 req.write(self.filerevision(self.filectx(req)))
784 return
785 except hg.RepoError:
786 pass
787 path = self.cleanpath(path)
788
789 req.write(self.manifest(self.changectx(req), '/' + path))
790
791 def do_diff(self, req):
792 self.do_filediff(req)
725 793
726 def do_changelog(self, req, shortlog = False): 794 def do_changelog(self, req, shortlog = False):
727 if req.form.has_key('node'): 795 if req.form.has_key('node'):
728 ctx = self.changectx(req) 796 ctx = self.changectx(req)
729 else: 797 else:
756 def do_summary(self, req): 824 def do_summary(self, req):
757 req.write(self.summary()) 825 req.write(self.summary())
758 826
759 def do_filediff(self, req): 827 def do_filediff(self, req):
760 req.write(self.filediff(self.filectx(req))) 828 req.write(self.filediff(self.filectx(req)))
761
762 def do_file(self, req):
763 req.write(self.filerevision(self.filectx(req)))
764 829
765 def do_annotate(self, req): 830 def do_annotate(self, req):
766 req.write(self.fileannotate(self.filectx(req))) 831 req.write(self.fileannotate(self.filectx(req)))
767 832
768 def do_filelog(self, req): 833 def do_filelog(self, req):