Control the progress reporting and output of subprocesses.
- type Progress m a = MonadIO m => StateT ProgressState m a
- data ProgressFlag
- = Echo
- | Dots
- | All
- | Errors
- | Result
- | EchoOnFail
- | AllOnFail
- | ErrorsOnFail
- | ResultOnFail
- | ExceptionOnFail
- quietnessLevels :: [Set ProgressFlag] -> Int -> Set ProgressFlag
- runProgress :: MonadIO m => (Int -> Set ProgressFlag) -> Progress m a -> m a
- lazyCommandP :: MonadIO m => (Int -> Set ProgressFlag) -> String -> ByteString -> m [Output]
- lazyProcessP :: MonadIO m => (Int -> Set ProgressFlag) -> FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]
- defaultQuietness :: MonadIO m => m Int
- modQuietness :: MonadIO m => (Int -> Int) -> m a -> m a
- quieter :: MonadIO m => Int -> m a -> m a
- timeTask :: MonadIO m => m a -> m (a, NominalDiffTime)
- showElapsed :: MonadIO m => String -> m a -> m a
- ePutStr :: MonadIO m => String -> m ()
- ePutStrLn :: MonadIO m => String -> m ()
- qPutStr :: MonadIO m => String -> m ()
- qPutStrLn :: MonadIO m => String -> m ()
- eMessage :: MonadIO m => String -> a -> m a
- eMessageLn :: MonadIO m => String -> a -> m a
- qMessage :: MonadIO m => String -> a -> m a
- qMessageLn :: MonadIO m => String -> a -> m a
- tests :: [Test]
- defaultLevels :: [Set ProgressFlag]
- lazyCommandV :: MonadIO m => String -> ByteString -> m [Output]
- lazyProcessV :: MonadIO m => FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]
- lazyCommandF :: MonadIO m => String -> ByteString -> m [Output]
- lazyProcessF :: MonadIO m => FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]
- lazyCommandE :: MonadIO m => String -> ByteString -> m [Output]
- lazyProcessE :: MonadIO m => FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]
- lazyCommandEF :: MonadIO m => String -> ByteString -> m [Output]
- lazyProcessEF :: MonadIO m => FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]
- lazyCommandD :: MonadIO m => String -> ByteString -> m [Output]
- lazyCommandQ :: MonadIO m => String -> ByteString -> m [Output]
- lazyCommandS :: MonadIO m => String -> ByteString -> m [Output]
- lazyCommandSF :: MonadIO m => String -> ByteString -> m [Output]
The Progress Monad
type Progress m a = MonadIO m => StateT ProgressState m aSource
A monad for controlling progress reporting of subprocesses.
data ProgressFlag Source
The flags that control what type of output will be sent to stdout
and stderr. Also, the ExceptionOnFail flag controls whether an
exception will be thrown if the ExitCode
is not ExitSuccess
.
quietnessLevels :: [Set ProgressFlag] -> Int -> Set ProgressFlagSource
Create a function that returns the flags used for a given quietness level.
:: MonadIO m | |
=> (Int -> Set ProgressFlag) | |
-> Progress m a | The progress task to be run |
-> m a |
Run the Progress monad with the given flags. The flag set is compute from the current quietness level, <= 0 the most verbose and >= 3 the least.
Process launching
lazyCommandP :: MonadIO m => (Int -> Set ProgressFlag) -> String -> ByteString -> m [Output]Source
lazyProcessP :: MonadIO m => (Int -> Set ProgressFlag) -> FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]Source
Quietness control
defaultQuietness :: MonadIO m => m IntSource
Look for occurrences of -v and -q in the command line arguments
and the current values of environment variables VERBOSITY and
QUIETNESS to compute a new value for QUIETNESS. If you want to
ignore the current QUIETNESS value say setQuietness 0 >>
computeQuietness
.
modQuietness :: MonadIO m => (Int -> Int) -> m a -> m aSource
Perform a task with the given quietness level.
quieter :: MonadIO m => Int -> m a -> m aSource
Do an IO task with additional -v or -q arguments so that the progress reporting becomes more or less verbose.
Output stream processing
timeTask :: MonadIO m => m a -> m (a, NominalDiffTime)Source
Run a task and return the elapsed time along with its result.
showElapsed :: MonadIO m => String -> m a -> m aSource
Perform a task, print the elapsed time it took, and return the result.
qPutStr :: MonadIO m => String -> m ()Source
If the current quietness level is less than one print a message.
Control the quietness level using quieter
.
eMessage :: MonadIO m => String -> a -> m aSource
Print a message and return the second argument unevaluated.
eMessageLn :: MonadIO m => String -> a -> m aSource
eMessage
with a terminating newline.
qMessageLn :: MonadIO m => String -> a -> m aSource
qMessage
with a terminating newline.
Unit tests
A set of lazyCommand functions for an example set of verbosity levels
lazyCommandV :: MonadIO m => String -> ByteString -> m [Output]Source
lazyProcessV :: MonadIO m => FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]Source
lazyCommandF :: MonadIO m => String -> ByteString -> m [Output]Source
lazyProcessF :: MonadIO m => FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]Source
lazyCommandE :: MonadIO m => String -> ByteString -> m [Output]Source
lazyProcessE :: MonadIO m => FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]Source
lazyCommandEF :: MonadIO m => String -> ByteString -> m [Output]Source
lazyProcessEF :: MonadIO m => FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> ByteString -> m [Output]Source
lazyCommandD :: MonadIO m => String -> ByteString -> m [Output]Source
lazyCommandQ :: MonadIO m => String -> ByteString -> m [Output]Source
lazyCommandS :: MonadIO m => String -> ByteString -> m [Output]Source
lazyCommandSF :: MonadIO m => String -> ByteString -> m [Output]Source