clear regions before ssh prompt

When built with concurrent-output 1.9, ssh password prompts will no longer
interfere with the -J display.

To avoid flicker, only done when ssh actually does need to prompt;
ssh is first run in batch mode and if that succeeds the connection is up
and no need to clear regions.

This commit was supported by the NSF-funded DataLad project.
This commit is contained in:
Joey Hess 2017-05-16 15:28:06 -04:00
parent 89f9be3230
commit 1d45e47e3f
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
5 changed files with 52 additions and 14 deletions

View file

@ -1,6 +1,6 @@
{- git-annex output messages, including concurrent output to display regions
-
- Copyright 2010-2016 Joey Hess <id@joeyh.name>
- Copyright 2010-2017 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@ -10,8 +10,9 @@
module Messages.Concurrent where
import Annex
import Types
import Types.Messages
import qualified Annex
#ifdef WITH_CONCURRENTOUTPUT
import Common
@ -136,3 +137,22 @@ concurrentOutputSupported = return True -- Windows is always unicode
#else
concurrentOutputSupported = return False
#endif
{- Hide any currently displayed console regions while running the action,
- so that the action can use the console itself.
- This needs a new enough version of concurrent-output; otherwise
- the regions will not be hidden, but the action still runs, garbling the
- display. -}
hideRegionsWhile :: Annex a -> Annex a
#if MIN_VERSION_concurrent_output(1,9,0)
hideRegionsWhile a = bracketIO setup cleanup go
where
setup = Regions.waitDisplayChange $ swapTMVar Regions.regionList []
cleanup = void . atomically . swapTMVar Regions.regionList
go _ = do
liftIO $ hFlush stdout
a
#else
#warning Building with concurrent-output older than 1.9.0 so expect some display glitches when password prompts occur in concurrent mode
hideRegionsWhile = id
#endif