From fbf4d89e8285e6f92ef2f752f7f87f81c3c70033 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 11 Mar 2016 12:47:14 -0400 Subject: [PATCH] extract commit parent(s) --- Git/CatFile.hs | 8 +++++--- Git/Types.hs | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Git/CatFile.hs b/Git/CatFile.hs index 455f192a02..d6f7707bca 100644 --- a/Git/CatFile.hs +++ b/Git/CatFile.hs @@ -125,15 +125,17 @@ catCommit h commitref = go <$> catObjectDetails h commitref parseCommit :: L.ByteString -> Maybe Commit parseCommit b = Commit <$> (extractSha . L8.unpack =<< field "tree") + <*> (mapMaybe (extractSha . L8.unpack) <$> fields "parent") <*> (parsemetadata <$> field "author") <*> (parsemetadata <$> field "committer") <*> Just (L8.unpack $ L.intercalate (L.singleton nl) message) where - field n = M.lookup (fromString n) fields - fields = M.fromList ((map breakfield) header) + field n = headMaybe =<< fields n + fields n = M.lookup (fromString n) fieldmap + fieldmap = M.fromListWith (++) ((map breakfield) header) breakfield 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 ls = L.split nl b diff --git a/Git/Types.hs b/Git/Types.hs index 4fa49be5c0..44135738da 100644 --- a/Git/Types.hs +++ b/Git/Types.hs @@ -105,6 +105,7 @@ fromBlobType SymlinkBlob = 0o120000 data Commit = Commit { commitTree :: Sha + , commitParent :: [Sha] , commitAuthorMetaData :: CommitMetaData , commitCommitterMetaData :: CommitMetaData , commitMessage :: String