Dependency injection of newBuildPlan (#375)

This commit is contained in:
Chris Done 2015-01-04 21:39:15 +01:00
parent ee9bc2bbed
commit 5da6e5cfa4
4 changed files with 27 additions and 11 deletions

View File

@ -14,6 +14,7 @@ module Stackage.BuildPlan
, PackagePlan (..) , PackagePlan (..)
, newBuildPlan , newBuildPlan
, makeToolMap , makeToolMap
, getLatestAllowedPlans
) where ) where
import Control.Monad.State.Strict (execState, get, put) import Control.Monad.State.Strict (execState, get, put)
@ -90,9 +91,9 @@ instance FromJSON PackagePlan where
ppDesc <- o .: "description" ppDesc <- o .: "description"
return PackagePlan {..} return PackagePlan {..}
newBuildPlan :: MonadIO m => BuildConstraints -> m BuildPlan -- | Make a build plan given these package set and build constraints.
newBuildPlan bc@BuildConstraints {..} = liftIO $ do newBuildPlan :: MonadIO m => Map PackageName PackagePlan -> BuildConstraints -> m BuildPlan
packagesOrig <- getLatestDescriptions (isAllowed bc) (mkPackagePlan bc) newBuildPlan packagesOrig bc@BuildConstraints {..} = liftIO $ do
let toolMap = makeToolMap packagesOrig let toolMap = makeToolMap packagesOrig
packages = populateUsers $ removeUnincluded bc toolMap packagesOrig packages = populateUsers $ removeUnincluded bc toolMap packagesOrig
toolNames :: [ExeName] toolNames :: [ExeName]
@ -205,3 +206,9 @@ mkPackagePlan bc gpd = do
getFlag MkFlag {..} = getFlag MkFlag {..} =
(flagName, fromMaybe flagDefault $ lookup flagName overrides) (flagName, fromMaybe flagDefault $ lookup flagName overrides)
flags = mapFromList $ map getFlag $ genPackageFlags gpd flags = mapFromList $ map getFlag $ genPackageFlags gpd
getLatestAllowedPlans :: MonadIO m => BuildConstraints -> m (Map PackageName PackagePlan)
getLatestAllowedPlans bc =
getLatestDescriptions
(isAllowed bc)
(mkPackagePlan bc)

View File

@ -54,7 +54,9 @@ getSettings :: Manager -> BuildType -> IO Settings
getSettings man Nightly = do getSettings man Nightly = do
day <- tshow . utctDay <$> getCurrentTime day <- tshow . utctDay <$> getCurrentTime
let slug' = "nightly-" ++ day let slug' = "nightly-" ++ day
plan' <- defaultBuildConstraints man >>= newBuildPlan bc <- defaultBuildConstraints man
pkgs <- getLatestAllowedPlans bc
plan' <- newBuildPlan pkgs bc
return Settings return Settings
{ planFile = fpFromText ("nightly-" ++ day) <.> "yaml" { planFile = fpFromText ("nightly-" ++ day) <.> "yaml"
, buildDir = fpFromText $ "builds/stackage-nightly-" ++ day , buildDir = fpFromText $ "builds/stackage-nightly-" ++ day
@ -81,14 +83,18 @@ getSettings man (LTS bumpType) = do
case mlts of case mlts of
Nothing -> LTSVer 0 0 Nothing -> LTSVer 0 0
Just (LTSVer x _) -> LTSVer (x + 1) 0 Just (LTSVer x _) -> LTSVer (x + 1) 0
plan' <- defaultBuildConstraints man >>= newBuildPlan bc <- defaultBuildConstraints man
pkgs <- getLatestAllowedPlans bc
plan' <- newBuildPlan pkgs bc
return (new, plan') return (new, plan')
Minor -> do Minor -> do
old <- maybe (error "No LTS plans found in current directory") return mlts old <- maybe (error "No LTS plans found in current directory") return mlts
oldplan <- decodeFileEither (fpToString $ renderLTSVer old) oldplan <- decodeFileEither (fpToString $ renderLTSVer old)
>>= either throwM return >>= either throwM return
let new = incrLTSVer old let new = incrLTSVer old
plan' <- updateBuildPlan oldplan let bc = updateBuildConstraints oldplan
pkgs <- getLatestAllowedPlans bc
plan' <- newBuildPlan pkgs bc
return (new, plan') return (new, plan')
let newfile = renderLTSVer new let newfile = renderLTSVer new
@ -148,7 +154,8 @@ justCheck = withManager tlsManagerSettings $ \man -> do
bc <- defaultBuildConstraints man bc <- defaultBuildConstraints man
putStrLn "Creating build plan" putStrLn "Creating build plan"
plan <- newBuildPlan bc plans <- getLatestAllowedPlans bc
plan <- newBuildPlan plans bc
putStrLn $ "Writing build plan to check-plan.yaml" putStrLn $ "Writing build plan to check-plan.yaml"
encodeFile "check-plan.yaml" plan encodeFile "check-plan.yaml" plan

View File

@ -15,8 +15,9 @@ import Stackage.BuildConstraints
import Stackage.BuildPlan import Stackage.BuildPlan
import Stackage.Prelude import Stackage.Prelude
updateBuildPlan :: BuildPlan -> IO BuildPlan updateBuildPlan :: Map PackageName PackagePlan -> BuildPlan -> IO BuildPlan
updateBuildPlan = newBuildPlan . updateBuildConstraints updateBuildPlan packagesOrig
= newBuildPlan packagesOrig . updateBuildConstraints
updateBuildConstraints :: BuildPlan -> BuildConstraints updateBuildConstraints :: BuildPlan -> BuildConstraints
updateBuildConstraints BuildPlan {..} = updateBuildConstraints BuildPlan {..} =

View File

@ -15,7 +15,8 @@ import Network.HTTP.Client.TLS (tlsManagerSettings)
spec :: Spec spec :: Spec
spec = it "works" $ withManager tlsManagerSettings $ \man -> do spec = it "works" $ withManager tlsManagerSettings $ \man -> do
bc <- defaultBuildConstraints man bc <- defaultBuildConstraints man
bp <- newBuildPlan bc pkgs <- getLatestAllowedPlans bc
bp <- newBuildPlan pkgs bc
let bs = Y.encode bp let bs = Y.encode bp
ebp' = Y.decodeEither bs ebp' = Y.decodeEither bs
@ -28,7 +29,7 @@ spec = it "works" $ withManager tlsManagerSettings $ \man -> do
bpGithubUsers bp' `shouldBe` bpGithubUsers bp bpGithubUsers bp' `shouldBe` bpGithubUsers bp
when (bp' /= bp) $ error "bp' /= bp" when (bp' /= bp) $ error "bp' /= bp"
bp2 <- updateBuildPlan bp bp2 <- updateBuildPlan pkgs bp
when (dropVersionRanges bp2 /= dropVersionRanges bp) $ error "bp2 /= bp" when (dropVersionRanges bp2 /= dropVersionRanges bp) $ error "bp2 /= bp"
where where
dropVersionRanges bp = dropVersionRanges bp =