rhbzquery-0.1.1: src/Fields.hs
module Fields (
BzFields(..),
argToFields,
argToSimpleField
)
where
import Data.Version
import Numeric.Natural
import ParseArg (ArgType(..), ProductVersion(..))
data BzFields = BzProduct
| BzVersion
| BzComponent
| BzParameter String
| BzMeta Char Natural
deriving Eq
instance Show BzFields where
show BzProduct = "product"
show BzVersion = "version"
show BzComponent = "component"
show (BzParameter f) = mapFields f
show (BzMeta c n) = c: show n
mapFields :: String -> String
mapFields "itm" = "cf_internal_target_milestone"
mapFields "itr" = "cf_internal_target_release"
mapFields "status" = "bug_status"
mapFields "verified" = "cf_verified"
mapFields s = s
mapComplex :: String -> String
mapComplex "sst" = "agile_team.name"
mapComplex "summary" = "short_desc"
mapComplex "flag" = "flagtypes.name"
mapComplex "flags" = "flagtypes.name"
mapComplex p = p
argToSimpleField :: ArgType -> [(BzFields,String)]
argToSimpleField (ArgProdVer prodver) =
productVersionQuery prodver
argToSimpleField (ArgParameter p v) =
[(BzParameter (mapComplex p), v)]
argToSimpleField (ArgOther c) =
[(BzComponent,c)]
-- FIXME or error for "all"?
argToSimpleField _ = []
argToFields :: Natural -> ArgType -> (Natural,[(BzFields,String)])
argToFields i arg =
case arg of
ArgProdVer prodver -> (i,productVersionQuery prodver)
ArgStatusAll -> (i,[])
ArgParameter "sst" v ->
(i+1,[(BzMeta 'f' i, mapComplex "sst")
,(BzMeta 'o' i, "substr")
,(BzMeta 'v' i, "sst_" ++ v)])
ArgParameter "summary" v ->
(i+1,[(BzMeta 'f' i, mapComplex "summary")
,(BzMeta 'o' i, "substr")
,(BzMeta 'v' i, v)])
ArgParameter param v ->
let p = mapComplex param
in if '.' `elem` p
then (i+1,[(BzMeta 'f' i, p)
,(BzMeta 'o' i, "substr")
,(BzMeta 'v' i, v)])
else (i,[(BzParameter p, v)])
ArgOther c -> (i,[(BzComponent,c)])
productVersionQuery :: ProductVersion -> [(BzFields,String)]
productVersionQuery (Fedora Nothing) = [(BzProduct, "Fedora")]
productVersionQuery Rawhide = [(BzProduct, "Fedora")
,(BzVersion, "rawhide")]
productVersionQuery (Fedora (Just n)) = [(BzProduct, "Fedora")
,(BzVersion, show n)]
productVersionQuery (EPEL Nothing) = [(BzProduct, "Fedora EPEL")]
productVersionQuery (EPEL (Just n)) = [(BzProduct, "Fedora EPEL")
,(BzVersion, show n)]
productVersionQuery (RHEL ver) =
case versionBranch ver of
[] -> error "Can't search RHEL without version"
[major] -> [(BzProduct, "Red Hat Enterprise Linux " ++ show major)]
(major:_) -> [(BzProduct, "Red Hat Enterprise Linux " ++ show major)
,(BzVersion, showVersion ver)]