diff options
author | Joey Hess <joey@kitenet.net> | 2013-01-15 13:34:59 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-01-15 13:34:59 -0400 |
commit | b236c46dbb20cfbb42201b7cccdaa153b7bd2ed1 (patch) | |
tree | 59915ff94b6cb0bb1df8858f30e06b5408af8b44 /Utility | |
parent | fd9d5f0d9c3de99c53ba12c85e6c985baeb38901 (diff) |
webapp: Now always logs to .git/annex/daemon.log
It used to not log to daemon.log when a repository was first created, and
when starting the webapp. Now both do. Redirecting stdout and stderr to the
log is tricky when starting the webapp, because the web browser may want to
communicate with the user. (Either a console web browser, or web.browser = echo)
This is handled by restoring the original fds when running the browser.
Diffstat (limited to 'Utility')
-rw-r--r-- | Utility/Daemon.hs | 18 | ||||
-rw-r--r-- | Utility/WebApp.hs | 12 |
2 files changed, 16 insertions, 14 deletions
diff --git a/Utility/Daemon.hs b/Utility/Daemon.hs index 16245268e..185ea3e68 100644 --- a/Utility/Daemon.hs +++ b/Utility/Daemon.hs @@ -34,16 +34,22 @@ daemonize logfd pidfile changedirectory a = do when changedirectory $ setCurrentDirectory "/" nullfd <- openFd "/dev/null" ReadOnly Nothing defaultFileFlags - _ <- redir nullfd stdInput - mapM_ (redir logfd) [stdOutput, stdError] - closeFd logfd + redir nullfd stdInput + redirLog logfd a out - redir newh h = do - closeFd h - dupTo newh h out = exitImmediately ExitSuccess +redirLog :: Fd -> IO () +redirLog logfd = do + mapM_ (redir logfd) [stdOutput, stdError] + closeFd logfd + +redir :: Fd -> Fd -> IO () +redir newh h = do + closeFd h + void $ dupTo newh h + {- Locks the pid file, with an exclusive, non-blocking lock. - Writes the pid to the file, fully atomically. - Fails if the pid file is already locked by another process. -} diff --git a/Utility/WebApp.hs b/Utility/WebApp.hs index 51300c9cf..c6aae9db5 100644 --- a/Utility/WebApp.hs +++ b/Utility/WebApp.hs @@ -40,16 +40,12 @@ import Control.Concurrent localhost :: String localhost = "localhost" -{- Runs a web browser on a given url. - - - - Note: The url *will* be visible to an attacker. -} -runBrowser :: String -> (Maybe [(String, String)]) -> IO Bool -runBrowser url env = boolSystemEnv cmd [Param url] env - where +{- Command to use to run a web browser. -} +browserCommand :: FilePath #ifdef darwin_HOST_OS - cmd = "open" +browserCommand = "open" #else - cmd = "xdg-open" +browserCommand = "xdg-open" #endif {- Binds to a socket on localhost, and runs a webapp on it. |