From 139ac4fe60e7fbb41f74b22978888b25fc7a5ceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Hangh=C3=B8j=20Iversen?= Date: Mon, 15 Nov 2021 18:53:11 +0100 Subject: [PATCH] Flush stdout after prompt, before parsing response. --- cabal-install/src/Distribution/Client/Init/Prompt.hs | 2 ++ cabal-install/src/Distribution/Client/Init/Types.hs | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/cabal-install/src/Distribution/Client/Init/Prompt.hs b/cabal-install/src/Distribution/Client/Init/Prompt.hs index cb8811940fd..2e7e25e25f7 100644 --- a/cabal-install/src/Distribution/Client/Init/Prompt.hs +++ b/cabal-install/src/Distribution/Client/Init/Prompt.hs @@ -25,6 +25,7 @@ import Prelude hiding (break, putStrLn, getLine, putStr) import Distribution.Client.Compat.Prelude hiding (break, empty, getLine, putStr, putStrLn) import Distribution.Client.Init.Types +import qualified System.IO -- | Create a prompt with optional default value that returns a @@ -149,6 +150,7 @@ promptDefault -> m t promptDefault parse pprint msg def = do putStr $ mkDefPrompt msg (pprint <$> def) + hFlush System.IO.stdout input <- getLine case def of DefaultPrompt d | null input -> return d diff --git a/cabal-install/src/Distribution/Client/Init/Types.hs b/cabal-install/src/Distribution/Client/Init/Types.hs index d22a60f37dc..3f8c487c4bd 100644 --- a/cabal-install/src/Distribution/Client/Init/Types.hs +++ b/cabal-install/src/Distribution/Client/Init/Types.hs @@ -69,6 +69,7 @@ import Distribution.CabalSpecVersion import Distribution.Client.Utils as P import Distribution.Fields.Pretty import Language.Haskell.Extension ( Language(..), Extension ) +import qualified System.IO import qualified System.Directory as P import qualified System.Process as P @@ -322,6 +323,7 @@ class Monad m => Interactive m where copyFile :: FilePath -> FilePath -> m () renameDirectory :: FilePath -> FilePath -> m () message :: Verbosity -> String -> m () + hFlush :: System.IO.Handle -> m () -- misc functions break :: m Bool @@ -350,6 +352,7 @@ instance Interactive IO where copyFile = P.copyFile renameDirectory = P.renameDirectory message q = unless (q == silent) . putStrLn + hFlush = System.IO.hFlush break = return False throwPrompt = throwM @@ -382,6 +385,7 @@ instance Interactive PurePrompt where copyFile !_ !_ = return () renameDirectory !_ !_ = return () message !_ !_ = return () + hFlush _ = return () break = return True throwPrompt (BreakException e) = PurePrompt $ \s -> Left $ BreakException