Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/hgweb/hgweb_mod.py @ 2436:f910b91dd912
hgweb: split "verbs" into methods.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Thu, 15 Jun 2006 13:27:57 -0700 |
parents | a2df85adface |
children | c660691fb45d |
comparison
equal
deleted
inserted
replaced
2435:ff2bac730b99 | 2436:f910b91dd912 |
---|---|
35 self.repo = repo | 35 self.repo = repo |
36 | 36 |
37 self.mtime = -1 | 37 self.mtime = -1 |
38 self.reponame = name | 38 self.reponame = name |
39 self.archives = 'zip', 'gz', 'bz2' | 39 self.archives = 'zip', 'gz', 'bz2' |
40 self.templatepath = self.repo.ui.config("web", "templates", | |
41 templater.templatepath()) | |
40 | 42 |
41 def refresh(self): | 43 def refresh(self): |
42 mtime = get_mtime(self.repo.root) | 44 mtime = get_mtime(self.repo.root) |
43 if mtime != self.mtime: | 45 if mtime != self.mtime: |
44 self.mtime = mtime | 46 self.mtime = mtime |
642 | 644 |
643 # add tags to things | 645 # add tags to things |
644 # tags -> list of changesets corresponding to tags | 646 # tags -> list of changesets corresponding to tags |
645 # find tag, changeset, file | 647 # find tag, changeset, file |
646 | 648 |
649 def cleanpath(self, path): | |
650 p = util.normpath(path) | |
651 if p[:2] == "..": | |
652 raise Exception("suspicious path") | |
653 return p | |
654 | |
647 def run(self, req=hgrequest()): | 655 def run(self, req=hgrequest()): |
648 def clean(path): | |
649 p = util.normpath(path) | |
650 if p[:2] == "..": | |
651 raise Exception("suspicious path") | |
652 return p | |
653 | |
654 def header(**map): | 656 def header(**map): |
655 yield self.t("header", **map) | 657 yield self.t("header", **map) |
656 | 658 |
657 def footer(**map): | 659 def footer(**map): |
658 yield self.t("footer", | 660 yield self.t("footer", |
684 | 686 |
685 self.refresh() | 687 self.refresh() |
686 | 688 |
687 expand_form(req.form) | 689 expand_form(req.form) |
688 | 690 |
689 t = self.repo.ui.config("web", "templates", templater.templatepath()) | 691 m = os.path.join(self.templatepath, "map") |
690 static = self.repo.ui.config("web", "static", os.path.join(t,"static")) | |
691 m = os.path.join(t, "map") | |
692 style = self.repo.ui.config("web", "style", "") | 692 style = self.repo.ui.config("web", "style", "") |
693 if req.form.has_key('style'): | 693 if req.form.has_key('style'): |
694 style = req.form['style'][0] | 694 style = req.form['style'][0] |
695 if style: | 695 if style: |
696 b = os.path.basename("map-" + style) | 696 b = os.path.basename("map-" + style) |
697 p = os.path.join(t, b) | 697 p = os.path.join(self.templatepath, b) |
698 if os.path.isfile(p): | 698 if os.path.isfile(p): |
699 m = p | 699 m = p |
700 | 700 |
701 port = req.env["SERVER_PORT"] | 701 port = req.env["SERVER_PORT"] |
702 port = port != "80" and (":" + port) or "" | 702 port = port != "80" and (":" + port) or "" |
717 | 717 |
718 if not req.form.has_key('cmd'): | 718 if not req.form.has_key('cmd'): |
719 req.form['cmd'] = [self.t.cache['default'],] | 719 req.form['cmd'] = [self.t.cache['default'],] |
720 | 720 |
721 cmd = req.form['cmd'][0] | 721 cmd = req.form['cmd'][0] |
722 if cmd == 'changelog': | 722 |
723 hi = self.repo.changelog.count() - 1 | 723 method = getattr(self, 'do_' + cmd, None) |
724 if req.form.has_key('rev'): | 724 if method: |
725 hi = req.form['rev'][0] | 725 method(req) |
726 try: | |
727 hi = self.repo.changelog.rev(self.repo.lookup(hi)) | |
728 except hg.RepoError: | |
729 req.write(self.search(hi)) # XXX redirect to 404 page? | |
730 return | |
731 | |
732 req.write(self.changelog(hi)) | |
733 | |
734 elif cmd == 'changeset': | |
735 req.write(self.changeset(req.form['node'][0])) | |
736 | |
737 elif cmd == 'manifest': | |
738 req.write(self.manifest(req.form['manifest'][0], | |
739 clean(req.form['path'][0]))) | |
740 | |
741 elif cmd == 'tags': | |
742 req.write(self.tags()) | |
743 | |
744 elif cmd == 'summary': | |
745 req.write(self.summary()) | |
746 | |
747 elif cmd == 'filediff': | |
748 req.write(self.filediff(clean(req.form['file'][0]), | |
749 req.form['node'][0])) | |
750 | |
751 elif cmd == 'file': | |
752 req.write(self.filerevision(clean(req.form['file'][0]), | |
753 req.form['filenode'][0])) | |
754 | |
755 elif cmd == 'annotate': | |
756 req.write(self.fileannotate(clean(req.form['file'][0]), | |
757 req.form['filenode'][0])) | |
758 | |
759 elif cmd == 'filelog': | |
760 req.write(self.filelog(clean(req.form['file'][0]), | |
761 req.form['filenode'][0])) | |
762 | |
763 elif cmd == 'heads': | |
764 resp = " ".join(map(hex, self.repo.heads())) + "\n" | |
765 req.httphdr("application/mercurial-0.1", length=len(resp)) | |
766 req.write(resp) | |
767 | |
768 elif cmd == 'branches': | |
769 nodes = [] | |
770 if req.form.has_key('nodes'): | |
771 nodes = map(bin, req.form['nodes'][0].split(" ")) | |
772 resp = cStringIO.StringIO() | |
773 for b in self.repo.branches(nodes): | |
774 resp.write(" ".join(map(hex, b)) + "\n") | |
775 resp = resp.getvalue() | |
776 req.httphdr("application/mercurial-0.1", length=len(resp)) | |
777 req.write(resp) | |
778 | |
779 elif cmd == 'between': | |
780 nodes = [] | |
781 if req.form.has_key('pairs'): | |
782 pairs = [map(bin, p.split("-")) | |
783 for p in req.form['pairs'][0].split(" ")] | |
784 resp = cStringIO.StringIO() | |
785 for b in self.repo.between(pairs): | |
786 resp.write(" ".join(map(hex, b)) + "\n") | |
787 resp = resp.getvalue() | |
788 req.httphdr("application/mercurial-0.1", length=len(resp)) | |
789 req.write(resp) | |
790 | |
791 elif cmd == 'changegroup': | |
792 req.httphdr("application/mercurial-0.1") | |
793 nodes = [] | |
794 if not self.allowpull: | |
795 return | |
796 | |
797 if req.form.has_key('roots'): | |
798 nodes = map(bin, req.form['roots'][0].split(" ")) | |
799 | |
800 z = zlib.compressobj() | |
801 f = self.repo.changegroup(nodes, 'serve') | |
802 while 1: | |
803 chunk = f.read(4096) | |
804 if not chunk: | |
805 break | |
806 req.write(z.compress(chunk)) | |
807 | |
808 req.write(z.flush()) | |
809 | |
810 elif cmd == 'archive': | |
811 changeset = self.repo.lookup(req.form['node'][0]) | |
812 type_ = req.form['type'][0] | |
813 allowed = self.repo.ui.config("web", "allow_archive", "").split() | |
814 if (type_ in self.archives and (type_ in allowed or | |
815 self.repo.ui.configbool("web", "allow" + type_, False))): | |
816 self.archive(req, changeset, type_) | |
817 return | |
818 | |
819 req.write(self.t("error")) | |
820 | |
821 elif cmd == 'static': | |
822 fname = req.form['file'][0] | |
823 req.write(staticfile(static, fname) | |
824 or self.t("error", error="%r not found" % fname)) | |
825 | |
826 else: | 726 else: |
827 req.write(self.t("error")) | 727 req.write(self.t("error")) |
828 req.done() | 728 req.done() |
729 | |
730 def do_changelog(self, req): | |
731 hi = self.repo.changelog.count() - 1 | |
732 if req.form.has_key('rev'): | |
733 hi = req.form['rev'][0] | |
734 try: | |
735 hi = self.repo.changelog.rev(self.repo.lookup(hi)) | |
736 except hg.RepoError: | |
737 req.write(self.search(hi)) # XXX redirect to 404 page? | |
738 return | |
739 | |
740 req.write(self.changelog(hi)) | |
741 | |
742 def do_changeset(self, req): | |
743 req.write(self.changeset(req.form['node'][0])) | |
744 | |
745 def do_manifest(self, req): | |
746 req.write(self.manifest(req.form['manifest'][0], | |
747 self.cleanpath(req.form['path'][0]))) | |
748 | |
749 def do_tags(self, req): | |
750 req.write(self.tags()) | |
751 | |
752 def do_summary(self, req): | |
753 req.write(self.summary()) | |
754 | |
755 def do_filediff(self, req): | |
756 req.write(self.filediff(self.cleanpath(req.form['file'][0]), | |
757 req.form['node'][0])) | |
758 | |
759 def do_file(self, req): | |
760 req.write(self.filerevision(self.cleanpath(req.form['file'][0]), | |
761 req.form['filenode'][0])) | |
762 | |
763 def do_annotate(self, req): | |
764 req.write(self.fileannotate(self.cleanpath(req.form['file'][0]), | |
765 req.form['filenode'][0])) | |
766 | |
767 def do_filelog(self, req): | |
768 req.write(self.filelog(self.cleanpath(req.form['file'][0]), | |
769 req.form['filenode'][0])) | |
770 | |
771 def do_heads(self, req): | |
772 resp = " ".join(map(hex, self.repo.heads())) + "\n" | |
773 req.httphdr("application/mercurial-0.1", length=len(resp)) | |
774 req.write(resp) | |
775 | |
776 def do_branches(self, req): | |
777 nodes = [] | |
778 if req.form.has_key('nodes'): | |
779 nodes = map(bin, req.form['nodes'][0].split(" ")) | |
780 resp = cStringIO.StringIO() | |
781 for b in self.repo.branches(nodes): | |
782 resp.write(" ".join(map(hex, b)) + "\n") | |
783 resp = resp.getvalue() | |
784 req.httphdr("application/mercurial-0.1", length=len(resp)) | |
785 req.write(resp) | |
786 | |
787 def do_between(self, req): | |
788 nodes = [] | |
789 if req.form.has_key('pairs'): | |
790 pairs = [map(bin, p.split("-")) | |
791 for p in req.form['pairs'][0].split(" ")] | |
792 resp = cStringIO.StringIO() | |
793 for b in self.repo.between(pairs): | |
794 resp.write(" ".join(map(hex, b)) + "\n") | |
795 resp = resp.getvalue() | |
796 req.httphdr("application/mercurial-0.1", length=len(resp)) | |
797 req.write(resp) | |
798 | |
799 def do_changegroup(self, req): | |
800 req.httphdr("application/mercurial-0.1") | |
801 nodes = [] | |
802 if not self.allowpull: | |
803 return | |
804 | |
805 if req.form.has_key('roots'): | |
806 nodes = map(bin, req.form['roots'][0].split(" ")) | |
807 | |
808 z = zlib.compressobj() | |
809 f = self.repo.changegroup(nodes, 'serve') | |
810 while 1: | |
811 chunk = f.read(4096) | |
812 if not chunk: | |
813 break | |
814 req.write(z.compress(chunk)) | |
815 | |
816 req.write(z.flush()) | |
817 | |
818 def do_archive(self, req): | |
819 changeset = self.repo.lookup(req.form['node'][0]) | |
820 type_ = req.form['type'][0] | |
821 allowed = self.repo.ui.config("web", "allow_archive", "").split() | |
822 if (type_ in self.archives and (type_ in allowed or | |
823 self.repo.ui.configbool("web", "allow" + type_, False))): | |
824 self.archive(req, changeset, type_) | |
825 return | |
826 | |
827 req.write(self.t("error")) | |
828 | |
829 def do_static(self, req): | |
830 fname = req.form['file'][0] | |
831 static = self.repo.ui.config("web", "static", | |
832 os.path.join(self.templatepath, | |
833 "static")) | |
834 req.write(staticfile(static, fname) | |
835 or self.t("error", error="%r not found" % fname)) |