diff options
author | Joey Hess <joeyh@debian.org> | 2013-12-03 15:02:21 -0400 |
---|---|---|
committer | Joey Hess <joeyh@debian.org> | 2013-12-03 15:02:21 -0400 |
commit | a4f3e112954e1b785c84c339bcbd83597a89335e (patch) | |
tree | eb2a975663782f83e6b20d6d239447d7222de81b /Git/Sha.hs | |
download | git-repair-a4f3e112954e1b785c84c339bcbd83597a89335e.tar.gz |
git-repair (1.20131203) unstable; urgency=low
* Fix build deps. Closes: #731179
# imported from the archive
Diffstat (limited to 'Git/Sha.hs')
-rw-r--r-- | Git/Sha.hs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Git/Sha.hs b/Git/Sha.hs new file mode 100644 index 0000000..ee1b6d6 --- /dev/null +++ b/Git/Sha.hs @@ -0,0 +1,39 @@ +{- git SHA stuff + - + - Copyright 2011 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Git.Sha where + +import Common +import Git.Types + +{- Runs an action that causes a git subcommand to emit a Sha, and strips + - any trailing newline, returning the sha. -} +getSha :: String -> IO String -> IO Sha +getSha subcommand a = maybe bad return =<< extractSha <$> a + where + bad = error $ "failed to read sha from git " ++ subcommand + +{- Extracts the Sha from a string. There can be a trailing newline after + - it, but nothing else. -} +extractSha :: String -> Maybe Sha +extractSha s + | len == shaSize = val s + | len == shaSize + 1 && length s' == shaSize = val s' + | otherwise = Nothing + where + len = length s + s' = firstLine s + val v + | all (`elem` "1234567890ABCDEFabcdef") v = Just $ Ref v + | otherwise = Nothing + +{- Size of a git sha. -} +shaSize :: Int +shaSize = 40 + +nullSha :: Ref +nullSha = Ref $ replicate shaSize '0' |