on master help sign in
Provide --exclude option (#7)
commite453fed90c6ada023e999de91c5b05352ba1fe22 authorMichael Snoyman <michael@snoyman.com> dateMon 3 Dec 2012, 10:57 (14 years ago) parenta549ecb
5 files changed+40−5
Stackage/Build.hs+2 Stackage/InstallInfo.hs+8−1 Stackage/Types.hs+4 app/stackage.hs+25−4 stackage.cabal+1
Stackage/Build.hs+2
@@ -19,6 +19,7 @@ import System.Process (runProcess, waitForProcess, rawSystem, re
1919import System.Directory (createDirectoryIfMissing, canonicalizePath, doesDirectoryExist)
2020import Distribution.Version (thisVersion, withinRange)
2121import Control.Exception (assert)
22+import Data.Set (empty)
2223
2324defaultBuildSettings :: BuildSettings
2425defaultBuildSettings = BuildSettings
@@ -31,6 +32,7 @@ defaultBuildSettings = BuildSettings
3132 , haskellPlatformCabal = "haskell-platform/haskell-platform.cabal"
3233 , requireHaskellPlatform = True
3334 , cleanBeforeBuild = True
35+ , excludedPackages = empty
3436 }
3537
3638build :: BuildSettings -> IO ()
Stackage/InstallInfo.hs+8−1
@@ -13,12 +13,19 @@ import Stackage.Types
1313import Stackage.Util
1414import Data.Version (showVersion)
1515
16+dropExcluded :: BuildSettings
17+ -> Map PackageName (VersionRange, Maintainer)
18+ -> Map PackageName (VersionRange, Maintainer)
19+dropExcluded bs m0 =
20+ Set.foldl' (flip Map.delete) m0 (excludedPackages bs)
21+
1622getInstallInfo :: BuildSettings -> IO InstallInfo
1723getInstallInfo settings = do
1824 hp <- loadHaskellPlatform settings
19− let allPackages
25+ let allPackages'
2026 | requireHaskellPlatform settings = Map.union (stablePackages settings) $ identsToRanges (hplibs hp)
2127 | otherwise = stablePackages settings
28+ allPackages = dropExcluded settings allPackages'
2229 let totalCore = extraCore settings `Set.union` Set.map (\(PackageIdentifier p _) -> p) (hpcore hp)
2330 pdb <- loadPackageDB totalCore allPackages
2431 final <- narrowPackageDB pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
Stackage/Types.hs+4
@@ -64,4 +64,8 @@ data BuildSettings = BuildSettings
6464 , haskellPlatformCabal :: FilePath
6565 , requireHaskellPlatform :: Bool
6666 , cleanBeforeBuild :: Bool
67+ , excludedPackages :: Set PackageName
68+ -- ^ Packages which should be dropped from the list of stable packages,
69+ -- even if present via the Haskell Platform or @stablePackages@. If these
70+ -- packages are dependencies of others, they will still be included.
6771 }
app/stackage.hs+25−4
@@ -1,14 +1,34 @@
1−import Stackage.Types (BuildSettings(..))
1+{-# LANGUAGE RecordWildCards #-}
2+import Stackage.Types
23import Stackage.Build (build, defaultBuildSettings)
34import Stackage.Init (stackageInit)
45import System.Environment (getArgs, getProgName)
6+import Data.Set (fromList)
7+
8+data BuildArgs = BuildArgs
9+ { noClean :: Bool
10+ , excluded :: [String]
11+ }
12+
13+parseBuildArgs :: [String] -> IO BuildArgs
14+parseBuildArgs =
15+ loop $ BuildArgs False []
16+ where
17+ loop x [] = return x
18+ loop x ("--no-clean":rest) = loop x { noClean = True } rest
19+ loop x ("--exclude":y:rest) = loop x { excluded = y : excluded x } rest
20+ loop _ (y:_) = error $ "Did not understand argument: " ++ y
521
622main :: IO ()
723main = do
824 args <- getArgs
925 case args of
10− ["build"] -> build defaultBuildSettings
11− ["build", "--no-clean"] -> build (defaultBuildSettings { cleanBeforeBuild = False })
26+ "build":rest -> do
27+ BuildArgs {..} <- parseBuildArgs rest
28+ build defaultBuildSettings
29+ { cleanBeforeBuild = not noClean
30+ , excludedPackages = fromList $ map PackageName excluded
31+ }
1232 ["init"] -> stackageInit
1333 ["update"] -> stackageInit >> error "FIXME update"
1434 _ -> do
@@ -17,4 +37,5 @@ main = do
1737 putStrLn "Available commands:"
1838 putStrLn " update Download updated Stackage databases. Automatically calls init."
1939 putStrLn " init Initialize your cabal file to use Stackage"
20− putStrLn " build [--no-clean] Build the package databases (maintainers only)"
40+ putStrLn " build [--no-clean] [--exclude package...]"
41+ putStrLn " Build the package databases (maintainers only)"
stackage.cabal+1
@@ -39,6 +39,7 @@ executable stackage
3939 main-is: stackage.hs
4040 build-depends: base
4141 , stackage
42+ , containers
4243
4344source-repository head
4445 type: git