packages feed

fedora-haskell-tools-0.5: Dists.hs

-- |
-- Module      :  Dists
-- Copyright   :  (C) 2014-2017  Jens Petersen
--
-- Maintainer  :  Jens Petersen <petersen@fedoraproject.org>
-- Stability   :  alpha
-- Portability :  portable
--
-- Explanation: Fedora dist metadata

-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.

module Dists (Dist,
              dists,
              distBranch,
              distShort,
              distVersion,
              distRepo,
              distTag,
              distTarget,
              distUpdates,
              distOverride,
              hackageRelease,
              releaseVersion,
              rawhide) where

import Data.Char (isNumber)
import Data.Maybe (fromMaybe, maybe)

import Utils ((+-+))

type Dist = String

dists :: [Dist]
dists = [rawhide, "f27", "f26", "f25", "epel7"]

rawhide :: String
rawhide = "f28"

sidetag :: Maybe String
sidetag = Nothing -- Just "ghc"

hackageRelease :: String
hackageRelease = "f27"

distBranch :: Dist -> String
distBranch d | d == rawhide = "master"
             | otherwise = d

splitDist :: Dist -> (String, String)
splitDist = break isNumber

distShort :: Dist -> String
distShort = fst . splitDist

distVersion :: Dist -> String
distVersion = snd . splitDist

distRepo :: Dist -> String
distRepo d | d == rawhide = "rawhide"
           | distShort d == "f" = "fedora"
           | distShort d `elem` ["epel", "el"] = "epel"
distRepo d = error $ "Unknown dist" +-+ d

distUpdates :: Dist -> Maybe String
distUpdates d | distShort d == "f" = Just "updates"
distUpdates _ = Nothing

distOverride :: Dist -> Bool
distOverride d = d `notElem` [rawhide, "f28" {-, "epel7"-}]

distTag :: Dist -> String
distTag d = d ++ "-" ++ fromMaybe "build" sidetag

distTarget  :: Dist -> String
distTarget d = maybe d (\ suff -> d ++ "-" ++ suff) sidetag

releaseVersion :: Dist -> String
releaseVersion r | r == rawhide = "rawhide"
releaseVersion r = distVersion r