@@ -25,6 +25,7 @@ import Control.Monad.State.Strict (execState, get, put)
25import qualified Data.Map as Map
25import qualified Data.Map as Map
26import qualified Data.Set as Set
26import qualified Data.Set as Set
27import Data.Aeson
27import Data.Aeson
28+import Stackage2.PackageDescription
29data BuildPlan desc = BuildPlan
30data BuildPlan desc = BuildPlan
30 { bpCore :: Map PackageName Version
31 { bpCore :: Map PackageName Version
@@ -145,8 +146,8 @@ instance FromJSON TestState where
145newBuildPlan :: MonadIO m => m (BuildPlan FlatComponent)
146newBuildPlan :: MonadIO m => m (BuildPlan FlatComponent)
146newBuildPlan = liftIO $ do
147newBuildPlan = liftIO $ do
147 core <- getCorePackages
148 core <- getCorePackages
148− extraOrig <- getLatestDescriptions (isAllowed core) simplifyDesc
149+ extraOrig <- getLatestDescriptions (isAllowed core) mkPackageBuild
149− let toolNames = concatMap (seTools . fcExtra . pbDesc) extraOrig
150+ let toolNames = concatMap (seTools . fcExtra . pbDesc) extraOrig -- FIXME extraOrig ==> extra
150 extra = populateUsers $ removeUnincluded (Map.keysSet toolNames) extraOrig
151 extra = populateUsers $ removeUnincluded (Map.keysSet toolNames) extraOrig
151 return BuildPlan
152 return BuildPlan
152 { bpCore = core
153 { bpCore = core
@@ -170,7 +171,7 @@ removeUnincluded toolNames orig =
170 included :: Set PackageName
171 included :: Set PackageName
171 included = flip execState mempty $ do
172 included = flip execState mempty $ do
172 mapM_ (add . fst) $ mapToList $ pcPackages defaultPackageConstraints
173 mapM_ (add . fst) $ mapToList $ pcPackages defaultPackageConstraints
173− mapM_ add toolNames
174+ mapM_ add toolNames -- FIXME remove this
175 add name = do
176 add name = do
176 inc <- get
177 inc <- get
@@ -179,6 +180,7 @@ removeUnincluded toolNames orig =
179 case lookup name orig of
180 case lookup name orig of
180 Nothing -> return ()
181 Nothing -> return ()
181 Just pb -> mapM_ (add . fst) $ mapToList $ fcDeps $ pbDesc pb
182 Just pb -> mapM_ (add . fst) $ mapToList $ fcDeps $ pbDesc pb
183+ -- FIXME add tools here
183populateUsers :: Map PackageName (PackageBuild FlatComponent)
185populateUsers :: Map PackageName (PackageBuild FlatComponent)
184 -> Map PackageName (PackageBuild FlatComponent)
186 -> Map PackageName (PackageBuild FlatComponent)
@@ -191,83 +193,20 @@ populateUsers orig =
191 | dep `member` fcDeps (pbDesc pb) = singletonSet user
193 | dep `member` fcDeps (pbDesc pb) = singletonSet user
192 | otherwise = mempty
194 | otherwise = mempty
194−data SimpleTree = SimpleTree
195− { stDeps :: Map PackageName VersionRange
196+isAllowed :: Map PackageName Version -- ^ core
196− , stConds :: [(Condition ConfVar, SimpleTree, Maybe SimpleTree)]
197+ -> PackageName -> Version -> Bool
197− , stExtra :: SimpleExtra
198+isAllowed core = \name version ->
198− }
199+ case lookup name core of
199− deriving Show
200+ Just _ -> False -- never reinstall a core package
200−instance Monoid SimpleTree where
201+ Nothing ->
201− mempty = SimpleTree mempty mempty mempty
202+ case lookup name $ pcPackages defaultPackageConstraints of
202− mappend (SimpleTree a b c) (SimpleTree x y z) = SimpleTree
203+ Nothing -> True -- no constraints
203− (unionWith intersectVersionRanges a x)
204+ Just (range, _) -> withinRange version range
207−data SimpleExtra = SimpleExtra
208− { seTools :: Map PackageName VersionRange
211−instance Monoid SimpleExtra where
212− mempty = SimpleExtra mempty
213− mappend (SimpleExtra a) (SimpleExtra x) = SimpleExtra
214− (unionWith intersectVersionRanges a x)
216−getSimpleTrees :: Bool -- ^ include test suites?
217− -> Bool -- ^ include benchmarks?
218− -> GenericPackageDescription
220−getSimpleTrees includeTests includeBench gpd = concat
221− [ maybe [] (return . go libBuildInfo) $ condLibrary gpd
222− , map (go buildInfo . snd) $ condExecutables gpd
224− then map (go testBuildInfo . snd) $ condTestSuites gpd
227− then map (go benchmarkBuildInfo . snd) $ condBenchmarks gpd
231− go getExtra (CondNode dat deps comps) = SimpleTree
232− { stDeps = unionsWith intersectVersionRanges
233− $ map (\(Dependency x y) -> singletonMap x y) deps
234− , stConds = map (goComp getExtra) comps
235− , stExtra = toSimpleExtra $ getExtra dat
238− goComp getExtra (cond, tree1, mtree2) =
239− (cond, go getExtra tree1, go getExtra <$> mtree2)
241− toSimpleExtra bi = SimpleExtra
242− { seTools = unionsWith intersectVersionRanges $ flip map (buildTools bi)
243− $ \(Dependency name range) -> singletonMap name range
246−data FlatComponent = FlatComponent
247− { fcDeps :: Map PackageName VersionRange
248− , fcExtra :: SimpleExtra
251−instance Monoid FlatComponent where
252− mempty = FlatComponent mempty mempty
253− mappend (FlatComponent a b) (FlatComponent x y) = FlatComponent
254− (unionWith intersectVersionRanges a x)
257−flattenComponent :: SimpleTree -> FlatComponent
258−flattenComponent (SimpleTree deps conds extra) =
259− mconcat $ here : map goCond conds
261− here = FlatComponent { fcDeps = deps, fcExtra = extra }
262− goCond (cond, tree1, mtree2)
263− | checkCond cond = flattenComponent tree1
264− | otherwise = maybe mempty flattenComponent mtree2
266−checkCond :: Condition ConfVar -> Bool
267−checkCond _ = False -- FIXME
206+mkPackageBuild :: Monad m
269−simplifyDesc :: GenericPackageDescription -> IO (PackageBuild FlatComponent)
207+ => GenericPackageDescription
270−simplifyDesc gpd = do
208+ -> m (PackageBuild FlatComponent)
271 return PackageBuild
210 return PackageBuild
272 { pbVersion = version
211 { pbVersion = version
273 , pbMaintainer = fmap snd $ lookup name $ pcPackages defaultPackageConstraints
212 , pbMaintainer = fmap snd $ lookup name $ pcPackages defaultPackageConstraints
@@ -288,20 +227,10 @@ simplifyDesc gpd = do
288 -> ExpectFailure
227 -> ExpectFailure
289 | otherwise -> ExpectSuccess
228 | otherwise -> ExpectSuccess
290 , pbTryBuildBenchmark = tryBuildBenchmark name
229 , pbTryBuildBenchmark = tryBuildBenchmark name
291− , pbDesc = foldMap flattenComponent $ getSimpleTrees
230+ , pbDesc = getFlattenedComponent
292 (tryBuildTest name)
231 (tryBuildTest name)
293 (tryBuildBenchmark name)
232 (tryBuildBenchmark name)
297 PackageIdentifier name version = package $ packageDescription gpd
236 PackageIdentifier name version = package $ packageDescription gpd
299−isAllowed :: Map PackageName Version -- ^ core
300− -> PackageName -> Version -> Bool
301−isAllowed core = \name version ->
302− case lookup name core of
303− Just _ -> False -- never reinstall a core package
305− case lookup name $ pcPackages defaultPackageConstraints of
306− Nothing -> True -- no constraints
307− Just (range, _) -> withinRange version range