2011-12-12 21:24:55 -04:00
|
|
|
{- git hash-object interface
|
|
|
|
-
|
2012-02-14 14:35:52 -04:00
|
|
|
- Copyright 2011-2012 Joey Hess <joey@kitenet.net>
|
2011-12-12 21:24:55 -04:00
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
|
|
|
module Git.HashObject where
|
|
|
|
|
|
|
|
import Common
|
|
|
|
import Git
|
2011-12-14 15:56:11 -04:00
|
|
|
import Git.Command
|
2011-12-12 21:24:55 -04:00
|
|
|
|
2012-02-14 14:35:52 -04:00
|
|
|
type HashObjectHandle = (PipeHandle, Handle, Handle)
|
|
|
|
|
|
|
|
{- Starts git hash-object and returns a handle. -}
|
|
|
|
hashObjectStart :: Repo -> IO HashObjectHandle
|
|
|
|
hashObjectStart repo = do
|
|
|
|
r@(_, _, toh) <- hPipeBoth "git" $
|
|
|
|
toCommand $ gitCommandLine params repo
|
2012-02-04 12:58:42 -04:00
|
|
|
fileEncoding toh
|
2012-02-14 14:35:52 -04:00
|
|
|
return r
|
2011-12-12 21:24:55 -04:00
|
|
|
where
|
2012-02-14 14:35:52 -04:00
|
|
|
params =
|
|
|
|
[ Param "hash-object"
|
|
|
|
, Param "-w"
|
|
|
|
, Param "--stdin-paths"
|
|
|
|
]
|
|
|
|
|
|
|
|
{- Stops git hash-object. -}
|
|
|
|
hashObjectStop :: HashObjectHandle -> IO ()
|
|
|
|
hashObjectStop (pid, from, to) = do
|
|
|
|
hClose to
|
|
|
|
hClose from
|
|
|
|
forceSuccess pid
|
|
|
|
|
|
|
|
{- Injects a file into git, returning the shas of the objects. -}
|
|
|
|
hashFile :: HashObjectHandle -> FilePath -> IO Sha
|
|
|
|
hashFile (_, from, to) file = do
|
|
|
|
hPutStrLn to file
|
|
|
|
hFlush to
|
|
|
|
Ref <$> hGetLine from
|