~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to serve-branches

  • Committer: Martin Albisetti
  • Date: 2008-07-29 20:42:35 UTC
  • mto: This revision was merged to the branch mainline in revision 188.
  • Revision ID: argentina@gmail.com-20080729204235-nhhd02ll6vegonqp
Ignore build/

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
"""Search for branches underneath a directory and serve them all."""
17
17
 
18
18
import logging
19
 
import os
20
19
import sys
21
20
 
22
 
from bzrlib.plugin import load_plugins
23
 
from bzrlib.transport import get_transport
24
 
 
25
21
from paste import httpserver
26
 
from paste.httpexceptions import HTTPExceptionHandler, HTTPInternalServerError
 
22
from paste.httpexceptions import HTTPExceptionHandler
27
23
from paste.translogger import TransLogger
28
24
 
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
35
 
 
36
 
 
37
 
def main(args):
38
 
    config = LoggerheadConfig()
39
 
 
40
 
    if config.get_option('show_version'):
41
 
        print "loggerhead %s" % __version__
42
 
        sys.exit(0)
43
 
 
44
 
    if config.arg_count > 1:
45
 
        config.print_help()
46
 
        sys.exit(1)
47
 
    elif config.arg_count == 1:
48
 
        path = config.get_arg(0)
49
 
    else:
50
 
        path = '.'
51
 
 
52
 
    load_plugins()
53
 
 
54
 
    transport = get_transport(path)
55
 
 
56
 
    if config.get_option('trunk_dir') and not config.get_option('user_dirs'):
57
 
        print "--trunk-dir is only valid with --user-dirs"
58
 
        sys.exit(1)
59
 
 
60
 
    if config.get_option('reload'):
61
 
        if Reloader.is_installed():
62
 
            Reloader.install()
63
 
        else:
64
 
            return Reloader.restart_with_reloader()
65
 
 
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."
69
 
            sys.exit(1)
70
 
        app = UserBranchesFromTransportRoot(transport, config)
71
 
    else:
72
 
        app = BranchesFromTransportRoot(transport, config)
73
 
 
74
 
    # setup_logging()
75
 
    logging.basicConfig()
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')
81
 
    else:
82
 
        logfile_path = 'serve-branches.log'
83
 
    logfile = logging.FileHandler(logfile_path, 'a')
84
 
    formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(name)s:'
85
 
                                  ' %(message)s')
86
 
    logfile.setFormatter(formatter)
87
 
    logfile.setLevel(logging.DEBUG)
88
 
    logger.addHandler(logfile)
89
 
 
90
 
    # setup_logging() #end
91
 
 
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
98
 
        app = Dozer(app)
99
 
 
100
 
    if not config.get_option('user_prefix'):
101
 
        prefix = '/'
102
 
    else:
103
 
        prefix = config.get_option('user_prefix')
104
 
        if not prefix.startswith('/'):
105
 
            prefix = '/' + prefix
106
 
 
107
 
    try:
108
 
        from paste.deploy.config import PrefixMiddleware
109
 
    except ImportError:
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
118
 
                    raise exc
119
 
                return app(environ, start_response)
120
 
            return wrapped
121
 
        app = check_not_proxied(app)
122
 
    else:
123
 
        app = PrefixMiddleware(app, prefix=prefix)
124
 
 
125
 
    app = HTTPExceptionHandler(app)
126
 
    app = ErrorHandlerApp(app)
127
 
 
128
 
    if not config.get_option('user_port'):
129
 
        port = '8080'
130
 
    else:
131
 
        port = config.get_option('user_port')
132
 
 
133
 
    if not config.get_option('user_host'):
134
 
        host = '0.0.0.0'
135
 
    else:
136
 
        host = config.get_option('user_host')
137
 
 
138
 
    httpserver.serve(app, host=host, port=port)
139
 
 
140
 
 
141
 
if __name__ == "__main__":
142
 
    main(sys.argv)
 
25
from loggerhead.apps.filesystem import BranchesFromFileSystemRoot
 
26
 
 
27
 
 
28
logging.basicConfig()
 
29
logging.getLogger().setLevel(logging.DEBUG)
 
30
 
 
31
if len(sys.argv) > 1:
 
32
    path = sys.argv[1]
 
33
else:
 
34
    path = '.'
 
35
 
 
36
app = BranchesFromFileSystemRoot(path)
 
37
 
 
38
app = HTTPExceptionHandler(app)
 
39
app = TransLogger(app)
 
40
 
 
41
try:
 
42
    from paste.deploy.config import PrefixMiddleware
 
43
except ImportError:
 
44
    pass
 
45
else:
 
46
    app = PrefixMiddleware(app)
 
47
 
 
48
#from paste.evalexception import EvalException
 
49
#app = EvalException(app)
 
50
 
 
51
httpserver.serve(app, host='0.0.0.0', port='8080')