buffer json output until done when in concurrent mode
This commit is contained in:
parent
8ef494a833
commit
089c592977
4 changed files with 26 additions and 4 deletions
|
@ -4,6 +4,8 @@ git-annex (6.20160908) UNRELEASED; urgency=medium
|
|||
Was updating as frequently as changes were reported, up to hundreds of
|
||||
times per second, which used unncessary bandwidth when running git-annex
|
||||
over ssh etc.
|
||||
* Make --json and --quiet work when used with -J.
|
||||
Previously, -J override the other options.
|
||||
|
||||
-- Joey Hess <id@joeyh.name> Thu, 08 Sep 2016 12:48:55 -0400
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ showEndFail :: Annex ()
|
|||
showEndFail = showEndResult False
|
||||
|
||||
showEndResult :: Bool -> Annex ()
|
||||
showEndResult ok = outputMessage (JSON.end ok) $ endResult ok ++ "\n"
|
||||
showEndResult ok = outputMessageFinal (JSON.end ok) $ endResult ok ++ "\n"
|
||||
|
||||
endResult :: Bool -> String
|
||||
endResult True = "ok"
|
||||
|
|
|
@ -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 ->
|
||||
|
|
|
@ -30,6 +30,7 @@ data MessageState = MessageState
|
|||
, consoleRegion :: Maybe ConsoleRegion
|
||||
, consoleRegionErrFlag :: Bool
|
||||
#endif
|
||||
, jsonBuffer :: [IO ()]
|
||||
}
|
||||
|
||||
instance Default MessageState
|
||||
|
@ -43,4 +44,5 @@ instance Default MessageState
|
|||
, consoleRegion = Nothing
|
||||
, consoleRegionErrFlag = False
|
||||
#endif
|
||||
, jsonBuffer = []
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue