summaryrefslogtreecommitdiff
path: root/Git/HashObject.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Git/HashObject.hs')
-rw-r--r--Git/HashObject.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/Git/HashObject.hs b/Git/HashObject.hs
new file mode 100644
index 000000000..f28d865b1
--- /dev/null
+++ b/Git/HashObject.hs
@@ -0,0 +1,29 @@
+{- git hash-object interface
+ -
+ - Copyright 2011 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+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]
+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
+ where
+ git_hash_object = Git.gitCommandLine
+ [Param "hash-object", Param "-w", Param "--stdin-paths"]
+ feeder toh = do
+ hPutStr toh $ unlines paths
+ hClose toh
+ exitSuccess