diff options
author | Joey Hess <joey@kitenet.net> | 2012-06-15 18:56:23 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-06-15 19:00:06 -0400 |
commit | 679ef4c85896b6830bc6ae335995558577f4e435 (patch) | |
tree | 3f168039538e5b032d0aea7b317445df90ad3109 /Assistant | |
parent | c27c751b34af993a67e04e079d6f860a69f25038 (diff) |
continued work on deferred addding
Diffstat (limited to 'Assistant')
-rw-r--r-- | Assistant/Committer.hs | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/Assistant/Committer.hs b/Assistant/Committer.hs index 6e56c2235..64ea300e2 100644 --- a/Assistant/Committer.hs +++ b/Assistant/Committer.hs @@ -91,18 +91,18 @@ handleAdds :: ThreadState -> ChangeChan -> [Change] -> IO () handleAdds st changechan cs | null added = noop | otherwise = do - numadded <- length . filter id <$> - runThreadState st (forM added add) - waitforlinkchanges numadded + r <- forM added $ catchBoolIO . runThreadState st . add + let numadded = length $ filter id r + handleAdds st changechan =<< waitforlinkchanges [] numadded where - added = filter isPendingAdd cs + added = map changeFile $ filter isPendingAdd cs isPendingAdd (Change { changeType = PendingAddChange }) = True isPendingAdd _ = False isLinkChange (Change { changeType = LinkChange }) = True isLinkChange _ = False - add (Change { changeFile = file }) = do + add file = do showStart "add" file handle file =<< Command.Add.ingest file @@ -114,14 +114,13 @@ handleAdds st changechan cs showEndOk return True - waitforlinkchanges 0 = noop - waitforlinkchanges n = do - c <- runChangeChan $ readTChan changechan - if (isLinkChange c) - then waitforlinkchanges (n-1) - else do - handleAdds st changechan [c] - waitforlinkchanges n + waitforlinkchanges c n + | n < 1 = return $ concat c + | otherwise = do + (done, rest) <- partition isLinkChange + <$> getChanges changechan + let n' = (n - length done) + waitforlinkchanges (rest:c) n' commitStaged :: Annex () commitStaged = do |