{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Stack.Options.UploadParser
( uploadOptsParser
) where
import Options.Applicative
( Parser, completer, flag, help, idm, long, metavar, short
, strArgument, strOption, switch
)
import Options.Applicative.Builder.Extra
( boolFlags, dirCompleter, firstBoolFlagsTrue )
import Stack.Options.PvpBoundsParser ( pvpBoundsParser )
import Stack.Prelude
import Stack.Upload ( UploadOpts (..), UploadVariant (..) )
uploadOptsParser :: Parser UploadOpts
uploadOptsParser :: Parser UploadOpts
uploadOptsParser = [String]
-> Bool
-> Maybe PvpBounds
-> Bool
-> Bool
-> Maybe String
-> UploadVariant
-> FirstTrue
-> UploadOpts
UploadOpts
([String]
-> Bool
-> Maybe PvpBounds
-> Bool
-> Bool
-> Maybe String
-> UploadVariant
-> FirstTrue
-> UploadOpts)
-> Parser [String]
-> Parser
(Bool
-> Maybe PvpBounds
-> Bool
-> Bool
-> Maybe String
-> UploadVariant
-> FirstTrue
-> UploadOpts)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser [String]
itemsToWorkWithParser
Parser
(Bool
-> Maybe PvpBounds
-> Bool
-> Bool
-> Maybe String
-> UploadVariant
-> FirstTrue
-> UploadOpts)
-> Parser Bool
-> Parser
(Maybe PvpBounds
-> Bool
-> Bool
-> Maybe String
-> UploadVariant
-> FirstTrue
-> UploadOpts)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Bool
documentationParser
Parser
(Maybe PvpBounds
-> Bool
-> Bool
-> Maybe String
-> UploadVariant
-> FirstTrue
-> UploadOpts)
-> Parser (Maybe PvpBounds)
-> Parser
(Bool
-> Bool
-> Maybe String
-> UploadVariant
-> FirstTrue
-> UploadOpts)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser PvpBounds -> Parser (Maybe PvpBounds)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Maybe Text -> Parser PvpBounds
pvpBoundsParser (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"For package upload"))
Parser
(Bool
-> Bool
-> Maybe String
-> UploadVariant
-> FirstTrue
-> UploadOpts)
-> Parser Bool
-> Parser
(Bool -> Maybe String -> UploadVariant -> FirstTrue -> UploadOpts)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Bool
ignoreCheckSwitch
Parser
(Bool -> Maybe String -> UploadVariant -> FirstTrue -> UploadOpts)
-> Parser Bool
-> Parser
(Maybe String -> UploadVariant -> FirstTrue -> UploadOpts)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Bool
buildPackageOption
Parser (Maybe String -> UploadVariant -> FirstTrue -> UploadOpts)
-> Parser (Maybe String)
-> Parser (UploadVariant -> FirstTrue -> UploadOpts)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Maybe String)
tarDirParser
Parser (UploadVariant -> FirstTrue -> UploadOpts)
-> Parser UploadVariant -> Parser (FirstTrue -> UploadOpts)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser UploadVariant
uploadVariantParser
Parser (FirstTrue -> UploadOpts)
-> Parser FirstTrue -> Parser UploadOpts
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser FirstTrue
saveHackageCredsOption
where
itemsToWorkWithParser :: Parser [String]
itemsToWorkWithParser = Parser String -> Parser [String]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Mod ArgumentFields String -> Parser String
forall s. IsString s => Mod ArgumentFields s -> Parser s
strArgument
( String -> Mod ArgumentFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"ITEM"
Mod ArgumentFields String
-> Mod ArgumentFields String -> Mod ArgumentFields String
forall a. Semigroup a => a -> a -> a
<> Completer -> Mod ArgumentFields String
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer Completer
dirCompleter
Mod ArgumentFields String
-> Mod ArgumentFields String -> Mod ArgumentFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"A relative path to a package directory or, for package upload \
\only, an sdist tarball. Can be specified multiple times."
))
documentationParser :: Parser Bool
documentationParser = Bool -> Bool -> Mod FlagFields Bool -> Parser Bool
forall a. a -> a -> Mod FlagFields a -> Parser a
flag Bool
False Bool
True
( String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"documentation"
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'd'
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"Upload documentation for packages (not packages)."
)
ignoreCheckSwitch :: Parser Bool
ignoreCheckSwitch = Mod FlagFields Bool -> Parser Bool
switch
( String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"ignore-check"
Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"Do not check packages, for upload, for common mistakes."
)
buildPackageOption :: Parser Bool
buildPackageOption = Bool -> String -> String -> Mod FlagFields Bool -> Parser Bool
boolFlags Bool
False
String
"test-tarball"
String
"building of the resulting generated files, for package upload."
Mod FlagFields Bool
forall m. Monoid m => m
idm
tarDirParser :: Parser (Maybe String)
tarDirParser = Parser String -> Parser (Maybe String)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption
( String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"tar-dir"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"If specified, copy all the generated files, for package upload, \
\to this directory."
))
uploadVariantParser :: Parser UploadVariant
uploadVariantParser = UploadVariant
-> UploadVariant
-> Mod FlagFields UploadVariant
-> Parser UploadVariant
forall a. a -> a -> Mod FlagFields a -> Parser a
flag UploadVariant
Publishing UploadVariant
Candidate
( String -> Mod FlagFields UploadVariant
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"candidate"
Mod FlagFields UploadVariant
-> Mod FlagFields UploadVariant -> Mod FlagFields UploadVariant
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields UploadVariant
forall (f :: * -> *) a. String -> Mod f a
help String
"Upload as, or for, a package candidate."
)
saveHackageCredsOption :: Parser FirstTrue
saveHackageCredsOption = String -> String -> Mod FlagFields FirstTrue -> Parser FirstTrue
firstBoolFlagsTrue
String
"save-hackage-creds"
String
"saving user's Hackage username and password in a local file."
Mod FlagFields FirstTrue
forall m. Monoid m => m
idm