summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Messages.hs8
-rw-r--r--Messages/Internal.hs14
2 files changed, 13 insertions, 9 deletions
diff --git a/Messages.hs b/Messages.hs
index b8764be55..83f444a99 100644
--- a/Messages.hs
+++ b/Messages.hs
@@ -155,15 +155,11 @@ indent = intercalate "\n" . map (\l -> " " ++ l) . lines
{- Shows a JSON chunk only when in json mode. -}
maybeShowJSON :: JSONChunk v -> Annex ()
-maybeShowJSON v = withMessageState $ \s -> case outputType s of
- JSONOutput -> liftIO $ JSON.add v
- _ -> return ()
+maybeShowJSON v = void $ withMessageState $ outputJSON (JSON.add v) False
{- Shows a complete JSON value, only when in json mode. -}
showFullJSON :: JSONChunk v -> Annex Bool
-showFullJSON v = withMessageState $ \s -> case outputType s of
- JSONOutput -> liftIO $ JSON.complete v >> return True
- _ -> return False
+showFullJSON v = withMessageState $ outputJSON (JSON.complete v) True
{- Performs an action that outputs nonstandard/customized output, and
- in JSON mode wraps its output in JSON.start and JSON.end, so it's
diff --git a/Messages/Internal.hs b/Messages/Internal.hs
index b8af2f73f..21d11d811 100644
--- a/Messages/Internal.hs
+++ b/Messages/Internal.hs
@@ -26,8 +26,13 @@ outputMessage' endmessage json msg = withMessageState $ \s -> case outputType s
NormalOutput
| concurrentOutputEnabled s -> concurrentMessage s False msg q
| otherwise -> liftIO $ flushed $ putStr msg
+ JSONOutput -> void $ outputJSON json endmessage s
+ QuietOutput -> q
+
+outputJSON :: IO () -> Bool -> MessageState -> Annex Bool
+outputJSON json endmessage s = case outputType s of
JSONOutput
- | concurrentOutputEnabled s ->
+ | concurrentOutputEnabled s -> do
-- Buffer json fragments until end is reached.
if endmessage
then do
@@ -38,8 +43,11 @@ outputMessage' endmessage json msg = withMessageState $ \s -> case outputType s
json
else Annex.changeState $ \st ->
st { Annex.output = s { jsonBuffer = json : jsonBuffer s } }
- | otherwise -> liftIO $ flushed json
- QuietOutput -> q
+ return True
+ | otherwise -> do
+ liftIO $ flushed json
+ return True
+ _ -> return False
outputError :: String -> Annex ()
outputError msg = withMessageState $ \s ->