2012-06-22 17:04:03 +00:00
|
|
|
{- git-annex assistant
|
|
|
|
-
|
|
|
|
- Copyright 2012 Joey Hess <joey@kitenet.net>
|
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
|
|
|
module Command.Assistant where
|
|
|
|
|
2012-08-02 04:42:33 +00:00
|
|
|
import Common.Annex
|
2012-06-22 17:04:03 +00:00
|
|
|
import Command
|
2012-08-02 04:42:33 +00:00
|
|
|
import qualified Option
|
2012-06-22 17:04:03 +00:00
|
|
|
import qualified Command.Watch
|
2012-08-02 04:42:33 +00:00
|
|
|
import Init
|
2013-04-23 15:38:52 +00:00
|
|
|
import Config.Files
|
2013-06-21 17:43:04 +00:00
|
|
|
import qualified Build.SysConfig
|
2012-08-02 04:42:33 +00:00
|
|
|
|
|
|
|
import System.Environment
|
2012-06-22 17:04:03 +00:00
|
|
|
|
|
|
|
def :: [Command]
|
2012-08-02 04:42:33 +00:00
|
|
|
def = [noRepo checkAutoStart $ dontCheck repoExists $
|
|
|
|
withOptions [Command.Watch.foregroundOption, Command.Watch.stopOption, autoStartOption] $
|
2013-03-24 22:28:21 +00:00
|
|
|
command "assistant" paramNothing seek SectionCommon
|
|
|
|
"automatically handle changes"]
|
2012-06-22 17:04:03 +00:00
|
|
|
|
2012-08-02 04:42:33 +00:00
|
|
|
autoStartOption :: Option
|
|
|
|
autoStartOption = Option.flag [] "autostart" "start in known repositories"
|
|
|
|
|
2012-06-22 17:04:03 +00:00
|
|
|
seek :: [CommandSeek]
|
2012-08-02 04:42:33 +00:00
|
|
|
seek = [withFlag Command.Watch.stopOption $ \stopdaemon ->
|
|
|
|
withFlag Command.Watch.foregroundOption $ \foreground ->
|
|
|
|
withFlag autoStartOption $ \autostart ->
|
|
|
|
withNothing $ start foreground stopdaemon autostart]
|
|
|
|
|
|
|
|
start :: Bool -> Bool -> Bool -> CommandStart
|
|
|
|
start foreground stopdaemon autostart
|
|
|
|
| autostart = do
|
2012-09-13 04:57:52 +00:00
|
|
|
liftIO autoStart
|
2012-08-02 04:42:33 +00:00
|
|
|
stop
|
|
|
|
| otherwise = do
|
|
|
|
ensureInitialized
|
|
|
|
Command.Watch.start True foreground stopdaemon
|
|
|
|
|
|
|
|
{- Run outside a git repository. Check to see if any parameter is
|
|
|
|
- --autostart and enter autostart mode. -}
|
|
|
|
checkAutoStart :: IO ()
|
2012-09-13 04:57:52 +00:00
|
|
|
checkAutoStart = ifM (elem "--autostart" <$> getArgs)
|
2012-08-02 04:42:33 +00:00
|
|
|
( autoStart
|
|
|
|
, error "Not in a git repository."
|
|
|
|
)
|
|
|
|
|
|
|
|
autoStart :: IO ()
|
|
|
|
autoStart = do
|
2013-03-03 21:07:27 +00:00
|
|
|
dirs <- liftIO readAutoStartFile
|
|
|
|
when (null dirs) $ do
|
|
|
|
f <- autoStartFile
|
|
|
|
error $ "Nothing listed in " ++ f
|
|
|
|
program <- readProgramFile
|
2013-06-21 17:43:04 +00:00
|
|
|
haveionice <- pure Build.SysConfig.ionice <&&> inPath "ionice"
|
2013-03-03 21:07:27 +00:00
|
|
|
forM_ dirs $ \d -> do
|
|
|
|
putStrLn $ "git-annex autostart in " ++ d
|
2013-06-21 17:23:20 +00:00
|
|
|
ifM (catchBoolIO $ go haveionice program d)
|
2013-03-03 21:07:27 +00:00
|
|
|
( putStrLn "ok"
|
|
|
|
, putStrLn "failed"
|
|
|
|
)
|
2012-11-12 05:05:04 +00:00
|
|
|
where
|
2013-06-21 17:23:20 +00:00
|
|
|
go haveionice program dir = do
|
2013-05-11 23:14:30 +00:00
|
|
|
setCurrentDirectory dir
|
2013-06-21 17:23:20 +00:00
|
|
|
if haveionice
|
|
|
|
then boolSystem "ionice" [Param "-c3", Param program, Param "assistant"]
|
|
|
|
else boolSystem program [Param "assistant"]
|