{-# 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(..), throwIfNothing, throwIfNothingOtherwise)
mkProject :: [Tag] -> Projects
mkProject tags = let
srpmTag = findStringTag "SourceRPM" tags `throwIfNothing` MissingRPMTag "SourceRPM"
projectName = throwIfNothingOtherwise (srpmToName srpmTag)
(BadName srpmTag)
T.pack
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 -> Maybe String
srpmToName s =
case reverse (elemIndices '-' s) of
_:ndx:_ -> Just $ fst $ splitAt ndx s
_ -> Nothing