This commit is contained in:
Joey Hess 2012-02-21 00:16:24 -04:00
parent 7e17151e69
commit cac130b205
3 changed files with 18 additions and 23 deletions

View file

@ -25,12 +25,12 @@ import qualified Utility.CoProcess as CoProcess
type CatFileHandle = CoProcess.CoProcessHandle
{- Starts git cat-file running in batch mode in a repo and returns a handle. -}
catFileStart :: Repo -> IO CatFileHandle
catFileStart repo = CoProcess.start "git" $ toCommand $
gitCommandLine [Param "cat-file", Param "--batch"] repo
catFileStart = CoProcess.start "git" . toCommand . gitCommandLine
[ Param "cat-file"
, Param "--batch"
]
{- Stops git cat-file. -}
catFileStop :: CatFileHandle -> IO ()
catFileStop = CoProcess.stop

View file

@ -18,13 +18,11 @@ type CheckAttrHandle = (CoProcess.CoProcessHandle, [Attr], String)
type Attr = String
{- Starts git check-attr running to look up the specified gitattributes
- values and return a handle. -}
- values and returns a handle. -}
checkAttrStart :: [Attr] -> Repo -> IO CheckAttrHandle
checkAttrStart attrs repo = do
cwd <- getCurrentDirectory
h <- CoProcess.start "git" $ toCommand $
gitCommandLine params repo
CoProcess.query h fileEncoding fileEncoding
h <- CoProcess.start "git" $ toCommand $ gitCommandLine params repo
return (h, attrs, cwd)
where
params =
@ -33,7 +31,6 @@ checkAttrStart attrs repo = do
] ++ map Param attrs ++
[ Param "--" ]
{- Stops git check-attr. -}
checkAttrStop :: CheckAttrHandle -> IO ()
checkAttrStop (h, _, _) = CoProcess.stop h
@ -46,8 +43,11 @@ checkAttr (h, attrs, cwd) want file = do
[v] -> return v
_ -> error $ "unable to determine " ++ want ++ " attribute of " ++ file
where
send to = hPutStr to $ file' ++ "\0"
send to = do
fileEncoding to
hPutStr to $ file' ++ "\0"
receive from = forM attrs $ \attr -> do
fileEncoding from
l <- hGetLine from
return (attr, attrvalue attr l)
{- Before git 1.7.7, git check-attr worked best with

View file

@ -14,20 +14,13 @@ import qualified Utility.CoProcess as CoProcess
type HashObjectHandle = CoProcess.CoProcessHandle
{- Starts git hash-object and returns a handle. -}
hashObjectStart :: Repo -> IO HashObjectHandle
hashObjectStart repo = do
h <- CoProcess.start "git" $ toCommand $ gitCommandLine params repo
CoProcess.query h fileEncoding (const $ return ())
return h
where
params =
hashObjectStart = CoProcess.start "git" . toCommand . gitCommandLine
[ Param "hash-object"
, Param "-w"
, Param "--stdin-paths"
]
{- Stops git hash-object. -}
hashObjectStop :: HashObjectHandle -> IO ()
hashObjectStop = CoProcess.stop
@ -35,5 +28,7 @@ hashObjectStop = CoProcess.stop
hashFile :: HashObjectHandle -> FilePath -> IO Sha
hashFile h file = CoProcess.query h send receive
where
send to = hPutStrLn to file
send to = do
fileEncoding to
hPutStrLn to file
receive from = Ref <$> hGetLine from