Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/hgweb.py @ 987:bfe12654764d
hgweb: change startup argument processing
- allow passing a repo object instead of a path
(if we get a string, we construct a repo object)
- hg serve: pass options via repo.ui.setconfig
- add --style option
- get default name from repo.root rather than getcwd()
- remove template argument to hgweb()
- reduce create_server from 8 args to 1
author | mpm@selenic.com |
---|---|
date | Sun, 21 Aug 2005 15:56:14 -0700 |
parents | 2810c625ca98 |
children | 31dcaf9123ba |
comparison
equal
deleted
inserted
replaced
986:2810c625ca98 | 987:bfe12654764d |
---|---|
136 "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"), | 136 "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"), |
137 "rfc822date": rfc822date, | 137 "rfc822date": rfc822date, |
138 } | 138 } |
139 | 139 |
140 class hgweb: | 140 class hgweb: |
141 | 141 def __init__(self, repo, name=None): |
142 def __init__(self, path, name=None, templates=""): | 142 if type(repo) == type(""): |
143 self.templates = templates | 143 self.repo = repository(ui(), repo) |
144 self.reponame = name | 144 else: |
145 self.path = path | 145 self.repo = repo |
146 | |
146 self.mtime = -1 | 147 self.mtime = -1 |
147 self.viewonly = 0 | 148 self.reponame = name or self.repo.ui.config("web", "name", |
149 self.repo.root) | |
148 | 150 |
149 def refresh(self): | 151 def refresh(self): |
150 s = os.stat(os.path.join(self.path, ".hg", "00changelog.i")) | 152 s = os.stat(os.path.join(self.repo.root, ".hg", "00changelog.i")) |
151 if s.st_mtime != self.mtime: | 153 if s.st_mtime != self.mtime: |
152 self.mtime = s.st_mtime | 154 self.mtime = s.st_mtime |
153 self.repo = repository(ui(), self.path) | 155 self.repo = repository(self.repo.ui, self.repo.root) |
154 self.maxchanges = self.repo.ui.config("web", "maxchanges", 10) | 156 self.maxchanges = self.repo.ui.config("web", "maxchanges", 10) |
155 self.maxfiles = self.repo.ui.config("web", "maxchanges", 10) | 157 self.maxfiles = self.repo.ui.config("web", "maxchanges", 10) |
156 self.allowpull = self.repo.ui.configbool("web", "allowpull", True) | 158 self.allowpull = self.repo.ui.configbool("web", "allowpull", True) |
157 | 159 |
158 def date(self, cs): | 160 def date(self, cs): |
621 yield self.t("footer", **map) | 623 yield self.t("footer", **map) |
622 | 624 |
623 self.refresh() | 625 self.refresh() |
624 args = cgi.parse() | 626 args = cgi.parse() |
625 | 627 |
626 t = self.templates or self.repo.ui.config("web", "templates", | 628 t = self.repo.ui.config("web", "templates", templatepath()) |
627 templatepath()) | |
628 m = os.path.join(t, "map") | 629 m = os.path.join(t, "map") |
629 style = self.repo.ui.config("web", "style", "") | 630 style = self.repo.ui.config("web", "style", "") |
630 if args.has_key('style'): | 631 if args.has_key('style'): |
631 style = args['style'][0] | 632 style = args['style'][0] |
632 if style: | 633 if style: |
638 port = port != "80" and (":" + port) or "" | 639 port = port != "80" and (":" + port) or "" |
639 uri = os.environ["REQUEST_URI"] | 640 uri = os.environ["REQUEST_URI"] |
640 if "?" in uri: uri = uri.split("?")[0] | 641 if "?" in uri: uri = uri.split("?")[0] |
641 url = "http://%s%s%s" % (os.environ["SERVER_NAME"], port, uri) | 642 url = "http://%s%s%s" % (os.environ["SERVER_NAME"], port, uri) |
642 | 643 |
643 name = self.reponame or self.repo.ui.config("web", "name", os.getcwd()) | |
644 | |
645 self.t = templater(m, common_filters, | 644 self.t = templater(m, common_filters, |
646 {"url":url, | 645 {"url":url, |
647 "repo":name, | 646 "repo":self.reponame, |
648 "header":header, | 647 "header":header, |
649 "footer":footer, | 648 "footer":footer, |
650 }) | 649 }) |
651 | 650 |
652 if not args.has_key('cmd'): | 651 if not args.has_key('cmd'): |
727 sys.stdout.write(z.flush()) | 726 sys.stdout.write(z.flush()) |
728 | 727 |
729 else: | 728 else: |
730 write(self.t("error")) | 729 write(self.t("error")) |
731 | 730 |
732 def create_server(path, name, templates, address, port, use_ipv6 = False, | 731 def create_server(repo): |
733 accesslog = sys.stdout, errorlog = sys.stderr): | |
734 | 732 |
735 def openlog(opt, default): | 733 def openlog(opt, default): |
736 if opt and opt != '-': | 734 if opt and opt != '-': |
737 return open(opt, 'w') | 735 return open(opt, 'w') |
738 return default | 736 return default |
739 | 737 |
740 u = ui() | 738 address = repo.ui.config("web", "address", "") |
741 repo = repository(u, path) | 739 port = int(repo.ui.config("web", "port", 8000)) |
742 if not address: | 740 use_ipv6 = repo.ui.configbool("web", "ipv6") |
743 address = u.config("web", "address", "") | 741 accesslog = openlog(repo.ui.config("web", "accesslog", "-"), sys.stdout) |
744 if not port: | 742 errorlog = openlog(repo.ui.config("web", "errorlog", "-"), sys.stderr) |
745 port = int(u.config("web", "port", 8000)) | |
746 if not use_ipv6: | |
747 use_ipv6 = u.configbool("web", "ipv6") | |
748 | |
749 accesslog = openlog(accesslog or u.config("web", "accesslog", "-"), | |
750 sys.stdout) | |
751 errorlog = openlog(errorlog or u.config("web", "errorlog", "-"), | |
752 sys.stderr) | |
753 | 743 |
754 import BaseHTTPServer | 744 import BaseHTTPServer |
755 | 745 |
756 class IPv6HTTPServer(BaseHTTPServer.HTTPServer): | 746 class IPv6HTTPServer(BaseHTTPServer.HTTPServer): |
757 address_family = getattr(socket, 'AF_INET6', None) | 747 address_family = getattr(socket, 'AF_INET6', None) |
828 self.send_response(200, "Script output follows") | 818 self.send_response(200, "Script output follows") |
829 hg.run() | 819 hg.run() |
830 finally: | 820 finally: |
831 sys.argv, sys.stdin, sys.stdout, sys.stderr = save | 821 sys.argv, sys.stdin, sys.stdout, sys.stderr = save |
832 | 822 |
833 hg = hgweb(path, name, templates) | 823 hg = hgweb(repo) |
834 if use_ipv6: | 824 if use_ipv6: |
835 return IPv6HTTPServer((address, port), hgwebhandler) | 825 return IPv6HTTPServer((address, port), hgwebhandler) |
836 else: | 826 else: |
837 return BaseHTTPServer.HTTPServer((address, port), hgwebhandler) | 827 return BaseHTTPServer.HTTPServer((address, port), hgwebhandler) |
838 | 828 |