30
30
starts a web server to browse the contents of a branch.
33
version_info = (1, 17, 0)
33
version_info = (1, 11, 0)
35
35
if __name__ == 'bzrlib.plugins.loggerhead':
37
37
from bzrlib.api import require_any_api
39
require_any_api(bzrlib, [
40
(1, 13, 0), (1, 15, 0), (1, 16, 0), (1, 17, 0), (1, 18, 0),
41
(2, 0, 0), (2, 1, 0)])
39
require_any_api(bzrlib, [(1, 11, 0), (1, 13, 0), (1, 15, 0)])
43
41
# NB: Normally plugins should lazily load almost everything, but this
44
42
# seems reasonable to have in-line here: bzrlib.commands and options are
45
43
# normally loaded, and the rest of loggerhead won't be loaded until serve
48
46
# transport_server_registry was added in bzr 1.16. When we drop support for
49
47
# older releases, we can remove the code to override cmd_serve.
56
54
DEFAULT_HOST = '0.0.0.0'
57
55
DEFAULT_PORT = 8080
58
HELP = ('Loggerhead, a web-based code viewer and server. (default port: %d)' %
56
HELP = ('Loggerhead web-based code viewer and server. (default port: %d)' %
61
59
def serve_http(transport, host=None, port=None, inet=None):
62
from paste.httpexceptions import HTTPExceptionHandler
63
from paste.httpserver import serve
65
60
# loggerhead internal code will try to 'import loggerhead', so
66
61
# let's put it on the path if we can't find it in the existing path
73
68
from loggerhead.apps.transport import BranchesFromTransportRoot
74
69
from loggerhead.config import LoggerheadConfig
70
from paste.httpexceptions import HTTPExceptionHandler
71
from paste.httpserver import serve
77
73
host = DEFAULT_HOST
79
75
port = DEFAULT_PORT
80
argv = ['--host', host, '--port', str(port), '--', transport.base]
81
if not transport.is_readonly():
82
argv.insert(0, '--allow-writes')
76
argv = ['--host', host, '--port', str(port), transport.base]
83
77
config = LoggerheadConfig(argv)
84
app = BranchesFromTransportRoot(transport.base, config)
78
app = BranchesFromTransportRoot(transport, config)
85
79
app = HTTPExceptionHandler(app)
86
80
serve(app, host=host, port=port)
103
97
def run(self, *args, **kw):
105
99
from bzrlib.transport import get_transport
106
allow_writes = kw.get('allow_writes', False)
107
100
path = kw.get('directory', '.')
108
101
port = kw.get('port', DEFAULT_PORT)
109
102
# port might be an int already...
111
104
host, port = port.split(':')
113
106
host = DEFAULT_HOST
115
transport = get_transport(path)
117
transport = get_transport('readonly+' + path)
107
transport = get_transport(path)
118
108
serve_http(transport, host, port)
120
110
super(cmd_serve, self).run(*args, **kw)