summaryrefslogtreecommitdiff
path: root/Git/HashObject.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-06-06 12:52:21 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-06-06 12:52:21 -0400
commit4b32ea793d4e747c3e6cff92041e35061a78c410 (patch)
tree32e316e5a6466bce986c25305944f881562f729c /Git/HashObject.hs
parent27cfeca4ea8f2aa326e7d8416401c319133491db (diff)
parent455fca65bfb9ca4270fa7f89986d09ee62188d43 (diff)
Merge branch 'master' into watch
Diffstat (limited to 'Git/HashObject.hs')
-rw-r--r--Git/HashObject.hs18
1 files changed, 16 insertions, 2 deletions
diff --git a/Git/HashObject.hs b/Git/HashObject.hs
index 617e5ac28..b052413fd 100644
--- a/Git/HashObject.hs
+++ b/Git/HashObject.hs
@@ -9,7 +9,9 @@ module Git.HashObject where
import Common
import Git
+import Git.Sha
import Git.Command
+import Git.Types
import qualified Utility.CoProcess as CoProcess
type HashObjectHandle = CoProcess.CoProcessHandle
@@ -24,11 +26,23 @@ hashObjectStart = CoProcess.start "git" . toCommand . gitCommandLine
hashObjectStop :: HashObjectHandle -> IO ()
hashObjectStop = CoProcess.stop
-{- Injects a file into git, returning the shas of the objects. -}
+{- Injects a file into git, returning the Sha of the object. -}
hashFile :: HashObjectHandle -> FilePath -> IO Sha
hashFile h file = CoProcess.query h send receive
where
send to = do
fileEncoding to
hPutStrLn to file
- receive from = Ref <$> hGetLine from
+ receive from = getSha "hash-object" $ hGetLine from
+
+{- Injects some content into git, returning its Sha. -}
+hashObject :: Repo -> ObjectType -> String -> IO Sha
+hashObject repo objtype content = getSha subcmd $ do
+ (h, s) <- pipeWriteRead (map Param params) content repo
+ length s `seq` do
+ forceSuccess h
+ reap -- XXX unsure why this is needed
+ return s
+ where
+ subcmd = "hash-object"
+ params = [subcmd, "-t", show objtype, "-w", "--stdin"]