diff options
Diffstat (limited to 'Messages')
-rw-r--r-- | Messages/Progress.hs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Messages/Progress.hs b/Messages/Progress.hs index c0a88be94..2cef9a759 100644 --- a/Messages/Progress.hs +++ b/Messages/Progress.hs @@ -30,7 +30,7 @@ import Data.Quantity {- Shows a progress meter while performing a transfer of a key. - The action is passed a callback to use to update the meter. -} metered :: Maybe MeterUpdate -> Key -> (MeterUpdate -> Annex a) -> Annex a -metered combinemeterupdate key a = case keySize key of +metered othermeter key a = case keySize key of Nothing -> nometer Just size -> withOutputType (go $ fromInteger size) where @@ -39,21 +39,21 @@ metered combinemeterupdate key a = case keySize key of go size NormalOutput = do showOutput (progress, meter) <- mkmeter size - r <- a $ \n -> liftIO $ do + m <- liftIO $ rateLimitMeterUpdate 0.1 (Just size) $ \n -> do setP progress $ fromBytesProcessed n displayMeter stdout meter - maybe noop (\m -> m n) combinemeterupdate + r <- a (combinemeter m) liftIO $ clearMeter stdout meter return r #if WITH_CONCURRENTOUTPUT go size o@(ConcurrentOutput {}) | concurrentOutputEnabled o = withProgressRegion $ \r -> do (progress, meter) <- mkmeter size - a $ \n -> liftIO $ do + m <- liftIO $ rateLimitMeterUpdate 0.1 (Just size) $ \n -> do setP progress $ fromBytesProcessed n s <- renderMeter meter Regions.setConsoleRegion r ("\n" ++ s) - maybe noop (\m -> m n) combinemeterupdate + a (combinemeter m) #else go _size _o #endif @@ -66,6 +66,10 @@ metered combinemeterupdate key a = case keySize key of nometer = a (const noop) + combinemeter m = case othermeter of + Nothing -> m + Just om -> combineMeterUpdate m om + {- Use when the progress meter is only desired for concurrent - output; as when a command's own progress output is preferred. -} concurrentMetered :: Maybe MeterUpdate -> Key -> (MeterUpdate -> Annex a) -> Annex a |