This commit is contained in:
Joey Hess 2015-11-16 20:27:01 -04:00
parent 2917b0ac41
commit 1244eb3770
Failed to extract signature
2 changed files with 21 additions and 13 deletions

View file

@ -18,7 +18,9 @@ import Foreign.Storable (Storable(sizeOf))
import System.Posix.Types
import Data.Int
import Data.Bits.Utils
import Control.Concurrent
import Control.Concurrent.Async
import Control.Monad.IO.Class (MonadIO)
{- An action that can be run repeatedly, updating it on the bytes processed.
-
@ -149,6 +151,23 @@ defaultChunkSize = 32 * k - chunkOverhead
k = 1024
chunkOverhead = 2 * sizeOf (1 :: Int) -- GHC specific
{- Runs an action, watching a file as it grows and updating the meter. -}
watchFileSize :: (MonadIO m, MonadMask m) => FilePath -> MeterUpdate -> m a -> m a
watchFileSize f p a = bracket
(liftIO $ forkIO $ watcher zeroBytesProcessed)
(liftIO . void . tryIO . killThread)
(const a)
where
watcher oldsz = do
v <- catchMaybeIO $ toBytesProcessed <$> getFileSize f
newsz <- case v of
Just sz | sz /= oldsz -> do
p sz
return sz
_ -> return oldsz
threadDelay 500000 -- 0.5 seconds
watcher newsz
data OutputHandler = OutputHandler
{ quietMode :: Bool
, stderrHandler :: String -> IO ()