diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-05-01 13:53:45 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-05-01 13:53:45 -0400 |
commit | 4e1898c1ceff2f37088c888d3ed4ffd0e4ba3cc2 (patch) | |
tree | 1070b782590b4acf4130326e81ce85f2cf9d38f9 /Command | |
parent | e231ce9c4dfad49a19c22683eb3109b604829f70 (diff) |
assistant: Added --autostop to complement --autostart.
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Assistant.hs | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/Command/Assistant.hs b/Command/Assistant.hs index 590a2e437..97bc08c7b 100644 --- a/Command/Assistant.hs +++ b/Command/Assistant.hs @@ -20,7 +20,7 @@ import Assistant.Install import System.Environment cmd :: [Command] -cmd = [noRepo checkAutoStart $ dontCheck repoExists $ withOptions options $ +cmd = [noRepo checkNoRepoOpts $ dontCheck repoExists $ withOptions options $ notBareRepo $ command "assistant" paramNothing seek SectionCommon "automatically sync changes"] @@ -30,11 +30,15 @@ options = , Command.Watch.stopOption , autoStartOption , startDelayOption + , autoStopOption ] autoStartOption :: Option autoStartOption = flagOption [] "autostart" "start in known repositories" +autoStopOption :: Option +autoStopOption = flagOption [] "autostop" "stop in known repositories" + startDelayOption :: Option startDelayOption = fieldOption [] "startdelay" paramNumber "delay before running startup scan" @@ -43,25 +47,31 @@ seek ps = do stopdaemon <- getOptionFlag Command.Watch.stopOption foreground <- getOptionFlag Command.Watch.foregroundOption autostart <- getOptionFlag autoStartOption + autostop <- getOptionFlag autoStopOption startdelay <- getOptionField startDelayOption (pure . maybe Nothing parseDuration) - withNothing (start foreground stopdaemon autostart startdelay) ps + withNothing (start foreground stopdaemon autostart autostop startdelay) ps -start :: Bool -> Bool -> Bool -> Maybe Duration -> CommandStart -start foreground stopdaemon autostart startdelay +start :: Bool -> Bool -> Bool -> Bool -> Maybe Duration -> CommandStart +start foreground stopdaemon autostart autostop startdelay | autostart = do liftIO $ autoStart startdelay stop + | autostop = do + liftIO autoStop + stop | otherwise = do liftIO ensureInstalled ensureInitialized Command.Watch.start True foreground stopdaemon startdelay -{- Run outside a git repository. Check to see if any parameter is - - --autostart and enter autostart mode. -} -checkAutoStart :: CmdParams -> IO () -checkAutoStart _ = ifM (elem "--autostart" <$> getArgs) +{- Run outside a git repository; support autostart and autostop mode. -} +checkNoRepoOpts :: CmdParams -> IO () +checkNoRepoOpts _ = ifM (elem "--autostart" <$> getArgs) ( autoStart Nothing - , error "Not in a git repository." + , ifM (elem "--autostop" <$> getArgs) + ( autoStop + , error "Not in a git repository." + ) ) autoStart :: Maybe Duration -> IO () @@ -89,3 +99,15 @@ autoStart startdelay = do [ Param "assistant" , Param $ "--startdelay=" ++ fromDuration (fromMaybe (Duration 5) startdelay) ] + +autoStop :: IO () +autoStop = do + dirs <- liftIO readAutoStartFile + program <- programPath + forM_ dirs $ \d -> do + putStrLn $ "git-annex autostop in " ++ d + setCurrentDirectory d + ifM (boolSystem program [Param "assistant", Param "--stop"]) + ( putStrLn "ok" + , putStrLn "failed" + ) |