summaryrefslogtreecommitdiff
path: root/Git/HashObject.hs
blob: f28d865b13a681198cf5e9113d62c32bb8bbe0f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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