diff options
author | Joey Hess <joey@kitenet.net> | 2012-06-11 02:01:20 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-06-11 02:01:20 -0400 |
commit | d0a0a6ae21e71c83c6365500a4f9b78f38477ac0 (patch) | |
tree | f28ca5157381372986d69f00e4535cec712a28fd /Command | |
parent | 8539a7bde8e20758b7f7d70af93fe92aa4be1e7f (diff) |
git annex watch --stop
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Watch.hs | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/Command/Watch.hs b/Command/Watch.hs index 8b8e5578d..f01a9616f 100644 --- a/Command/Watch.hs +++ b/Command/Watch.hs @@ -50,27 +50,36 @@ data Change = Change deriving (Show) def :: [Command] -def = [withOptions [foregroundOption] $ +def = [withOptions [foregroundOption, stopOption] $ command "watch" paramPaths seek "watch for changes"] seek :: [CommandSeek] -seek = [withFlag foregroundOption $ withNothing . start] +seek = [withFlag stopOption $ \stopdaemon -> + withFlag foregroundOption $ \foreground -> + withNothing $ start foreground stopdaemon] foregroundOption :: Option foregroundOption = Option.flag [] "foreground" "do not daemonize" -start :: Bool -> CommandStart -start foreground = notBareRepo $ withStateMVar $ \st -> do - if foreground - then do - showStart "watch" "." - liftIO $ watch st - else do - logfd <- liftIO . openLog =<< fromRepo gitAnnexLogFile - pidfile <- fromRepo gitAnnexPidFile - liftIO $ daemonize logfd (Just pidfile) False $ watch st +stopOption :: Option +stopOption = Option.flag [] "stop" "stop daemon" + +start :: Bool -> Bool -> CommandStart +start foreground stopdaemon = notBareRepo $ do + if stopdaemon + then liftIO . stopDaemon =<< fromRepo gitAnnexPidFile + else withStateMVar $ startDaemon (not foreground) stop +startDaemon :: Bool -> MVar Annex.AnnexState -> Annex () +startDaemon False st = do + showStart "watch" "." + liftIO $ watch st +startDaemon True st = do + logfd <- liftIO . openLog =<< fromRepo gitAnnexLogFile + pidfile <- fromRepo gitAnnexPidFile + liftIO $ daemonize logfd (Just pidfile) False $ watch st + watch :: MVar Annex.AnnexState -> IO () #if defined linux_HOST_OS watch st = withINotify $ \i -> do |