mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-02-04 18:40:26 +01:00
Provide --exclude option (#7)
This commit is contained in:
parent
a549ecbdc2
commit
e453fed90c
@ -19,6 +19,7 @@ import System.Process (runProcess, waitForProcess, rawSystem, re
|
|||||||
import System.Directory (createDirectoryIfMissing, canonicalizePath, doesDirectoryExist)
|
import System.Directory (createDirectoryIfMissing, canonicalizePath, doesDirectoryExist)
|
||||||
import Distribution.Version (thisVersion, withinRange)
|
import Distribution.Version (thisVersion, withinRange)
|
||||||
import Control.Exception (assert)
|
import Control.Exception (assert)
|
||||||
|
import Data.Set (empty)
|
||||||
|
|
||||||
defaultBuildSettings :: BuildSettings
|
defaultBuildSettings :: BuildSettings
|
||||||
defaultBuildSettings = BuildSettings
|
defaultBuildSettings = BuildSettings
|
||||||
@ -31,6 +32,7 @@ defaultBuildSettings = BuildSettings
|
|||||||
, haskellPlatformCabal = "haskell-platform/haskell-platform.cabal"
|
, haskellPlatformCabal = "haskell-platform/haskell-platform.cabal"
|
||||||
, requireHaskellPlatform = True
|
, requireHaskellPlatform = True
|
||||||
, cleanBeforeBuild = True
|
, cleanBeforeBuild = True
|
||||||
|
, excludedPackages = empty
|
||||||
}
|
}
|
||||||
|
|
||||||
build :: BuildSettings -> IO ()
|
build :: BuildSettings -> IO ()
|
||||||
|
|||||||
@ -13,12 +13,19 @@ import Stackage.Types
|
|||||||
import Stackage.Util
|
import Stackage.Util
|
||||||
import Data.Version (showVersion)
|
import Data.Version (showVersion)
|
||||||
|
|
||||||
|
dropExcluded :: BuildSettings
|
||||||
|
-> Map PackageName (VersionRange, Maintainer)
|
||||||
|
-> Map PackageName (VersionRange, Maintainer)
|
||||||
|
dropExcluded bs m0 =
|
||||||
|
Set.foldl' (flip Map.delete) m0 (excludedPackages bs)
|
||||||
|
|
||||||
getInstallInfo :: BuildSettings -> IO InstallInfo
|
getInstallInfo :: BuildSettings -> IO InstallInfo
|
||||||
getInstallInfo settings = do
|
getInstallInfo settings = do
|
||||||
hp <- loadHaskellPlatform settings
|
hp <- loadHaskellPlatform settings
|
||||||
let allPackages
|
let allPackages'
|
||||||
| requireHaskellPlatform settings = Map.union (stablePackages settings) $ identsToRanges (hplibs hp)
|
| requireHaskellPlatform settings = Map.union (stablePackages settings) $ identsToRanges (hplibs hp)
|
||||||
| otherwise = stablePackages settings
|
| otherwise = stablePackages settings
|
||||||
|
allPackages = dropExcluded settings allPackages'
|
||||||
let totalCore = extraCore settings `Set.union` Set.map (\(PackageIdentifier p _) -> p) (hpcore hp)
|
let totalCore = extraCore settings `Set.union` Set.map (\(PackageIdentifier p _) -> p) (hpcore hp)
|
||||||
pdb <- loadPackageDB totalCore allPackages
|
pdb <- loadPackageDB totalCore allPackages
|
||||||
final <- narrowPackageDB pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
|
final <- narrowPackageDB pdb $ Set.fromList $ Map.toList $ Map.map snd $ allPackages
|
||||||
|
|||||||
@ -64,4 +64,8 @@ data BuildSettings = BuildSettings
|
|||||||
, haskellPlatformCabal :: FilePath
|
, haskellPlatformCabal :: FilePath
|
||||||
, requireHaskellPlatform :: Bool
|
, requireHaskellPlatform :: Bool
|
||||||
, cleanBeforeBuild :: Bool
|
, cleanBeforeBuild :: Bool
|
||||||
|
, excludedPackages :: Set PackageName
|
||||||
|
-- ^ Packages which should be dropped from the list of stable packages,
|
||||||
|
-- even if present via the Haskell Platform or @stablePackages@. If these
|
||||||
|
-- packages are dependencies of others, they will still be included.
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +1,34 @@
|
|||||||
import Stackage.Types (BuildSettings(..))
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
import Stackage.Types
|
||||||
import Stackage.Build (build, defaultBuildSettings)
|
import Stackage.Build (build, defaultBuildSettings)
|
||||||
import Stackage.Init (stackageInit)
|
import Stackage.Init (stackageInit)
|
||||||
import System.Environment (getArgs, getProgName)
|
import System.Environment (getArgs, getProgName)
|
||||||
|
import Data.Set (fromList)
|
||||||
|
|
||||||
|
data BuildArgs = BuildArgs
|
||||||
|
{ noClean :: Bool
|
||||||
|
, excluded :: [String]
|
||||||
|
}
|
||||||
|
|
||||||
|
parseBuildArgs :: [String] -> IO BuildArgs
|
||||||
|
parseBuildArgs =
|
||||||
|
loop $ BuildArgs False []
|
||||||
|
where
|
||||||
|
loop x [] = return x
|
||||||
|
loop x ("--no-clean":rest) = loop x { noClean = True } rest
|
||||||
|
loop x ("--exclude":y:rest) = loop x { excluded = y : excluded x } rest
|
||||||
|
loop _ (y:_) = error $ "Did not understand argument: " ++ y
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
args <- getArgs
|
args <- getArgs
|
||||||
case args of
|
case args of
|
||||||
["build"] -> build defaultBuildSettings
|
"build":rest -> do
|
||||||
["build", "--no-clean"] -> build (defaultBuildSettings { cleanBeforeBuild = False })
|
BuildArgs {..} <- parseBuildArgs rest
|
||||||
|
build defaultBuildSettings
|
||||||
|
{ cleanBeforeBuild = not noClean
|
||||||
|
, excludedPackages = fromList $ map PackageName excluded
|
||||||
|
}
|
||||||
["init"] -> stackageInit
|
["init"] -> stackageInit
|
||||||
["update"] -> stackageInit >> error "FIXME update"
|
["update"] -> stackageInit >> error "FIXME update"
|
||||||
_ -> do
|
_ -> do
|
||||||
@ -17,4 +37,5 @@ main = do
|
|||||||
putStrLn "Available commands:"
|
putStrLn "Available commands:"
|
||||||
putStrLn " update Download updated Stackage databases. Automatically calls init."
|
putStrLn " update Download updated Stackage databases. Automatically calls init."
|
||||||
putStrLn " init Initialize your cabal file to use Stackage"
|
putStrLn " init Initialize your cabal file to use Stackage"
|
||||||
putStrLn " build [--no-clean] Build the package databases (maintainers only)"
|
putStrLn " build [--no-clean] [--exclude package...]"
|
||||||
|
putStrLn " Build the package databases (maintainers only)"
|
||||||
|
|||||||
@ -39,6 +39,7 @@ executable stackage
|
|||||||
main-is: stackage.hs
|
main-is: stackage.hs
|
||||||
build-depends: base
|
build-depends: base
|
||||||
, stackage
|
, stackage
|
||||||
|
, containers
|
||||||
|
|
||||||
source-repository head
|
source-repository head
|
||||||
type: git
|
type: git
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user