better locking for json with -J

Avoid threads emitting json at the same time and scrambling, which was
still possible even with the buffering, just less likely.

Converted json IO actions to JSONChunk data too.
This commit is contained in:
Joey Hess 2016-09-09 15:49:44 -04:00
parent 05d4438383
commit a108235565
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
6 changed files with 63 additions and 42 deletions

View file

@ -85,7 +85,7 @@ showSideAction m = Annex.getState Annex.output >>= go
Annex.changeState $ \s -> s { Annex.output = st' }
| sideActionBlock st == InBlock = return ()
| otherwise = p
p = outputMessage q $ "(" ++ m ++ "...)\n"
p = outputMessage JSON.none $ "(" ++ m ++ "...)\n"
showStoringStateAction :: Annex ()
showStoringStateAction = showSideAction "recording state in git"
@ -110,7 +110,7 @@ doSideAction' b a = do
{- Make way for subsequent output of a command. -}
showOutput :: Annex ()
showOutput = unlessM commandProgressDisabled $
outputMessage q "\n"
outputMessage JSON.none "\n"
showLongNote :: String -> Annex ()
showLongNote s = outputMessage (JSON.note s) ('\n' : indent s ++ "\n")
@ -140,7 +140,7 @@ earlyWarning = warning' False
warning' :: Bool -> String -> Annex ()
warning' makeway w = do
when makeway $
outputMessage q "\n"
outputMessage JSON.none "\n"
outputError (w ++ "\n")
{- Not concurrent output safe. -}
@ -173,10 +173,10 @@ showCustom command a = do
outputMessage (JSON.end r) ""
showHeader :: String -> Annex ()
showHeader h = outputMessage q $ (h ++ ": ")
showHeader h = outputMessage JSON.none $ (h ++ ": ")
showRaw :: String -> Annex ()
showRaw s = outputMessage q (s ++ "\n")
showRaw s = outputMessage JSON.none (s ++ "\n")
setupConsole :: IO ()
setupConsole = do