aec2cf0abe
Seems only fair, that, like git runs git-annex, git-annex runs git-annex-foo. Implementation relies on O.forwardOptions, so that any options are passed through to the addon program. Note that this includes options before the subcommand, eg: git-annex -cx=y foo Unfortunately, git-annex eats the --help/-h options. This is because it uses O.hsubparser, which injects that option into each subcommand. Seems like this should be possible to avoid somehow, to let commands display their own --help, instead of the dummy one git-annex displays. The two step searching mirrors how git works, it makes finding git-annex-foo fast when "git annex foo" is run, but will also support fuzzy matching, once findAllAddonCommands gets implemented. This commit was sponsored by Dr. Land Raider on Patreon.
25 lines
703 B
Haskell
25 lines
703 B
Haskell
{- git-annex global options
|
|
-
|
|
- Copyright 2015-2021 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
module CmdLine.GlobalSetter where
|
|
|
|
import Types.DeferredParse
|
|
import Common
|
|
import Annex
|
|
|
|
import Options.Applicative
|
|
|
|
globalFlag :: Annex () -> Mod FlagFields GlobalSetter -> GlobalOption
|
|
globalFlag setter = flag' (DeferredParse setter)
|
|
|
|
globalSetter :: (v -> Annex ()) -> Parser v -> GlobalOption
|
|
globalSetter setter parser = DeferredParse . setter <$> parser
|
|
|
|
parserGlobalOptions :: [GlobalOption] -> Parser GlobalSetter
|
|
parserGlobalOptions [] = DeferredParse <$> pure noop
|
|
parserGlobalOptions l = DeferredParse . mapM_ getParsed
|
|
<$> many (foldl1 (<|>) l)
|