~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to serve-branches

  • Committer: Michael Hudson
  • Date: 2008-08-01 04:48:26 UTC
  • mfrom: (189.1.2 user-aware)
  • Revision ID: michael.hudson@canonical.com-20080801044826-3b1601affjg9uo9u
Merge Tim's changes to support the url traversal we want on bzr-playground.
On the way, clean up how paths get passed around loggerhead/apps/filesystem.py
and add the first hints of configuration for the serve-branches script.

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
19
20
import sys
20
21
 
 
22
from optparse import OptionParser
 
23
 
21
24
from paste import httpserver
22
25
from paste.httpexceptions import HTTPExceptionHandler
23
26
from paste.translogger import TransLogger
24
27
 
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')
 
28
from loggerhead import __version__
 
29
from loggerhead.apps.filesystem import (
 
30
    BranchesFromFileSystemRoot, UserBranchesFromFileSystemRoot)
 
31
 
 
32
 
 
33
def command_line_parser():
 
34
    parser = OptionParser("%prog [options] <path>")
 
35
    parser.set_defaults(
 
36
        user_dirs=False,
 
37
        show_version=False,
 
38
        )
 
39
    parser.add_option("--user-dirs", action="store_true", dest="user_dirs",
 
40
                      help="Serve user directories as ~user.")
 
41
    parser.add_option("--trunk-dir", metavar="DIR",
 
42
                      help="The directory that contains the trunk branches.")
 
43
    parser.add_option("--version", action="store_true", dest="show_version",
 
44
                      help="Print the software version and exit")
 
45
    return parser
 
46
 
 
47
 
 
48
def main(args):
 
49
    logging.basicConfig()
 
50
    logging.getLogger().setLevel(logging.DEBUG)
 
51
 
 
52
    parser = command_line_parser()
 
53
    (options, args) = parser.parse_args(sys.argv[1:])
 
54
 
 
55
    if options.show_version:
 
56
        print "loggerhead %s" % __version__
 
57
        sys.exit(0)
 
58
 
 
59
    if len(args) > 1:
 
60
        parser.print_help()
 
61
        sys.exit(1)
 
62
    elif len(args) == 1:
 
63
        [path] = args
 
64
    else:
 
65
        path = '.'
 
66
 
 
67
    if not os.path.isdir(path):
 
68
        print "%s is not a directory" % path
 
69
        sys.exit(1)
 
70
 
 
71
    if options.trunk_dir and not options.user_dirs:
 
72
        print "--trunk-dir is only valid with --user-dirs"
 
73
        sys.exit(1)
 
74
 
 
75
    if options.user_dirs:
 
76
        if not options.trunk_dir:
 
77
            print "You didn't specify a directory for the trunk directories."
 
78
            sys.exit(1)
 
79
        app = UserBranchesFromFileSystemRoot(path, options.trunk_dir)
 
80
    else:
 
81
        app = BranchesFromFileSystemRoot(path)
 
82
    app = HTTPExceptionHandler(app)
 
83
    app = TransLogger(app)
 
84
 
 
85
    try:
 
86
        from paste.deploy.config import PrefixMiddleware
 
87
    except ImportError:
 
88
        pass
 
89
    else:
 
90
        app = PrefixMiddleware(app)
 
91
 
 
92
    httpserver.serve(app, host='0.0.0.0', port='8080')
 
93
 
 
94
 
 
95
if __name__ == "__main__":
 
96
    main(sys.argv)