[Pkg-haskell-commits] [SCM] haskell-testpack branch, master, updated. debian/1.0.2-1-4-gb0d6b36

John Goerzen jgoerzen at complete.org
Fri Apr 23 15:14:35 UTC 2010


The following commit has been merged in the master branch:
commit 0e9a3c809d396305378ef8188c5d2c681886d911
Author: John Goerzen <jgoerzen at complete.org>
Date:   Thu Nov 23 11:57:09 2006 +0100

    Various fixes

diff --git a/MissingH/ProgressMeter.hs b/MissingH/ProgressMeter.hs
index f6063b9..f7ce05d 100644
--- a/MissingH/ProgressMeter.hs
+++ b/MissingH/ProgressMeter.hs
@@ -41,6 +41,8 @@ import Control.Monad(when)
 import MissingH.Str
 import MissingH.Time
 import MissingH.Quantity
+import System.IO
+import Control.Monad(filterM)
 
 data ProgressMeterR = 
     ProgressMeterR {masterP :: Progress,
@@ -76,6 +78,18 @@ newMeter tracker w rfunc =
 setComponents :: ProgressMeter -> [Progress] -> IO ()
 setComponents meter componentlist = modifyMVar_ meter (\m -> return $ m {components = componentlist})
 
+{- | Add a new component to the list of components. -}
+addComponent :: ProgressMeter -> Progress -> IO ()
+addComponent meter component = 
+    modifyMVar_ meter (\m -> return $ m {components = component : components m})
+
+{- | Remove a component by name. -}
+removeComponent :: ProgressMeter -> String -> IO ()
+removeComponent meter componentname = modifyMVar_ meter $ \m ->
+   do newc <- filterM (\x -> withStatus x (\y -> return $ trackerName y /= componentname))
+              (components m)
+      return $ m {components = newc}
+
 {- | Adjusts the width of this 'ProgressMeter'. -}
 setWidth :: ProgressMeter -> Int -> IO ()
 setWidth meter w = modifyMVar_ meter (\m -> return $ m {width = w})
@@ -87,22 +101,26 @@ displayMeter :: ProgressMeter -> IO ()
 displayMeter r = withMVar r $ \meter ->
     do s <- renderMeterR meter
        putStr ("\r" ++ s)
+       hFlush stdout
        -- By placing this whole thing under withMVar, we can effectively
        -- lock the IO and prevent IO from stomping on each other.
 
 {- | Clears the meter -- outputs CR, spaces equal to the width - 1,
 then another CR. -}
 clearMeter :: ProgressMeter -> IO ()
-clearMeter pm = withMVar pm $ \m -> putStr (clearmeterstr m)
+clearMeter pm = withMVar pm $ \m -> 
+                   do putStr (clearmeterstr m)
+                      hFlush stdout
 
 {- | Clears the meter, writes the given string, then restores the meter. 
 The string is assumed to contain a trailing newline. -}
 writeMeterString :: ProgressMeter -> String -> IO ()
 writeMeterString pm msg = withMVar pm $ \meter ->
-                          do putStr (clearmeterstr meter)
+                          do s <- renderMeterR meter
+                             putStr (clearmeterstr meter)
                              putStr msg
-                             s <- renderMeterR meter
-                             putStr ("\r" ++ s)
+                             putStr s
+                             hFlush stdout
 
 clearmeterstr m = "\r" ++ replicate (width m - 1) ' ' ++ "\r"
 

-- 
haskell-testpack



More information about the Pkg-haskell-commits mailing list