comparison mercurial/hgweb/__init__.py @ 27138:ea8e27e6098d

hgweb: move httpservice object from commands module This avoids the deep import of hgweb.server at the commands module.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 31 Oct 2015 21:57:45 +0900
parents 37fcfe52c68c
children d73f23344dc7
comparison
equal deleted inserted replaced
27137:25e4b2f000c5 27138:ea8e27e6098d
8 8
9 from __future__ import absolute_import 9 from __future__ import absolute_import
10 10
11 import os 11 import os
12 12
13 from ..i18n import _
14
15 from .. import (
16 util,
17 )
18
13 from . import ( 19 from . import (
14 hgweb_mod, 20 hgweb_mod,
15 hgwebdir_mod, 21 hgwebdir_mod,
22 server,
16 ) 23 )
17 24
18 def hgweb(config, name=None, baseui=None): 25 def hgweb(config, name=None, baseui=None):
19 '''create an hgweb wsgi object 26 '''create an hgweb wsgi object
20 27
33 return hgweb_mod.hgweb(config, name=name, baseui=baseui) 40 return hgweb_mod.hgweb(config, name=name, baseui=baseui)
34 41
35 def hgwebdir(config, baseui=None): 42 def hgwebdir(config, baseui=None):
36 return hgwebdir_mod.hgwebdir(config, baseui=baseui) 43 return hgwebdir_mod.hgwebdir(config, baseui=baseui)
37 44
45 class httpservice(object):
46 def __init__(self, ui, app, opts):
47 self.ui = ui
48 self.app = app
49 self.opts = opts
50
51 def init(self):
52 util.setsignalhandler()
53 self.httpd = server.create_server(self.ui, self.app)
54
55 if self.opts['port'] and not self.ui.verbose:
56 return
57
58 if self.httpd.prefix:
59 prefix = self.httpd.prefix.strip('/') + '/'
60 else:
61 prefix = ''
62
63 port = ':%d' % self.httpd.port
64 if port == ':80':
65 port = ''
66
67 bindaddr = self.httpd.addr
68 if bindaddr == '0.0.0.0':
69 bindaddr = '*'
70 elif ':' in bindaddr: # IPv6
71 bindaddr = '[%s]' % bindaddr
72
73 fqaddr = self.httpd.fqaddr
74 if ':' in fqaddr:
75 fqaddr = '[%s]' % fqaddr
76 if self.opts['port']:
77 write = self.ui.status
78 else:
79 write = self.ui.write
80 write(_('listening at http://%s%s/%s (bound to %s:%d)\n') %
81 (fqaddr, port, prefix, bindaddr, self.httpd.port))
82 self.ui.flush() # avoid buffering of status message
83
84 def run(self):
85 self.httpd.serve_forever()