summaryrefslogtreecommitdiff
path: root/Git
diff options
context:
space:
mode:
Diffstat (limited to 'Git')
-rw-r--r--Git/HashObject.hs14
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