Safe Haskell | None |
---|---|
Language | Haskell98 |
This module handles all display of output to the console when propellor is ensuring Properties.
When two threads both try to display a message concurrently, the messages will be displayed sequentially.
- getMessageHandle :: IO MessageHandle
- isConsole :: MessageHandle -> Bool
- forceConsole :: IO ()
- actionMessage :: (MonadIO m, MonadMask m, ActionResult r) => Desc -> m r -> m r
- actionMessageOn :: (MonadIO m, MonadMask m, ActionResult r) => HostName -> Desc -> m r -> m r
- warningMessage :: MonadIO m => String -> m ()
- infoMessage :: MonadIO m => [String] -> m ()
- errorMessage :: MonadIO m => String -> m a
- stopPropellorMessage :: MonadIO m => String -> m a
- processChainOutput :: Handle -> IO Result
- messagesDone :: IO ()
- createProcessConcurrent :: CreateProcess -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ConcurrentProcessHandle)
- withConcurrentOutput :: (MonadIO m, MonadMask m) => m a -> m a
Documentation
getMessageHandle :: IO MessageHandle Source #
Gets the global MessageHandle.
forceConsole :: IO () Source #
Force console output. This can be used when stdout is not directly connected to a console, but is eventually going to be displayed at a console.
actionMessage :: (MonadIO m, MonadMask m, ActionResult r) => Desc -> m r -> m r Source #
Shows a message while performing an action, with a colored status display.
actionMessageOn :: (MonadIO m, MonadMask m, ActionResult r) => HostName -> Desc -> m r -> m r Source #
Shows a message while performing an action on a specified host, with a colored status display.
warningMessage :: MonadIO m => String -> m () Source #
infoMessage :: MonadIO m => [String] -> m () Source #
errorMessage :: MonadIO m => String -> m a Source #
Displays the error message in red, and throws an exception.
When used inside a property, the exception will make the current property fail. Propellor will continue to the next property.
stopPropellorMessage :: MonadIO m => String -> m a Source #
Like errorMessage
, but throws a StopPropellorException
,
preventing propellor from continuing to the next property.
Think twice before using this. Is the problem so bad that propellor
cannot try to ensure other properties? If not, use errorMessage
instead.
processChainOutput :: Handle -> IO Result Source #
Reads and displays each line from the Handle, except for the last line which is a Result.
messagesDone :: IO () Source #
Called when all messages about properties have been printed.
createProcessConcurrent :: CreateProcess -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ConcurrentProcessHandle) Source #
Wrapper around createProcess
that prevents
multiple processes that are running concurrently from writing
to stdout/stderr at the same time.
If the process does not output to stdout or stderr, it's run by createProcess entirely as usual. Only processes that can generate output are handled specially:
A process is allowed to write to stdout and stderr in the usual way, assuming it can successfully take the output lock.
When the output lock is held (ie, by another concurrent process,
or because outputConcurrent
is being called at the same time),
the process is instead run with its stdout and stderr
redirected to a buffer. The buffered output will be displayed as soon
as the output lock becomes free.
Currently only available on Unix systems, not Windows.
withConcurrentOutput :: (MonadIO m, MonadMask m) => m a -> m a Source #
Use this around any actions that use outputConcurrent
or createProcessConcurrent
This is necessary to ensure that buffered concurrent output actually gets displayed before the program exits.