# HG changeset patch # User mpm@selenic.com # Date 2005-08-21 22:56:14 # Node ID bfe12654764d3c73ef55f265eb01cd945ebdd067 # Parent 2810c625ca9893ae04c86bc88c99d006ea0f2fc0 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 diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1117,9 +1117,13 @@ def serve(ui, repo, **opts): r = repo.addchangegroup(fin) respond("") - httpd = hgweb.create_server(repo.root, opts["name"], opts["templates"], - opts["address"], opts["port"], opts["ipv6"], - opts['accesslog'], opts['errorlog']) + optlist = "name templates style address port ipv6 accesslog errorlog" + for o in optlist.split(): + if opts[o]: + ui.setconfig("web", o, opts[o]) + + httpd = hgweb.create_server(repo) + if ui.verbose: addr, port = httpd.socket.getsockname() if addr == '0.0.0.0': @@ -1402,7 +1406,8 @@ table = { ('a', 'address', '', 'interface address'), ('n', 'name', "", 'repository name'), ('', 'stdio', None, 'for remote clients'), - ('t', 'templates', "", 'template map'), + ('t', 'templates', "", 'template directory'), + ('', 'style', "", 'template style'), ('6', 'ipv6', None, 'use IPv6 in addition to IPv4')], "hg serve [OPTION]..."), "^status": diff --git a/mercurial/hgweb.py b/mercurial/hgweb.py --- a/mercurial/hgweb.py +++ b/mercurial/hgweb.py @@ -138,19 +138,21 @@ common_filters = { } class hgweb: + def __init__(self, repo, name=None): + if type(repo) == type(""): + self.repo = repository(ui(), repo) + else: + self.repo = repo - def __init__(self, path, name=None, templates=""): - self.templates = templates - self.reponame = name - self.path = path self.mtime = -1 - self.viewonly = 0 + self.reponame = name or self.repo.ui.config("web", "name", + self.repo.root) def refresh(self): - s = os.stat(os.path.join(self.path, ".hg", "00changelog.i")) + s = os.stat(os.path.join(self.repo.root, ".hg", "00changelog.i")) if s.st_mtime != self.mtime: self.mtime = s.st_mtime - self.repo = repository(ui(), self.path) + self.repo = repository(self.repo.ui, self.repo.root) self.maxchanges = self.repo.ui.config("web", "maxchanges", 10) self.maxfiles = self.repo.ui.config("web", "maxchanges", 10) self.allowpull = self.repo.ui.configbool("web", "allowpull", True) @@ -623,8 +625,7 @@ class hgweb: self.refresh() args = cgi.parse() - t = self.templates or self.repo.ui.config("web", "templates", - templatepath()) + t = self.repo.ui.config("web", "templates", templatepath()) m = os.path.join(t, "map") style = self.repo.ui.config("web", "style", "") if args.has_key('style'): @@ -640,11 +641,9 @@ class hgweb: if "?" in uri: uri = uri.split("?")[0] url = "http://%s%s%s" % (os.environ["SERVER_NAME"], port, uri) - name = self.reponame or self.repo.ui.config("web", "name", os.getcwd()) - self.t = templater(m, common_filters, {"url":url, - "repo":name, + "repo":self.reponame, "header":header, "footer":footer, }) @@ -729,27 +728,18 @@ class hgweb: else: write(self.t("error")) -def create_server(path, name, templates, address, port, use_ipv6 = False, - accesslog = sys.stdout, errorlog = sys.stderr): +def create_server(repo): def openlog(opt, default): if opt and opt != '-': return open(opt, 'w') return default - u = ui() - repo = repository(u, path) - if not address: - address = u.config("web", "address", "") - if not port: - port = int(u.config("web", "port", 8000)) - if not use_ipv6: - use_ipv6 = u.configbool("web", "ipv6") - - accesslog = openlog(accesslog or u.config("web", "accesslog", "-"), - sys.stdout) - errorlog = openlog(errorlog or u.config("web", "errorlog", "-"), - sys.stderr) + address = repo.ui.config("web", "address", "") + port = int(repo.ui.config("web", "port", 8000)) + use_ipv6 = repo.ui.configbool("web", "ipv6") + accesslog = openlog(repo.ui.config("web", "accesslog", "-"), sys.stdout) + errorlog = openlog(repo.ui.config("web", "errorlog", "-"), sys.stderr) import BaseHTTPServer @@ -830,7 +820,7 @@ def create_server(path, name, templates, finally: sys.argv, sys.stdin, sys.stdout, sys.stderr = save - hg = hgweb(path, name, templates) + hg = hgweb(repo) if use_ipv6: return IPv6HTTPServer((address, port), hgwebhandler) else: