summaryrefslogtreecommitdiff
path: root/Git/CatFile.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Git/CatFile.hs')
-rw-r--r--Git/CatFile.hs8
1 files changed, 5 insertions, 3 deletions
diff --git a/Git/CatFile.hs b/Git/CatFile.hs
index 455f192a0..d6f7707bc 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