stack-3.7.1: src/Stack/Options/UpgradeParser.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-|
Module : Stack.Options.UpgradeParser
Description : Parse arguments for Stack's @upgrade@ command.
License : BSD-3-Clause
Function to parse command line arguments for Stack's @upgrade@ command.
-}
module Stack.Options.UpgradeParser
( upgradeOptsParser
) where
import Options.Applicative
( Parser, flag', help, idm, long, metavar, showDefault
, strOption, switch, value
)
import Options.Applicative.Builder.Extra ( boolFlags )
import Stack.Prelude
import Stack.Types.UpgradeOpts
( BinaryOpts (..), SourceOpts (..), UpgradeOpts (..) )
-- | Parse command line arguments for Stack's @upgrade@ command.
upgradeOptsParser ::
Bool
-- ^ The default for --[no]-only-local-bin
-> Parser UpgradeOpts
upgradeOptsParser onlyLocalBin = UpgradeOpts
<$> (sourceOnly <|> optional binaryOpts)
<*> (binaryOnly <|> optional sourceOpts)
where
binaryOnly = flag' Nothing
( long "binary-only"
<> help "Do not use a source upgrade path."
)
sourceOnly = flag' Nothing
( long "source-only"
<> help "Do not use a binary upgrade path."
)
binaryOpts = BinaryOpts
<$> optional (strOption
( long "binary-platform"
<> help "Platform type for archive to download."
<> metavar "PLATFORM"
))
<*> switch
( long "force-download"
<> help "Download the latest available Stack executable, even if not \
\newer."
)
<*> boolFlags onlyLocalBin
"only-local-bin"
"downloading only to Stack's local binary directory"
idm
<*> optional (strOption
( long "binary-version"
<> help "Download a specific Stack version, even if already \
\installed."
<> metavar "VERSION"
))
<*> optional (strOption
( long "github-org"
<> help "GitHub organization name."
<> metavar "USER"
))
<*> optional (strOption
( long "github-repo"
<> help "GitHub repository name."
<> metavar "REPO"
))
sourceOpts = SourceOpts
<$> ( ( \fromGit repo branch ->
if fromGit
then Just (repo, branch)
else Nothing
)
<$> switch
( long "git"
<> help "Clone from Git instead of downloading from Hackage \
\(more dangerous)."
)
<*> strOption
( long "git-repo"
<> help "Clone from specified Git repository."
<> metavar "URL"
<> value "https://github.com/commercialhaskell/stack"
<> showDefault
)
<*> strOption
( long "git-branch"
<> help "Clone from specified Git branch."
<> metavar "BRANCH"
<> value "master"
<> showDefault
)
)