continued work on deferred addding

This commit is contained in:
Joey Hess 2012-06-15 18:56:23 -04:00
parent c27c751b34
commit 679ef4c858

View file

@ -91,18 +91,18 @@ handleAdds :: ThreadState -> ChangeChan -> [Change] -> IO ()
handleAdds st changechan cs handleAdds st changechan cs
| null added = noop | null added = noop
| otherwise = do | otherwise = do
numadded <- length . filter id <$> r <- forM added $ catchBoolIO . runThreadState st . add
runThreadState st (forM added add) let numadded = length $ filter id r
waitforlinkchanges numadded handleAdds st changechan =<< waitforlinkchanges [] numadded
where where
added = filter isPendingAdd cs added = map changeFile $ filter isPendingAdd cs
isPendingAdd (Change { changeType = PendingAddChange }) = True isPendingAdd (Change { changeType = PendingAddChange }) = True
isPendingAdd _ = False isPendingAdd _ = False
isLinkChange (Change { changeType = LinkChange }) = True isLinkChange (Change { changeType = LinkChange }) = True
isLinkChange _ = False isLinkChange _ = False
add (Change { changeFile = file }) = do add file = do
showStart "add" file showStart "add" file
handle file =<< Command.Add.ingest file handle file =<< Command.Add.ingest file
@ -114,14 +114,13 @@ handleAdds st changechan cs
showEndOk showEndOk
return True return True
waitforlinkchanges 0 = noop waitforlinkchanges c n
waitforlinkchanges n = do | n < 1 = return $ concat c
c <- runChangeChan $ readTChan changechan | otherwise = do
if (isLinkChange c) (done, rest) <- partition isLinkChange
then waitforlinkchanges (n-1) <$> getChanges changechan
else do let n' = (n - length done)
handleAdds st changechan [c] waitforlinkchanges (rest:c) n'
waitforlinkchanges n
commitStaged :: Annex () commitStaged :: Annex ()
commitStaged = do commitStaged = do