stackage/Stackage2/UpdateBuildPlan.hs
2014-12-07 19:10:35 +02:00

43 lines
1.6 KiB
Haskell

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
-- | Take an existing build plan and bump all packages to the newest version in
-- the same major version number.
module Stackage2.UpdateBuildPlan
( updatePackageConstraints
, updateBuildPlan
) where
import Stackage2.Prelude
import Stackage2.BuildPlan
import Stackage2.PackageConstraints
import Stackage2.PackageDescription
import Distribution.Version (orLaterVersion, earlierVersion)
updateBuildPlan :: BuildPlan a -> IO (BuildPlan FlatComponent)
updateBuildPlan = newBuildPlan . updatePackageConstraints
updatePackageConstraints :: BuildPlan a -> PackageConstraints
updatePackageConstraints BuildPlan {..} = PackageConstraints
{ pcPackages = flip map bpExtra $ \pb ->
( intersectVersionRanges (bumpRange (pbVersion pb)) (pbVersionRange pb)
, pbMaintainer pb
)
, pcCorePackages = bpCore
, pcCoreExecutables = bpCoreExecutables
, pcGhcVersion = bpGhcVersion
, pcOS = bpOS
, pcArch = bpArch
, pcTests = maybe ExpectSuccess pbTestState . flip lookup bpExtra
, pcHaddocks = maybe ExpectSuccess pbHaddockState . flip lookup bpExtra
, pcBuildBenchmark = maybe True pbTryBuildBenchmark . flip lookup bpExtra
, pcFlagOverrides = maybe mempty pbFlags . flip lookup bpExtra
}
where
bumpRange version = intersectVersionRanges
(orLaterVersion version)
(earlierVersion $ bumpVersion version)
bumpVersion (Version (x:y:_) _) = Version [x, y + 1] []
bumpVersion (Version [x] _) = Version [x, 1] []
bumpVersion (Version [] _) = assert False $ Version [1, 0] []