comparison mercurial/server.py @ 30518:add7bcad1d9c

server: move service factory from hgweb
author Yuya Nishihara <yuya@tcha.org>
date Sat, 15 Oct 2016 14:09:36 +0900
parents dd539e2d89aa
children a0878bc87379
comparison
equal deleted inserted replaced
30517:9195bc4cb816 30518:add7bcad1d9c
15 from .i18n import _ 15 from .i18n import _
16 16
17 from . import ( 17 from . import (
18 commandserver, 18 commandserver,
19 error, 19 error,
20 hgweb,
20 util, 21 util,
21 ) 22 )
22 23
23 def runservice(opts, parentfn=None, initfn=None, runfn=None, logfile=None, 24 def runservice(opts, parentfn=None, initfn=None, runfn=None, logfile=None,
24 runargs=None, appendpid=False): 25 runargs=None, appendpid=False):
116 mode = opts['cmdserver'] 117 mode = opts['cmdserver']
117 try: 118 try:
118 return _cmdservicemap[mode](ui, repo, opts) 119 return _cmdservicemap[mode](ui, repo, opts)
119 except KeyError: 120 except KeyError:
120 raise error.Abort(_('unknown mode %s') % mode) 121 raise error.Abort(_('unknown mode %s') % mode)
122
123 def createhgwebservice(ui, repo, opts):
124 # this way we can check if something was given in the command-line
125 if opts.get('port'):
126 opts['port'] = util.getport(opts.get('port'))
127
128 alluis = set([ui])
129 if repo:
130 baseui = repo.baseui
131 alluis.update([repo.baseui, repo.ui])
132 else:
133 baseui = ui
134 webconf = opts.get('web_conf') or opts.get('webdir_conf')
135 if webconf:
136 # load server settings (e.g. web.port) to "copied" ui, which allows
137 # hgwebdir to reload webconf cleanly
138 servui = ui.copy()
139 servui.readconfig(webconf, sections=['web'])
140 alluis.add(servui)
141 else:
142 servui = ui
143
144 optlist = ("name templates style address port prefix ipv6"
145 " accesslog errorlog certificate encoding")
146 for o in optlist.split():
147 val = opts.get(o, '')
148 if val in (None, ''): # should check against default options instead
149 continue
150 for u in alluis:
151 u.setconfig("web", o, val, 'serve')
152
153 app = hgweb.createapp(baseui, repo, webconf)
154 return hgweb.httpservice(servui, app, opts)