buffer json output until done when in concurrent mode

This commit is contained in:
Joey Hess 2016-09-09 13:21:38 -04:00
parent 8ef494a833
commit 089c592977
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
4 changed files with 26 additions and 4 deletions

View file

@ -1,6 +1,6 @@
{- git-annex output messages, including concurrent output to display regions
-
- Copyright 2010-2015 Joey Hess <id@joeyh.name>
- Copyright 2010-2016 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@ -16,12 +16,30 @@ withMessageState :: (MessageState -> Annex a) -> Annex a
withMessageState a = Annex.getState Annex.output >>= a
outputMessage :: IO () -> String -> Annex ()
outputMessage json msg = withMessageState $ \s -> case outputType s of
outputMessage = outputMessage' False
outputMessageFinal :: IO () -> String -> Annex ()
outputMessageFinal = outputMessage' True
outputMessage' :: Bool -> IO () -> String -> Annex ()
outputMessage' endmessage json msg = withMessageState $ \s -> case outputType s of
NormalOutput
| concurrentOutputEnabled s -> concurrentMessage s False msg q
| otherwise -> liftIO $ flushed $ putStr msg
JSONOutput
| concurrentOutputEnabled s ->
-- Buffer json fragments until end is reached.
if endmessage
then do
Annex.changeState $ \st ->
st { Annex.output = s { jsonBuffer = [] } }
liftIO $ flushed $ do
sequence_ $ reverse $ jsonBuffer s
json
else Annex.changeState $ \st ->
st { Annex.output = s { jsonBuffer = json : jsonBuffer s } }
| otherwise -> liftIO $ flushed json
QuietOutput -> q
JSONOutput -> liftIO $ flushed json
outputError :: String -> Annex ()
outputError msg = withMessageState $ \s ->