diff options
Diffstat (limited to 'Git')
-rw-r--r-- | Git/HashObject.hs | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/Git/HashObject.hs b/Git/HashObject.hs index f28d865b1..99b96afcb 100644 --- a/Git/HashObject.hs +++ b/Git/HashObject.hs @@ -10,16 +10,15 @@ module Git.HashObject where import Common import Git -{- Injects a set of files into git, returning the shas of the objects. -} -hashFiles :: [FilePath] -> Repo -> IO [Sha] +{- Injects a set of files into git, returning the shas of the objects + - and an IO action to call ones the the shas have been used. -} +hashFiles :: [FilePath] -> Repo -> IO ([Sha], IO ()) hashFiles paths repo = do (pid, fromh, toh) <- hPipeBoth "git" $ toCommand $ git_hash_object repo _ <- forkProcess (feeder toh) hClose toh - shas <- map Git.Ref . lines <$> hGetContents fromh - hClose fromh - forceSuccess pid - return shas + shas <- map Git.Ref . lines <$> hGetContentsStrict fromh + return (shas, ender fromh pid) where git_hash_object = Git.gitCommandLine [Param "hash-object", Param "-w", Param "--stdin-paths"] @@ -27,3 +26,6 @@ hashFiles paths repo = do hPutStr toh $ unlines paths hClose toh exitSuccess + ender fromh pid = do + hClose fromh + forceSuccess pid |