extract commit parent(s)

This commit is contained in:
Joey Hess 2016-03-11 12:47:14 -04:00
parent 97e97dccda
commit fbf4d89e82
Failed to extract signature
2 changed files with 6 additions and 3 deletions

View file

@ -125,15 +125,17 @@ catCommit h commitref = go <$> catObjectDetails h commitref
parseCommit :: L.ByteString -> Maybe Commit parseCommit :: L.ByteString -> Maybe Commit
parseCommit b = Commit parseCommit b = Commit
<$> (extractSha . L8.unpack =<< field "tree") <$> (extractSha . L8.unpack =<< field "tree")
<*> (mapMaybe (extractSha . L8.unpack) <$> fields "parent")
<*> (parsemetadata <$> field "author") <*> (parsemetadata <$> field "author")
<*> (parsemetadata <$> field "committer") <*> (parsemetadata <$> field "committer")
<*> Just (L8.unpack $ L.intercalate (L.singleton nl) message) <*> Just (L8.unpack $ L.intercalate (L.singleton nl) message)
where where
field n = M.lookup (fromString n) fields field n = headMaybe =<< fields n
fields = M.fromList ((map breakfield) header) fields n = M.lookup (fromString n) fieldmap
fieldmap = M.fromListWith (++) ((map breakfield) header)
breakfield l = breakfield l =
let (k, sp_v) = L.break (== sp) l let (k, sp_v) = L.break (== sp) l
in (k, L.drop 1 sp_v) in (k, [L.drop 1 sp_v])
(header, message) = separate L.null ls (header, message) = separate L.null ls
ls = L.split nl b ls = L.split nl b

View file

@ -105,6 +105,7 @@ fromBlobType SymlinkBlob = 0o120000
data Commit = Commit data Commit = Commit
{ commitTree :: Sha { commitTree :: Sha
, commitParent :: [Sha]
, commitAuthorMetaData :: CommitMetaData , commitAuthorMetaData :: CommitMetaData
, commitCommitterMetaData :: CommitMetaData , commitCommitterMetaData :: CommitMetaData
, commitMessage :: String , commitMessage :: String