29
29
from loggerhead.apps.filesystem import (
30
30
BranchesFromFileSystemRoot, UserBranchesFromFileSystemRoot)
32
_reloader_environ_key = 'PYTHON_RELOADER_SHOULD_RUN'
33
34
def command_line_parser():
34
35
parser = OptionParser("%prog [options] <path>")
40
41
help="Serve user directories as ~user.")
41
42
parser.add_option("--trunk-dir", metavar="DIR",
42
43
help="The directory that contains the trunk branches.")
44
parser.add_option("--port", dest="user_port",
45
help="Port Loggerhead should listen on (defaults to 8080).")
46
parser.add_option("--host", dest="user_host",
47
help="Host Loggerhead should listen on.")
48
parser.add_option("--prefix", dest="user_prefix",
49
help="Specify host prefix.")
50
parser.add_option("--reload", action="store_true", dest="reload",
51
help="Use a file monitor to restart the application")
43
52
parser.add_option("--version", action="store_true", dest="show_version",
44
53
help="Print the software version and exit")
71
80
if options.trunk_dir and not options.user_dirs:
72
81
print "--trunk-dir is only valid with --user-dirs"
85
if os.environ.get(_reloader_environ_key):
86
from paste import reloader
87
reloader.install(int(1))
89
return restart_with_reloader()
75
91
if options.user_dirs:
76
92
if not options.trunk_dir:
82
98
app = HTTPExceptionHandler(app)
83
99
app = TransLogger(app)
101
if not options.user_prefix:
104
prefix = options.user_prefix
86
107
from paste.deploy.config import PrefixMiddleware
87
108
except ImportError:
90
app = PrefixMiddleware(app)
92
httpserver.serve(app, host='0.0.0.0', port='8080')
111
app = PrefixMiddleware(app, prefix=prefix)
113
if not options.user_port:
116
port = options.user_port
118
if not options.user_host:
121
host = options.user_host
123
httpserver.serve(app, host=host, port=port)
126
def restart_with_reloader():
127
print 'Starting subprocess with file monitor'
129
args = [sys.executable] + sys.argv
130
new_environ = os.environ.copy()
131
new_environ[_reloader_environ_key] = 'true'
135
import paste.script.serve
137
paste.script.serve._turn_sigterm_into_systemexit()
138
proc = subprocess.Popen(args, env=new_environ)
139
exit_code = proc.wait()
141
except KeyboardInterrupt:
142
print '^C caught in monitor process'
146
and hasattr(os, 'kill')):
149
os.kill(proc.pid, signal.SIGTERM)
150
except (OSError, IOError):
153
# Reloader always exits with code 3; but if we are
154
# a monitor, any exit code will restart
157
print '-'*20, 'Restarting', '-'*20
95
160
if __name__ == "__main__":