@@ -1,14 +1,34 @@
1+{-# LANGUAGE RecordWildCards #-}
1−import Stackage.Types (BuildSettings(..))
2+import Stackage.Types
2import Stackage.Build (build, defaultBuildSettings)
3import Stackage.Build (build, defaultBuildSettings)
3import Stackage.Init (stackageInit)
4import Stackage.Init (stackageInit)
4import System.Environment (getArgs, getProgName)
5import System.Environment (getArgs, getProgName)
6+import Data.Set (fromList)
8+data BuildArgs = BuildArgs
10+ , excluded :: [String]
13+parseBuildArgs :: [String] -> IO BuildArgs
15+ loop $ BuildArgs False []
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
6main :: IO ()
22main :: IO ()
8 args <- getArgs
24 args <- getArgs
9 case args of
25 case args of
10− ["build"] -> build defaultBuildSettings
26+ "build":rest -> do
27+ BuildArgs {..} <- parseBuildArgs rest
11− ["build", "--no-clean"] -> build (defaultBuildSettings { cleanBeforeBuild = False })
28+ build defaultBuildSettings
29+ { cleanBeforeBuild = not noClean
30+ , excludedPackages = fromList $ map PackageName excluded
12 ["init"] -> stackageInit
32 ["init"] -> stackageInit
13 ["update"] -> stackageInit >> error "FIXME update"
33 ["update"] -> stackageInit >> error "FIXME update"
@@ -17,4 +37,5 @@ main = do
17 putStrLn "Available commands:"
37 putStrLn "Available commands:"
18 putStrLn " update Download updated Stackage databases. Automatically calls init."
38 putStrLn " update Download updated Stackage databases. Automatically calls init."
19 putStrLn " init Initialize your cabal file to use Stackage"
39 putStrLn " init Initialize your cabal file to use Stackage"
40+ putStrLn " build [--no-clean] [--exclude package...]"
20− putStrLn " build [--no-clean] Build the package databases (maintainers only)"
41+ putStrLn " Build the package databases (maintainers only)"