summaryrefslogtreecommitdiff
path: root/Assistant
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-06-18 13:01:58 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-06-18 13:01:58 -0400
commita39b73d118c18707e6549d57a902fca9966119f8 (patch)
tree8778c4a6bb3d6bb73f4be34668aae0f864c8e725 /Assistant
parentdc3d9d1e982f7342dd3e2b3fc14fbbe85e7acd3e (diff)
recurse dirTree and open the directories for kqueue to watch
Diffstat (limited to 'Assistant')
-rw-r--r--Assistant/Watcher.hs22
1 files changed, 13 insertions, 9 deletions
diff --git a/Assistant/Watcher.hs b/Assistant/Watcher.hs
index 7c913d98c..52c3780ab 100644
--- a/Assistant/Watcher.hs
+++ b/Assistant/Watcher.hs
@@ -37,8 +37,6 @@ import System.INotify
import Utility.Kqueue
#endif
-type Handler = FilePath -> Maybe FileStatus -> DaemonStatusHandle -> Annex (Maybe Change)
-
checkCanWatch :: Annex ()
checkCanWatch = do
#if (WITH_INOTIFY || WITH_KQUEUE)
@@ -66,7 +64,7 @@ watchThread st dstatus changechan = withINotify $ \i -> do
showAction "scanning"
-- This does not return until the startup scan is done.
-- That can take some time for large trees.
- watchDir i "." (ignored . takeFileName) hooks
+ watchDir i "." ignored hooks
runThreadState st $
modifyDaemonStatus dstatus $ \s -> s { scanComplete = True }
-- Notice any files that were deleted before inotify
@@ -86,18 +84,24 @@ watchThread st dstatus changechan = withINotify $ \i -> do
}
#else
#ifdef WITH_KQUEUE
-watchThread st dstatus changechan = do
- print =<< waitChange [stdError, stdOutput]
+watchThread st dstatus changechan = forever $ do
+ dirs <- scanRecursive "." ignored
+ changeddir <- waitChange dirs
+ print $ "detected a change in " ++ show changeddir
#else
watchThread = undefined
#endif /* WITH_KQUEUE */
#endif /* WITH_INOTIFY */
ignored :: FilePath -> Bool
-ignored ".git" = True
-ignored ".gitignore" = True
-ignored ".gitattributes" = True
-ignored _ = False
+ignored = ig . takeFileName
+ where
+ ig ".git" = True
+ ig ".gitignore" = True
+ ig ".gitattributes" = True
+ ig _ = False
+
+type Handler = FilePath -> Maybe FileStatus -> DaemonStatusHandle -> Annex (Maybe Change)
{- Runs an action handler, inside the Annex monad, and if there was a
- change, adds it to the ChangeChan.