__init__.py
97 lines
| 2.7 KiB
| text/x-python
|
PythonLexer
Eric Hopper
|
r2391 | # hgweb/__init__.py - web interface to a mercurial repository | ||
Eric Hopper
|
r2311 | # | ||
# Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net> | ||||
# Copyright 2005 Matt Mackall <mpm@selenic.com> | ||||
# | ||||
Martin Geisler
|
r8225 | # This software may be used and distributed according to the terms of the | ||
Matt Mackall
|
r10263 | # GNU General Public License version 2 or any later version. | ||
Eric Hopper
|
r2311 | |||
Yuya Nishihara
|
r27046 | from __future__ import absolute_import | ||
Matt Mackall
|
r10996 | import os | ||
Yuya Nishihara
|
r27046 | |||
Yuya Nishihara
|
r27138 | from ..i18n import _ | ||
from .. import ( | ||||
Yuya Nishihara
|
r27139 | error, | ||
Augie Fackler
|
r34705 | pycompat, | ||
Yuya Nishihara
|
r27138 | util, | ||
) | ||||
Yuya Nishihara
|
r27046 | from . import ( | ||
hgweb_mod, | ||||
hgwebdir_mod, | ||||
Yuya Nishihara
|
r27138 | server, | ||
Yuya Nishihara
|
r27046 | ) | ||
Matt Mackall
|
r3877 | |||
Matt Mackall
|
r10996 | def hgweb(config, name=None, baseui=None): | ||
'''create an hgweb wsgi object | ||||
config can be one of: | ||||
- repo object (single repo view) | ||||
- path to repo (single repo view) | ||||
- path to config file (multi-repo view) | ||||
- dict of virtual:real pairs (multi-repo view) | ||||
- list of virtual:real tuples (multi-repo view) | ||||
''' | ||||
if ((isinstance(config, str) and not os.path.isdir(config)) or | ||||
isinstance(config, dict) or isinstance(config, list)): | ||||
# create a multi-dir interface | ||||
return hgwebdir_mod.hgwebdir(config, baseui=baseui) | ||||
return hgweb_mod.hgweb(config, name=name, baseui=baseui) | ||||
Matt Mackall
|
r3877 | |||
Matt Mackall
|
r10992 | def hgwebdir(config, baseui=None): | ||
return hgwebdir_mod.hgwebdir(config, baseui=baseui) | ||||
Matt Mackall
|
r3877 | |||
Yuya Nishihara
|
r27138 | class httpservice(object): | ||
def __init__(self, ui, app, opts): | ||||
self.ui = ui | ||||
self.app = app | ||||
self.opts = opts | ||||
def init(self): | ||||
util.setsignalhandler() | ||||
self.httpd = server.create_server(self.ui, self.app) | ||||
if self.opts['port'] and not self.ui.verbose: | ||||
return | ||||
if self.httpd.prefix: | ||||
prefix = self.httpd.prefix.strip('/') + '/' | ||||
else: | ||||
prefix = '' | ||||
Augie Fackler
|
r34705 | port = r':%d' % self.httpd.port | ||
if port == r':80': | ||||
port = r'' | ||||
Yuya Nishihara
|
r27138 | |||
bindaddr = self.httpd.addr | ||||
Augie Fackler
|
r34705 | if bindaddr == r'0.0.0.0': | ||
bindaddr = r'*' | ||||
elif r':' in bindaddr: # IPv6 | ||||
bindaddr = r'[%s]' % bindaddr | ||||
Yuya Nishihara
|
r27138 | |||
fqaddr = self.httpd.fqaddr | ||||
Augie Fackler
|
r34705 | if r':' in fqaddr: | ||
fqaddr = r'[%s]' % fqaddr | ||||
Yuya Nishihara
|
r27138 | if self.opts['port']: | ||
write = self.ui.status | ||||
else: | ||||
write = self.ui.write | ||||
write(_('listening at http://%s%s/%s (bound to %s:%d)\n') % | ||||
Augie Fackler
|
r34705 | (pycompat.sysbytes(fqaddr), pycompat.sysbytes(port), | ||
prefix, pycompat.sysbytes(bindaddr), self.httpd.port)) | ||||
Yuya Nishihara
|
r27138 | self.ui.flush() # avoid buffering of status message | ||
def run(self): | ||||
self.httpd.serve_forever() | ||||
Yuya Nishihara
|
r27139 | |||
Yuya Nishihara
|
r30508 | def createapp(baseui, repo, webconf): | ||
Yuya Nishihara
|
r27181 | if webconf: | ||
Yuya Nishihara
|
r30508 | return hgwebdir_mod.hgwebdir(webconf, baseui=baseui) | ||
Yuya Nishihara
|
r27181 | else: | ||
Yuya Nishihara
|
r27139 | if not repo: | ||
raise error.RepoError(_("there is no Mercurial repository" | ||||
" here (.hg not found)")) | ||||
Yuya Nishihara
|
r30508 | return hgweb_mod.hgweb(repo, baseui=baseui) | ||