16
16
"""Search for branches underneath a directory and serve them all."""
22
from bzrlib.plugin import load_plugins
23
from bzrlib.transport import get_transport
21
25
from paste import httpserver
22
from paste.httpexceptions import HTTPExceptionHandler
26
from paste.httpexceptions import HTTPExceptionHandler, HTTPInternalServerError
23
27
from paste.translogger import TransLogger
25
from loggerhead.apps.filesystem import BranchesFromFileSystemRoot
29
logging.getLogger().setLevel(logging.DEBUG)
36
app = BranchesFromFileSystemRoot(path)
38
app = HTTPExceptionHandler(app)
39
app = TransLogger(app)
42
from paste.deploy.config import PrefixMiddleware
46
app = PrefixMiddleware(app)
48
#from paste.evalexception import EvalException
49
#app = EvalException(app)
51
httpserver.serve(app, host='0.0.0.0', port='8080')
29
from loggerhead import __version__
30
from loggerhead.apps.transport import (
31
BranchesFromTransportRoot, UserBranchesFromTransportRoot)
32
from loggerhead.config import LoggerheadConfig
33
from loggerhead.util import Reloader
34
from loggerhead.apps.error import ErrorHandlerApp
38
config = LoggerheadConfig()
40
if config.get_option('show_version'):
41
print "loggerhead %s" % __version__
44
if config.arg_count > 1:
47
elif config.arg_count == 1:
48
path = config.get_arg(0)
54
transport = get_transport(path)
56
if config.get_option('trunk_dir') and not config.get_option('user_dirs'):
57
print "--trunk-dir is only valid with --user-dirs"
60
if config.get_option('reload'):
61
if Reloader.is_installed():
64
return Reloader.restart_with_reloader()
66
if config.get_option('user_dirs'):
67
if not config.get_option('trunk_dir'):
68
print "You didn't specify a directory for the trunk directories."
70
app = UserBranchesFromTransportRoot(transport, config)
72
app = BranchesFromTransportRoot(transport, config)
76
logging.getLogger('').setLevel(logging.DEBUG)
77
logger = getattr(app, 'log', logging.getLogger('loggerhead'))
78
if config.get_option('log_folder'):
79
logfile_path = os.path.join(
80
config.get_option('log_folder'), 'serve-branches.log')
82
logfile_path = 'serve-branches.log'
83
logfile = logging.FileHandler(logfile_path, 'a')
84
formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(name)s:'
86
logfile.setFormatter(formatter)
87
logfile.setLevel(logging.DEBUG)
88
logger.addHandler(logfile)
90
# setup_logging() #end
92
app = TransLogger(app, logger=logger)
93
if config.get_option('profile'):
94
from loggerhead.middleware.profile import LSProfMiddleware
95
app = LSProfMiddleware(app)
96
if config.get_option('memory_profile'):
97
from dozer import Dozer
100
if not config.get_option('user_prefix'):
103
prefix = config.get_option('user_prefix')
104
if not prefix.startswith('/'):
105
prefix = '/' + prefix
108
from paste.deploy.config import PrefixMiddleware
110
cant_proxy_correctly_message = (
111
'Unsupported configuration: PasteDeploy not available, but '
112
'loggerhead appears to be behind a proxy.')
113
def check_not_proxied(app):
114
def wrapped(environ, start_response):
115
if 'HTTP_X_FORWARDED_SERVER' in environ:
116
exc = HTTPInternalServerError()
117
exc.explanation = cant_proxy_correctly_message
119
return app(environ, start_response)
121
app = check_not_proxied(app)
123
app = PrefixMiddleware(app, prefix=prefix)
125
app = HTTPExceptionHandler(app)
126
app = ErrorHandlerApp(app)
128
if not config.get_option('user_port'):
131
port = config.get_option('user_port')
133
if not config.get_option('user_host'):
136
host = config.get_option('user_host')
138
httpserver.serve(app, host=host, port=port)
141
if __name__ == "__main__":