forked from commercialhaskell/stack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUpgradeParser.hs
More file actions
84 lines (79 loc) · 2.58 KB
/
UpgradeParser.hs
File metadata and controls
84 lines (79 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
{-# LANGUAGE NoImplicitPrelude #-}
-- | Functions to parse command line arguments for Stack's @upgrade@ command.
module Stack.Options.UpgradeParser
( upgradeOptsParser
) where
import Options.Applicative
( Parser, flag', help, long, metavar, showDefault, strOption
, switch, value
)
import Stack.Prelude
import Stack.Upgrade
( BinaryOpts (..), SourceOpts (..), UpgradeOpts (..) )
-- | Parse command line arguments for Stack's @upgrade@ command.
upgradeOptsParser :: Parser UpgradeOpts
upgradeOptsParser = 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."
)
<*> 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
)
)