assistant: Added --autostop to complement --autostart.

This commit is contained in:
Joey Hess 2015-05-01 13:53:45 -04:00
parent ed97ba4bda
commit 437d9db41d
4 changed files with 40 additions and 9 deletions

View file

@ -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,26 +47,32 @@ 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
, ifM (elem "--autostop" <$> getArgs)
( autoStop
, error "Not in a git repository."
)
)
autoStart :: Maybe Duration -> IO ()
autoStart startdelay = do
@ -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"
)

1
debian/changelog vendored
View file

@ -25,6 +25,7 @@ git-annex (5.20150421) UNRELEASED; urgency=medium
on a file that doesn't exist. It will now continue to other
files specified after that on the command line, and only error out at
the end.
* assistant: Added --autostop to complement --autostart.
-- Joey Hess <id@joeyh.name> Tue, 21 Apr 2015 15:54:10 -0400

View file

@ -16,3 +16,6 @@ WantedBy=default.target
"""]]
> This seems to overlap with [[todo/server-level_daemon__63__/]] in some way... --[[anarcat]]
> Added --autostop and improved the docuemntation for --stop. [[done]]
> --[[Joey]]

View file

@ -36,6 +36,11 @@ For more details about the git-annex assistant, see
Stop a running daemon in the current repository.
* `--autostop`
The complement to --autostart; stops all running daemons in the
repositories listed in the autostart file.
# SEE ALSO
[[git-annex]](1)