@@ -44,12 +44,42 @@ instance CmdlineOpt WithCmd where
44
44
argInfo RunOnly = ("run", Nothing)
45
45
46
46
optName _ = "action"
47
-
48
47
optDescription _ =
49
48
"Specify whether to run the PM command or just print it"
50
-
51
49
optDefault _ = PrintAndRun
52
50
51
+ instance CmdlineOpt BuildTarget where
52
+ argInfo OnlyInvalid = ("invalid", Just "broken Haskell packages")
53
+ argInfo AllInstalled = ("all", Just "all installed Haskell packages")
54
+ argInfo WorldTarget =
55
+ ( "world"
56
+ , Just $ "@world set (only valid with portage package\n"
57
+ ++ "manager and reinstall-atoms mode)"
58
+ )
59
+
60
+ optName _ = "target"
61
+ optDescription _ =
62
+ "Choose the type of packages for the PM to target"
63
+ optDefault _ = OnlyInvalid
64
+
65
+ instance CmdlineOpt HackportMode where
66
+ argInfo BasicMode = ("basic", Just "classic haskell-updater behavior")
67
+ argInfo ListMode =
68
+ ( "list"
69
+ , Just $ "just print a list of packages for rebuild,\n"
70
+ ++ "one package per line"
71
+ )
72
+ argInfo ReinstallAtomsMode =
73
+ ( "reinstall-atoms"
74
+ , Just $ "experimental portage invocation using\n"
75
+ ++ "--reinstall-atoms (may be more useful in\n"
76
+ ++ "some situations)" )
77
+
78
+ optName _ = "mode"
79
+ optDescription _ =
80
+ "Mode of operation for haskell-updater"
81
+ optDefault _ = BasicMode
82
+
53
83
argString :: CmdlineOpt a => a -> String
54
84
argString = fst . argInfo
55
85
@@ -63,10 +93,13 @@ argHelp _ = unlines $ [mainDesc] ++ (args >>= argLine)
63
93
argLine a = case (L.lookup a argFields, argDescription a) of
64
94
(Nothing, _) -> []
65
95
(Just s, Nothing) -> [s]
66
- (Just s, Just d) -> [s ++ padding s ++ " : " ++ d]
67
- padding s =
68
- let mx = maximum $ length . snd <$> argFields
69
- in replicate (mx - length s) ' '
96
+ (Just s, Just d) -> case lines d of
97
+ (l:ls) -> [paddedFst s l] ++ (paddedRest <$> ls)
98
+ _ -> []
99
+ paddedFst s d =
100
+ s ++ replicate (padMax - length s) ' ' ++ " : " ++ d
101
+ paddedRest d = replicate (padMax + 3) ' ' ++ d
102
+ padMax = maximum $ length . snd <$> argFields
70
103
argFields = (\a -> (a, showArg a)) <$> args
71
104
showArg a = " * " ++ argString a ++ showDef a
72
105
showDef a
@@ -103,10 +136,10 @@ defRunModifier defPM raw = RM
103
136
, withCmd = optDefault $ Proxy @WithCmd
104
137
, rawPMArgs = raw
105
138
, verbosity = Normal
106
- , listOnly = False
107
139
, showHelp = False
108
140
, showVer = False
109
141
, target = OnlyInvalid
142
+ , mode = BasicMode
110
143
}
111
144
112
145
-- | Make sure there is at least one of 'UpdateAsNeeded' or 'UpdateDeep'
@@ -121,17 +154,7 @@ postProcessRM rm = rm { flags = flags' }
121
154
122
155
options :: [OptDescr (RunModifier -> Either String RunModifier)]
123
156
options =
124
- [ Option ['c'] ["dep-check"]
125
- (naUpdate $ \r -> r { target = OnlyInvalid })
126
- "Check dependencies of Haskell packages."
127
- -- deprecated alias for 'dep-check'
128
- , Option ['u'] ["upgrade"]
129
- (naUpdate $ \r -> r { target = OnlyInvalid })
130
- "Rebuild Haskell packages after a GHC upgrade."
131
- , Option ['a'] ["all"]
132
- (naUpdate $ \r -> r { target = AllInstalled })
133
- "Rebuild all Haskell libraries built with current GHC."
134
- , Option ['P'] ["package-manager"]
157
+ [ Option ['P'] ["package-manager"]
135
158
(ReqArg mkPM "PM")
136
159
$ "Use package manager PM, where PM can be one of:\n"
137
160
++ pmList ++ defPM
@@ -145,15 +168,43 @@ options =
145
168
, Option [] ["no-deep"]
146
169
(naUpdate $ \r -> r { flags = UpdateAsNeeded : flags r } )
147
170
"Don't pull deep dependencies (--deep with emerge)."
148
- , Option ['l'] ["list-only"]
149
- (naUpdate $ \r -> r { listOnly = True })
150
- "Output only list of packages for rebuild. One package per line."
151
171
, Option ['V'] ["version"]
152
172
(naUpdate $ \r -> r { showVer = True })
153
173
"Version information."
154
174
, Option [] ["action"]
155
175
(ReqArg (fromCmdline (\a r -> r { withCmd = a })) "action")
156
176
(argHelp (Proxy @WithCmd))
177
+ , Option [] ["target"]
178
+ (ReqArg (fromCmdline (\a r -> r { target = a })) "target")
179
+ (argHelp (Proxy @BuildTarget))
180
+ , Option ['c'] ["dep-check"]
181
+ (naUpdate $ \r -> r { target = OnlyInvalid })
182
+ $ "alias for --target=" ++ argString OnlyInvalid
183
+ -- deprecated alias for 'dep-check'
184
+ , Option ['u'] ["upgrade"]
185
+ (naUpdate $ \r -> r { target = OnlyInvalid })
186
+ $ "alias for --target=" ++ argString OnlyInvalid
187
+ , Option ['a'] ["all"]
188
+ (naUpdate $ \r -> r { target = AllInstalled })
189
+ $ "alias for --target=" ++ argString AllInstalled
190
+ , Option ['W'] ["world"]
191
+ (naUpdate $ \r -> r
192
+ { pkgmgr = Portage
193
+ , target = WorldTarget
194
+ , mode = ReinstallAtomsMode
195
+ }
196
+ ) $ "alias for --package-manager=portage"
197
+ ++ " \\\n --target=" ++ argString WorldTarget
198
+ ++ " \\\n --mode=" ++ argString ReinstallAtomsMode
199
+ , Option [] ["mode"]
200
+ (ReqArg (fromCmdline (\a r -> r { mode = a })) "mode")
201
+ (argHelp (Proxy @HackportMode))
202
+ , Option ['l'] ["list-only"]
203
+ (naUpdate $ \r -> r { mode = ListMode })
204
+ $ "alias for --mode=" ++ argString ListMode
205
+ , Option ['R'] ["reinstall-atoms"]
206
+ (naUpdate $ \r -> r { mode = ReinstallAtomsMode })
207
+ $ "alias for --mode=" ++ argString ReinstallAtomsMode
157
208
, Option ['q'] ["quiet"]
158
209
(naUpdate $ \r -> r { verbosity = Quiet })
159
210
"Print only fatal errors (to stderr)."
@@ -164,6 +215,7 @@ options =
164
215
(naUpdate $ \r -> r { showHelp = True })
165
216
"Print this help message."
166
217
]
218
+
167
219
where
168
220
naUpdate f = NoArg (pure . f)
169
221
@@ -181,3 +233,6 @@ options =
181
233
\The default package manager is: " ++ defaultPMName ++ ",\n\
182
234
\which can be overriden with the \"PACKAGE_MANAGER\"\n\
183
235
\environment variable."
236
+
237
+
238
+
0 commit comments