summaryrefslogtreecommitdiff
path: root/Command
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-06-11 02:01:20 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-06-11 02:01:20 -0400
commitd0a0a6ae21e71c83c6365500a4f9b78f38477ac0 (patch)
treef28ca5157381372986d69f00e4535cec712a28fd /Command
parent8539a7bde8e20758b7f7d70af93fe92aa4be1e7f (diff)
git annex watch --stop
Diffstat (limited to 'Command')
-rw-r--r--Command/Watch.hs33
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