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
|
Was updating as frequently as changes were reported, up to hundreds of
|
||||||
times per second, which used unncessary bandwidth when running git-annex
|
times per second, which used unncessary bandwidth when running git-annex
|
||||||
over ssh etc.
|
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
|
-- Joey Hess <id@joeyh.name> Thu, 08 Sep 2016 12:48:55 -0400
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,7 @@ showEndFail :: Annex ()
|
||||||
showEndFail = showEndResult False
|
showEndFail = showEndResult False
|
||||||
|
|
||||||
showEndResult :: Bool -> Annex ()
|
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 :: Bool -> String
|
||||||
endResult True = "ok"
|
endResult True = "ok"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{- git-annex output messages, including concurrent output to display regions
|
{- 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.
|
- 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
|
withMessageState a = Annex.getState Annex.output >>= a
|
||||||
|
|
||||||
outputMessage :: IO () -> String -> Annex ()
|
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
|
NormalOutput
|
||||||
| concurrentOutputEnabled s -> concurrentMessage s False msg q
|
| concurrentOutputEnabled s -> concurrentMessage s False msg q
|
||||||
| otherwise -> liftIO $ flushed $ putStr msg
|
| 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
|
QuietOutput -> q
|
||||||
JSONOutput -> liftIO $ flushed json
|
|
||||||
|
|
||||||
outputError :: String -> Annex ()
|
outputError :: String -> Annex ()
|
||||||
outputError msg = withMessageState $ \s ->
|
outputError msg = withMessageState $ \s ->
|
||||||
|
|
|
@ -30,6 +30,7 @@ data MessageState = MessageState
|
||||||
, consoleRegion :: Maybe ConsoleRegion
|
, consoleRegion :: Maybe ConsoleRegion
|
||||||
, consoleRegionErrFlag :: Bool
|
, consoleRegionErrFlag :: Bool
|
||||||
#endif
|
#endif
|
||||||
|
, jsonBuffer :: [IO ()]
|
||||||
}
|
}
|
||||||
|
|
||||||
instance Default MessageState
|
instance Default MessageState
|
||||||
|
@ -43,4 +44,5 @@ instance Default MessageState
|
||||||
, consoleRegion = Nothing
|
, consoleRegion = Nothing
|
||||||
, consoleRegionErrFlag = False
|
, consoleRegionErrFlag = False
|
||||||
#endif
|
#endif
|
||||||
|
, jsonBuffer = []
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue