on master help sign in
Constrain core packages
a9d7c30Michael Snoyman
Stackage/BuildPlan.hs+12−2
@@ -11,6 +11,7 @@ import qualified Data.Set as Set
11import Distribution.Text (display, simpleParse)
11import Distribution.Text (display, simpleParse)
12import Stackage.Types
12import Stackage.Types
13import qualified System.IO.UTF8
13import qualified System.IO.UTF8
14+import Data.Char (isSpace)
14
15
15readBuildPlan :: FilePath -> IO BuildPlan
16readBuildPlan :: FilePath -> IO BuildPlan
16readBuildPlan fp = do
17readBuildPlan fp = do
@@ -31,7 +32,7 @@ instance AsString BuildPlan where
31 toString BuildPlan {..} = concat
32 toString BuildPlan {..} = concat
32 [ makeSection "tools" bpTools
33 [ makeSection "tools" bpTools
33 , makeSection "packages" $ Map.toList bpPackages
34 , makeSection "packages" $ Map.toList bpPackages
34− , makeSection "core" $ Set.toList bpCore
35+ , makeSection "core" $ Map.toList bpCore
35 , makeSection "optional-core" $ Map.toList bpOptionalCore
36 , makeSection "optional-core" $ Map.toList bpOptionalCore
36 , makeSection "skipped-tests" $ Set.toList bpSkippedTests
37 , makeSection "skipped-tests" $ Set.toList bpSkippedTests
37 ]
38 ]
@@ -44,7 +45,7 @@ instance AsString BuildPlan where
44 let bp = BuildPlan
45 let bp = BuildPlan
45 { bpTools = tools
46 { bpTools = tools
46 , bpPackages = Map.fromList packages
47 , bpPackages = Map.fromList packages
47− , bpCore = Set.fromList core
48+ , bpCore = Map.fromList core
48 , bpOptionalCore = Map.fromList optionalCore
49 , bpOptionalCore = Map.fromList optionalCore
49 , bpSkippedTests = Set.fromList skipped
50 , bpSkippedTests = Set.fromList skipped
50 }
51 }
@@ -64,6 +65,15 @@ instance AsString PackageName where
64 toString (PackageName pn) = pn
65 toString (PackageName pn) = pn
65 fromString s = Right (PackageName s, "")
66 fromString s = Right (PackageName s, "")
66
67
68+instance AsString (Maybe Version) where
69+ toString Nothing = ""
70+ toString (Just x) = toString x
71+ fromString s
72+ | all isSpace s = return (Nothing, s)
73+ | otherwise = do
74+ (v, s') <- fromString s
75+ return (Just v, s')
76+
67instance AsString a => AsString (PackageName, a) where
77instance AsString a => AsString (PackageName, a) where
68 toString (PackageName pn, s) = concat [pn, " ", toString s]
78 toString (PackageName pn, s) = concat [pn, " ", toString s]
69 fromString s = do
79 fromString s = do
Stackage/InstallInfo.hs+6−4
@@ -1,4 +1,5 @@
1{-# LANGUAGE RecordWildCards #-}
1{-# LANGUAGE RecordWildCards #-}
2+{-# LANGUAGE TupleSections #-}
2module Stackage.InstallInfo
3module Stackage.InstallInfo
3 ( getInstallInfo
4 ( getInstallInfo
4 , bpPackageList
5 , bpPackageList
@@ -54,15 +55,16 @@ getInstallInfo settings = do
54 allPackages = dropExcluded settings allPackages'
55 allPackages = dropExcluded settings allPackages'
55 let totalCore
56 let totalCore
56 | ignoreUpgradeableCore settings =
57 | ignoreUpgradeableCore settings =
57− Set.fromList $ map PackageName $ words "base containers template-haskell"
58+ Map.fromList $ map (\n -> (PackageName n, Nothing)) $ words "base containers template-haskell"
58 | otherwise =
59 | otherwise =
59− extraCore settings `Set.union` Set.map (\(PackageIdentifier p _) -> p) core
60+ Map.fromList (map (\(PackageIdentifier p v) -> (p, Just v)) (Set.toList core))
61+ `Map.union` Map.fromList (map (, Nothing) (Set.toList $ extraCore settings))
60
62
61 putStrLn "Loading package database"
63 putStrLn "Loading package database"
62− pdb <- loadPackageDB settings coreMap totalCore allPackages
64+ pdb <- loadPackageDB settings coreMap (Map.keysSet totalCore) allPackages
63
65
64 putStrLn "Narrowing package database"
66 putStrLn "Narrowing package database"
65− (final, errs) <- narrowPackageDB settings totalCore pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
67+ (final, errs) <- narrowPackageDB settings (Map.keysSet totalCore) pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
66
68
67 putStrLn "Printing build plan to build-plan.log"
69 putStrLn "Printing build plan to build-plan.log"
68 System.IO.UTF8.writeFile "build-plan.log" $ unlines $ map showDep $ Map.toList final
70 System.IO.UTF8.writeFile "build-plan.log" $ unlines $ map showDep $ Map.toList final
Stackage/ServerFiles.hs+1
@@ -22,6 +22,7 @@ createHackageFile ii h = do
22 selected = Map.fromList . map toStrs . Map.toList $
22 selected = Map.fromList . map toStrs . Map.toList $
23 fmap spiVersion (iiPackages ii)
23 fmap spiVersion (iiPackages ii)
24 `Map.union` iiOptionalCore ii
24 `Map.union` iiOptionalCore ii
25+ `Map.union` Map.mapMaybe id (iiCore ii)
25
26
26 toStrs (PackageName name, version) = (name, display version)
27 toStrs (PackageName name, version) = (name, display version)
27
28
Stackage/Tarballs.hs+1−1
@@ -41,5 +41,5 @@ makeTarballs bp = do
41 | version == spiVersion spi -> (stable . (e:), extra)
41 | version == spiVersion spi -> (stable . (e:), extra)
42 | otherwise -> (stable, extra)
42 | otherwise -> (stable, extra)
43 Nothing
43 Nothing
44− | package `Set.member` bpCore bp -> (stable, extra)
44+ | package `Map.member` bpCore bp -> (stable, extra)
45 | otherwise -> (stable, extra . (e:))
45 | otherwise -> (stable, extra . (e:))
Stackage/Types.hs+2−2
@@ -61,7 +61,7 @@ instance Monoid HaskellPlatform where
61 HaskellPlatform a x `mappend` HaskellPlatform b y = HaskellPlatform (mappend a b) (mappend x y)
61 HaskellPlatform a x `mappend` HaskellPlatform b y = HaskellPlatform (mappend a b) (mappend x y)
62
62
63data InstallInfo = InstallInfo
63data InstallInfo = InstallInfo
64− { iiCore :: Set PackageName
64+ { iiCore :: Map PackageName (Maybe Version)
65 , iiPackages :: Map PackageName SelectedPackageInfo
65 , iiPackages :: Map PackageName SelectedPackageInfo
66 , iiOptionalCore :: Map PackageName Version
66 , iiOptionalCore :: Map PackageName Version
67 -- ^ This is intended to hold onto packages which might be automatically
67 -- ^ This is intended to hold onto packages which might be automatically
@@ -81,7 +81,7 @@ data SelectedPackageInfo = SelectedPackageInfo
81data BuildPlan = BuildPlan
81data BuildPlan = BuildPlan
82 { bpTools :: [String]
82 { bpTools :: [String]
83 , bpPackages :: Map PackageName SelectedPackageInfo
83 , bpPackages :: Map PackageName SelectedPackageInfo
84− , bpCore :: Set PackageName
84+ , bpCore :: Map PackageName (Maybe Version)
85 , bpOptionalCore :: Map PackageName Version
85 , bpOptionalCore :: Map PackageName Version
86 -- ^ See 'iiOptionalCore'
86 -- ^ See 'iiOptionalCore'
87 , bpSkippedTests :: Set PackageName
87 , bpSkippedTests :: Set PackageName