{-# LANGUAGE OverloadedStrings #-}
module BDCS.RPM.Projects(mkProject)
where
import Codec.RPM.Tags(Tag, findByteStringTag, findStringTag)
import Data.List(elemIndices)
import qualified Data.Text as T
import Data.Text.Encoding(decodeUtf8)
import BDCS.DB(Projects(..))
import BDCS.Exceptions(DBException(..), throwIfNothingOtherwise)
mkProject :: [Tag] -> Projects
mkProject tags = let
projectName = throwIfNothingOtherwise (findStringTag "SourceRPM" tags)
(MissingRPMTag "SourceRPM")
(T.pack . srpmToName)
summary = throwIfNothingOtherwise (findByteStringTag "Summary" tags)
(MissingRPMTag "Summary")
decodeUtf8
description = throwIfNothingOtherwise (findByteStringTag "Description" tags)
(MissingRPMTag "Description")
decodeUtf8
homepage = fmap T.pack (findStringTag "URL" tags)
upstream_vcs = "UPSTREAM_VCS"
in
Projects projectName summary description homepage upstream_vcs
where
srpmToName :: String -> String
srpmToName s =
let nameHyphenIndex = head $ tail $ reverse $ elemIndices '-' s
in fst $ splitAt nameHyphenIndex s