From db8effb8f3e861c61bc4c640d712688a8ed342e1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 6 Jun 2012 15:50:12 -0400 Subject: ignore .gitignore and .gitattributes --- Command/Watch.hs | 7 +++++-- Utility/Inotify.hs | 20 +++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/Command/Watch.hs b/Command/Watch.hs index 7b714ac18..d6f77b6ae 100644 --- a/Command/Watch.hs +++ b/Command/Watch.hs @@ -43,14 +43,17 @@ start = notBareRepo $ do mvar <- liftIO $ newMVar state next $ next $ liftIO $ withINotify $ \i -> do let hook a = Just $ runAnnex mvar a - watchDir i "." (not . pruned) + watchDir i "." (ignored . takeFileName) (hook onAdd) (hook onAddSymlink) (hook onDel) (hook onDelDir) putStrLn "(started)" waitForTermination return True where - pruned dir = takeFileName dir /= ".git" + ignored ".git" = True + ignored ".gitignore" = True + ignored ".gitattributes" = True + ignored _ = False {- Runs a handler, inside the Annex monad. - diff --git a/Utility/Inotify.hs b/Utility/Inotify.hs index 3c69a7ee2..1896a2a26 100644 --- a/Utility/Inotify.hs +++ b/Utility/Inotify.hs @@ -48,15 +48,13 @@ type Hook = Maybe (FilePath -> IO ()) - So this will fail if there are too many subdirectories. -} watchDir :: INotify -> FilePath -> (FilePath -> Bool) -> Hook -> Hook -> Hook -> Hook -> IO () -watchDir i dir ignored add addsymlink del deldir - | ignored dir = noop - | otherwise = do - lock <- newLock - void $ addWatch i watchevents dir $ \event -> - withLock lock (void $ go event) - withLock lock $ - mapM_ walk =<< filter (not . dirCruft) <$> - getDirectoryContents dir +watchDir i dir ignored add addsymlink del deldir = unless (ignored dir) $ do + lock <- newLock + void $ addWatch i watchevents dir $ \event -> + withLock lock (void $ go event) + withLock lock $ + mapM_ walk =<< filter (not . dirCruft) <$> + getDirectoryContents dir where recurse d = watchDir i d ignored add addsymlink del deldir @@ -71,7 +69,7 @@ watchDir i dir ignored add addsymlink del deldir | isJust del || isJust deldir = [MoveOut, Delete] | otherwise = [] - walk f = do + walk f = unless (ignored f) $ do let fullf = indir f r <- catchMaybeIO $ getSymbolicLinkStatus fullf case r of @@ -112,7 +110,7 @@ watchDir i dir ignored add addsymlink del deldir guarded = unlessM (filetype (const True) f) go _ = noop - Just a <@> f = a $ indir f + Just a <@> f = unless (ignored f) $ a $ indir f Nothing <@> _ = noop indir f = dir f -- cgit v1.2.3