bumper-0.7.0.0: src/Version.hs
-- * Manipulation functions for cabal versions and version ranges
{-# LANGUAGE TemplateHaskell #-}
module Version where
import Distribution.Version
-- | Function to bump the nth position in a version to a higher number
-- trailing version number will be discarded
bumpPosition :: Int -> Version -> Version
bumpPosition p v = mkVersion $ addPos p (versionNumbers v)
where
addPos 0 [] = [1]
addPos 0 (vn: _) = [vn+1]
addPos x [] = 0 : addPos (x - 1) []
addPos x (vn: vns) = vn : addPos (x - 1) vns
previousVersion :: Version -> Version
previousVersion = mkVersion . mkPrevious . versionNumbers
where mkPrevious = reverse . prevHelp . reverse
prevHelp [] = []
prevHelp (x:xs) = if x <= 1 then xs else (x - 1): xs -- No trailing zeros
nextVersion :: Version -> Version
nextVersion = mkVersion . mkNext . versionNumbers
where mkNext = reverse . nextHelp . reverse
nextHelp [] = []
nextHelp (x:xs) = (x + 1) : xs
addVersionToRange :: Version -> VersionRange -> VersionRange
addVersionToRange new r =
if withinRange new r
then r
else unionVersionRanges r (thisVersion new)