convert Watcher thread to Assistant monad

This is a nice win; much less code runs in Annex, so other threads have
more chances to run concurrently.

I do notice that renaming a file has gone from 1 to 2 commits. I think this
is due to the above improvement letting the committer run more frequently,
so it commits the rm first.
This commit is contained in:
Joey Hess 2012-10-29 09:55:40 -04:00
parent 4dbdc2b666
commit bad88e404a
4 changed files with 89 additions and 88 deletions

View file

@ -8,7 +8,6 @@
module Assistant.Changes where
import Common.Annex
import qualified Annex.Queue
import Types.KeySource
import Utility.TSet
@ -39,19 +38,15 @@ newChangeChan :: IO ChangeChan
newChangeChan = newTSet
{- Handlers call this when they made a change that needs to get committed. -}
madeChange :: FilePath -> ChangeType -> Annex (Maybe Change)
madeChange f t = do
-- Just in case the commit thread is not flushing the queue fast enough.
Annex.Queue.flushWhenFull
liftIO $ Just <$> (Change <$> getCurrentTime <*> pure f <*> pure t)
madeChange :: FilePath -> ChangeType -> IO (Maybe Change)
madeChange f t = Just <$> (Change <$> getCurrentTime <*> pure f <*> pure t)
noChange :: Annex (Maybe Change)
noChange :: IO (Maybe Change)
noChange = return Nothing
{- Indicates an add needs to be done, but has not started yet. -}
pendingAddChange :: FilePath -> Annex (Maybe Change)
pendingAddChange f =
liftIO $ Just <$> (PendingAddChange <$> getCurrentTime <*> pure f)
pendingAddChange :: FilePath -> IO (Maybe Change)
pendingAddChange f = Just <$> (PendingAddChange <$> getCurrentTime <*> pure f)
isPendingAddChange :: Change -> Bool
isPendingAddChange (PendingAddChange {}) = True