on master help sign in
Port stackage.hs to use optparse-applicative
7819eeaChris Done
app/stackage.hs+43−13
@@ -1,16 +1,46 @@
1+module Main where
2+
3+import Control.Monad
4+import Data.Monoid
5+import Data.Version
6+import Options.Applicative
7+import Paths_stackage (version)
1import Stackage.CompleteBuild
8import Stackage.CompleteBuild
2−import System.Environment (getArgs)
3
9
4main :: IO ()
10main :: IO ()
5−main = do
11+main =
6− args <- getArgs
12+ join (execParser
7− case args of
13+ (info (helpOption <*> versionOption <*> config)
8− [x] | Just y <- lookup x m -> y
14+ (header "Stackage" <>
9− _ -> error $ "Expected one argument, one of: " ++ unwords (map fst m)
15+ fullDesc)))
10− where
16+ where helpOption =
11− m =
17+ abortOption
18+ ShowHelpText
19+ (long "help" <>
20+ help "Show this help text")
21+ versionOption =
22+ infoOption
23+ ("fpbuild version " ++ showVersion version)
24+ (long "version" <>
25+ help "Show fpbuild version")
26+ config =
27+ subparser (mconcat [cmnd completeBuild
28+ (pure Nightly)
12− [ ("nightly", completeBuild Nightly)
29+ "nightly"
30+ "Build, test and upload the Nightly snapshot"
13− , ("lts-major", completeBuild $ LTS Major)
31+ ,cmnd completeBuild
32+ (pure (LTS Major))
33+ "lts-major"
34+ "Build, test and upload the LTS (major) snapshot"
14− , ("lts-minor", completeBuild $ LTS Minor)
35+ ,cmnd completeBuild
36+ (pure (LTS Minor))
37+ "lts-minor"
38+ "Build, test and upload the LTS (minor) snapshot"
15− , ("check", justCheck)
39+ ,cmnd (const justCheck)
16− ]
40+ (pure ())
41+ "check"
42+ "Just check that the build plan is ok"])
43+ cmnd exec parse name desc =
44+ (command name
45+ (info (fmap exec parse)
46+ (progDesc desc)))
stackage.cabal+1
@@ -68,6 +68,7 @@ executable stackage
68 main-is: stackage.hs
68 main-is: stackage.hs
69 build-depends: base
69 build-depends: base
70 , stackage
70 , stackage
71+ , optparse-applicative >= 0.11
71 ghc-options: -rtsopts -threaded -with-rtsopts=-N
72 ghc-options: -rtsopts -threaded -with-rtsopts=-N
72
73
73test-suite spec
74test-suite spec