Access to the root directory or any other non-leaf directory raises a IOError
[jelmer/calypso.git] / calypso.py
index 6f74b6f3c4cebed239ea2a0aca7d0a82a36692bf..78baa91d0433c466dab167be661b9c4257f2a1c5 100755 (executable)
@@ -37,6 +37,7 @@ arguments.
 # TODO: Manage smart and configurable logs
 
 import daemon
+import lockfile
 import logging
 import optparse
 import os
@@ -46,11 +47,7 @@ import calypso
 import calypso.webdav as webdav
 
 # Get command-line options
-parser = optparse.OptionParser()
-parser.add_option(
-    "-v", "--version", action="store_true",
-    default=False,
-    help="show version and exit")
+parser = optparse.OptionParser(version=calypso.VERSION)
 parser.add_option(
     "-d", "--daemon", action="store_true",
     default=calypso.config.getboolean("server", "daemon"),
@@ -87,6 +84,10 @@ parser.add_option(
     "-g", "--debug", action="store_true",
     default=False,
     help="enable debug logging")
+parser.add_option(
+    "-P", "--pid-file", dest="pidfile",
+    default=calypso.config.get("server", "pidfile"),
+    help="set location of process-id file")
     
 (options, args) = parser.parse_args()
 
@@ -97,11 +98,6 @@ for option in parser.option_list:
         value = getattr(options, key)
         calypso.config.set("server", key, value)
 
-# Print version and exit if the option is given
-if options.version:
-    print(calypso.VERSION)
-    sys.exit()
-
 log = logging.getLogger()
 ch = logging.StreamHandler()
 
@@ -134,11 +130,17 @@ if options.import_dest:
         sys.exit(1)
 
 def run_server():
-    # Launch server
-    server_class = calypso.HTTPSServer if options.ssl else calypso.HTTPServer
-    server = server_class(
-        (options.host, options.port), calypso.CollectionHTTPHandler)
-    server.serve_forever(poll_interval=10)
+    try:
+        # Launch server
+        log.debug("Starting HTTP%s server on %s:%d" % ("S" if options.ssl else "",
+                                                       options.host if options.host else "*",
+                                                       options.port))
+        server_class = calypso.HTTPSServer if options.ssl else calypso.HTTPServer
+        server = server_class(
+            (options.host, options.port), calypso.CollectionHTTPHandler)
+        server.serve_forever(poll_interval=10)
+    except KeyboardInterrupt:
+        server.socket.close()
 
 # If foreground execution is requested, just run the server
 if not options.daemon:
@@ -148,6 +150,10 @@ if not options.daemon:
 # Otherwise, daemonize Calypso
 context = daemon.DaemonContext()
 context.umask = 0o002
+if options.pidfile:
+    from lockfile import pidlockfile
+    # Generate a pidfile where requested
+    context.pidfile = pidlockfile.PIDLockFile(options.pidfile)
 with context:
     run_server()