From 1863185693f407a35f1b9e92d402e43409966928 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 17 Jun 2012 14:02:58 -0400 Subject: [PATCH] startup check fixes Move lsof check, and display a message before daemon startup if on an unsupported OS. --- Assistant.hs | 16 ++-------------- Assistant/Watcher.hs | 22 ++++++++++++++++++++-- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Assistant.hs b/Assistant.hs index 54556616df..f5acc2ef8a 100644 --- a/Assistant.hs +++ b/Assistant.hs @@ -49,7 +49,6 @@ import Assistant.DaemonStatus import Assistant.Watcher import Assistant.Committer import Assistant.SanityChecker -import qualified Annex import qualified Utility.Daemon import Utility.LogFile @@ -65,12 +64,8 @@ startDaemon foreground pidfile <- fromRepo gitAnnexPidFile go $ Utility.Daemon.daemonize logfd (Just pidfile) False where - go a = ifM (liftIO $ inPath "lsof") - ( go a - , ifM (Annex.getState Annex.force) - (start a, needlsof) - ) - start a = withThreadState $ \st -> do + go a = withThreadState $ \st -> do + checkCanWatch dstatus <- startDaemonStatus liftIO $ a $ do changechan <- newChangeChan @@ -84,12 +79,5 @@ startDaemon foreground _ <- forkIO $ sanityCheckerThread st dstatus changechan watchThread st dstatus changechan - needlsof = error $ unlines - [ "The lsof command is needed for watch mode to be safe, and is not in PATH." - , "To override lsof checks to ensure that files are not open for writing" - , "when added to the annex, you can use --force" - , "Be warned: This can corrupt data in the annex, and make fsck complain." - ] - stopDaemon :: Annex () stopDaemon = liftIO . Utility.Daemon.stopDaemon =<< fromRepo gitAnnexPidFile diff --git a/Assistant/Watcher.hs b/Assistant/Watcher.hs index 4aac33fd1f..5af39ea88f 100644 --- a/Assistant/Watcher.hs +++ b/Assistant/Watcher.hs @@ -13,13 +13,14 @@ import Common.Annex import Assistant.ThreadedMonad import Assistant.DaemonStatus import Assistant.Committer -import Utility.ThreadLock +import Utility.ThreadScheduler import qualified Annex.Queue import qualified Git.Command import qualified Git.UpdateIndex import qualified Git.HashObject import qualified Git.LsFiles import qualified Backend +import qualified Annex import Annex.Content import Annex.CatFile import Git.Types @@ -35,6 +36,23 @@ import System.INotify type Handler = FilePath -> Maybe FileStatus -> DaemonStatusHandle -> Annex (Maybe Change) +checkCanWatch :: Annex () +checkCanWatch = do +#if defined linux_HOST_OS + unlessM (liftIO (inPath "lsof") <||> Annex.getState Annex.force) $ + needLsof +#else + error "watch mode is currently only available in Linux" +#endif + +needLsof :: Annex () +needLsof = error $ unlines + [ "The lsof command is needed for watch mode to be safe, and is not in PATH." + , "To override lsof checks to ensure that files are not open for writing" + , "when added to the annex, you can use --force" + , "Be warned: This can corrupt data in the annex, and make fsck complain." + ] + watchThread :: ThreadState -> DaemonStatusHandle -> ChangeChan -> IO () #if defined linux_HOST_OS watchThread st dstatus changechan = withINotify $ \i -> do @@ -61,7 +79,7 @@ watchThread st dstatus changechan = withINotify $ \i -> do , errHook = hook onErr } #else -watchThread = error "so far only available on Linux" +watchThread = undefined #endif ignored :: FilePath -> Bool