__init__.py
95 lines
| 2.6 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, | ||
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 = '' | ||||
port = ':%d' % self.httpd.port | ||||
if port == ':80': | ||||
port = '' | ||||
bindaddr = self.httpd.addr | ||||
if bindaddr == '0.0.0.0': | ||||
bindaddr = '*' | ||||
elif ':' in bindaddr: # IPv6 | ||||
bindaddr = '[%s]' % bindaddr | ||||
fqaddr = self.httpd.fqaddr | ||||
if ':' in fqaddr: | ||||
fqaddr = '[%s]' % fqaddr | ||||
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') % | ||||
(fqaddr, port, prefix, bindaddr, self.httpd.port)) | ||||
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) | ||