diff options
author | Joey Hess <joey@kitenet.net> | 2013-03-11 15:24:13 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-03-11 15:24:13 -0400 |
commit | 9e2e6f8670422f77f86bf77cd644fddb5b777f44 (patch) | |
tree | dede32b3900c9d0f28ba06905fc614129c3f9198 /Assistant/Threads/Committer.hs | |
parent | deb91f55f5ab2a846731163c0d20f81e7c9806e0 (diff) |
detect directory rename and wait up to 1 second to get all the changes
Diffstat (limited to 'Assistant/Threads/Committer.hs')
-rw-r--r-- | Assistant/Threads/Committer.hs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs index 0d9010cb7..029ac94d2 100644 --- a/Assistant/Threads/Committer.hs +++ b/Assistant/Threads/Committer.hs @@ -80,13 +80,20 @@ waitChangeTime a = runEvery (Seconds 1) <~> do changes <- getChanges -- See if now's a good time to commit. now <- liftIO getCurrentTime + debug ["got", show changes] case (shouldCommit now changes, possiblyrename changes) of (True, False) -> a (changes, now) (True, True) -> do - -- Wait for other, related changes to arrive. - liftIO $ humanImperceptibleDelay - -- Don't block, but are there any? + {- Wait for other, related changes to arrive. + - If there are multiple RmChanges, this is + - probably a directory rename, so wait a full + - second to get all the Changes involved. -} + liftIO $ if length (filter isRmChange changes) > 1 + then threadDelaySeconds $ Seconds 1 + else humanImperceptibleDelay + -- Don't block, but are there any new changes? morechanges <- getAnyChanges + debug ["got more", show morechanges] let allchanges = changes++morechanges a (allchanges, now) _ -> refill changes |