restart coprocess in raw mode

Restarting a crashing git process could result in filename encoding issues
when not in a unicode locale, as the restarted processes's handles were not
read in raw mode.

Since rawMode is always used when starting a coprocess, didn't bother
to parameterise it and just always enable it for simplicity.

This commit was sponsored by Jake Vosloo on Patreon.
This commit is contained in:
Joey Hess 2016-11-01 14:03:55 -04:00
parent f08ad2f916
commit e23028d19b
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
7 changed files with 21 additions and 19 deletions

View file

@ -51,7 +51,7 @@ catFileStart' restartable repo = CatFileHandle
<$> startp "--batch"
<*> startp "--batch-check=%(objectname) %(objecttype) %(objectsize)"
where
startp p = CoProcess.rawMode =<< gitCoProcessStart restartable
startp p = gitCoProcessStart restartable
[ Param "cat-file"
, Param p
] repo

View file

@ -24,7 +24,7 @@ type Attr = String
checkAttrStart :: [Attr] -> Repo -> IO CheckAttrHandle
checkAttrStart attrs repo = do
currdir <- getCurrentDirectory
h <- CoProcess.rawMode =<< gitCoProcessStart True params repo
h <- gitCoProcessStart True params repo
oldgit <- Git.Version.older "1.7.7"
return (h, attrs, oldgit, currdir)
where

View file

@ -37,7 +37,7 @@ type CheckIgnoreHandle = CoProcess.CoProcessHandle
-}
checkIgnoreStart :: Repo -> IO (Maybe CheckIgnoreHandle)
checkIgnoreStart repo = ifM supportedGitVersion
( Just <$> (CoProcess.rawMode =<< gitCoProcessStart True params repo')
( Just <$> gitCoProcessStart True params repo'
, return Nothing
)
where

View file

@ -20,7 +20,7 @@ import Utility.Tmp
type HashObjectHandle = CoProcess.CoProcessHandle
hashObjectStart :: Repo -> IO HashObjectHandle
hashObjectStart = CoProcess.rawMode <=< gitCoProcessStart True
hashObjectStart = gitCoProcessStart True
[ Param "hash-object"
, Param "-w"
, Param "--stdin-paths"

View file

@ -59,7 +59,7 @@ newtype MkTreeHandle = MkTreeHandle CoProcess.CoProcessHandle
withMkTreeHandle :: (MonadIO m, MonadMask m) => Repo -> (MkTreeHandle -> m a) -> m a
withMkTreeHandle repo a = bracketIO setup cleanup (a . MkTreeHandle)
where
setup = CoProcess.rawMode =<< gitCoProcessStart False ps repo
setup = gitCoProcessStart False ps repo
ps = [Param "mktree", Param "--batch", Param "-z"]
cleanup = CoProcess.stop