changeset 27139:d73f23344dc7

hgweb: extract factory function of httpservice object The next patch will merge the cmdutil.service() calls of both commandserver and hgweb. Before doing it, this patch wipes out the code specific to hgweb from commands.serve().
author Yuya Nishihara <yuya@tcha.org>
date Sat, 31 Oct 2015 22:15:16 +0900
parents ea8e27e6098d
children dfdac09b57dd
files mercurial/commands.py mercurial/hgweb/__init__.py
diffstat 2 files changed, 31 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Sat Oct 31 21:57:45 2015 +0900
+++ b/mercurial/commands.py	Sat Oct 31 22:15:16 2015 +0900
@@ -5974,33 +5974,7 @@
         service = commandserver.createservice(ui, repo, opts)
         return cmdutil.service(opts, initfn=service.init, runfn=service.run)
 
-    # this way we can check if something was given in the command-line
-    if opts.get('port'):
-        opts['port'] = util.getport(opts.get('port'))
-
-    if repo:
-        baseui = repo.baseui
-    else:
-        baseui = ui
-    optlist = ("name templates style address port prefix ipv6"
-               " accesslog errorlog certificate encoding")
-    for o in optlist.split():
-        val = opts.get(o, '')
-        if val in (None, ''): # should check against default options instead
-            continue
-        baseui.setconfig("web", o, val, 'serve')
-        if repo and repo.ui != baseui:
-            repo.ui.setconfig("web", o, val, 'serve')
-
-    o = opts.get('web_conf') or opts.get('webdir_conf')
-    if not o:
-        if not repo:
-            raise error.RepoError(_("there is no Mercurial repository"
-                                    " here (.hg not found)"))
-        o = repo
-
-    app = hgweb.hgweb(o, baseui=baseui)
-    service = hgweb.httpservice(ui, app, opts)
+    service = hgweb.createservice(ui, repo, opts)
     cmdutil.service(opts, initfn=service.init, runfn=service.run)
 
 @command('^status|st',
--- a/mercurial/hgweb/__init__.py	Sat Oct 31 21:57:45 2015 +0900
+++ b/mercurial/hgweb/__init__.py	Sat Oct 31 22:15:16 2015 +0900
@@ -13,6 +13,7 @@
 from ..i18n import _
 
 from .. import (
+    error,
     util,
 )
 
@@ -83,3 +84,32 @@
 
     def run(self):
         self.httpd.serve_forever()
+
+def createservice(ui, repo, opts):
+    # this way we can check if something was given in the command-line
+    if opts.get('port'):
+        opts['port'] = util.getport(opts.get('port'))
+
+    if repo:
+        baseui = repo.baseui
+    else:
+        baseui = ui
+    optlist = ("name templates style address port prefix ipv6"
+               " accesslog errorlog certificate encoding")
+    for o in optlist.split():
+        val = opts.get(o, '')
+        if val in (None, ''): # should check against default options instead
+            continue
+        baseui.setconfig("web", o, val, 'serve')
+        if repo and repo.ui != baseui:
+            repo.ui.setconfig("web", o, val, 'serve')
+
+    o = opts.get('web_conf') or opts.get('webdir_conf')
+    if not o:
+        if not repo:
+            raise error.RepoError(_("there is no Mercurial repository"
+                                    " here (.hg not found)"))
+        o = repo
+
+    app = hgweb(o, baseui=baseui)
+    return httpservice(ui, app, opts)