diff --git a/Benchmark.hs b/Benchmark.hs index 4f191b501e..c48cbbd091 100644 --- a/Benchmark.hs +++ b/Benchmark.hs @@ -12,7 +12,6 @@ import Types.Benchmark import Types.Command import CmdLine.Action import CmdLine -import CmdLine.GitAnnex.Options import qualified Annex import qualified Annex.Branch @@ -39,7 +38,7 @@ mkGenerator cmds userinput = do -- matching or out-of-repo commands. parsesubcommand ps = do (cmd, seek, globalconfig) <- liftIO $ O.handleParseResult $ - parseCmd "git-annex" "benchmarking" gitAnnexGlobalOptions ps cmds cmdparser + parseCmd "git-annex" "benchmarking" ps cmds cmdparser -- Make an entirely separate Annex state for each subcommand, -- and prepare it to run the cmd. st <- liftIO . Annex.new =<< Annex.getState Annex.repo diff --git a/CmdLine.hs b/CmdLine.hs index 8ee70a7c14..4035db51ef 100644 --- a/CmdLine.hs +++ b/CmdLine.hs @@ -27,8 +27,8 @@ import Command import Types.Messages {- Runs the passed command line. -} -dispatch :: Bool -> CmdParams -> [Command] -> [GlobalOption] -> [(String, String)] -> IO Git.Repo -> String -> String -> IO () -dispatch fuzzyok allargs allcmds globaloptions fields getgitrepo progname progdesc = do +dispatch :: Bool -> CmdParams -> [Command] -> [(String, String)] -> IO Git.Repo -> String -> String -> IO () +dispatch fuzzyok allargs allcmds fields getgitrepo progname progdesc = do setupConsole go =<< tryNonAsync getgitrepo where @@ -61,13 +61,13 @@ dispatch fuzzyok allargs allcmds globaloptions fields getgitrepo progname progde a parsewith secondrun getparser ingitrepo handleresult = - case parseCmd progname progdesc globaloptions allargs allcmds getparser of + case parseCmd progname progdesc allargs allcmds getparser of O.Failure _ -> do -- parse failed, so fall back to -- fuzzy matching, or to showing usage when (fuzzy && not secondrun) $ ingitrepo autocorrect - handleresult (parseCmd progname progdesc globaloptions correctedargs allcmds getparser) + handleresult (parseCmd progname progdesc correctedargs allcmds getparser) res -> handleresult res where autocorrect = Git.AutoCorrect.prepare (fromJust inputcmdname) cmdname cmds @@ -84,8 +84,8 @@ dispatch fuzzyok allargs allcmds globaloptions fields getgitrepo progname progde (fuzzy, cmds) = findCmd fuzzyok allcmds inputcmdname {- Parses command line, selecting one of the commands from the list. -} -parseCmd :: String -> String -> [GlobalOption] -> CmdParams -> [Command] -> (Command -> O.Parser v) -> O.ParserResult (Command, v, GlobalSetter) -parseCmd progname progdesc globaloptions allargs allcmds getparser = +parseCmd :: String -> String -> CmdParams -> [Command] -> (Command -> O.Parser v) -> O.ParserResult (Command, v, GlobalSetter) +parseCmd progname progdesc allargs allcmds getparser = O.execParserPure (O.prefs O.idm) pinfo allargs where pinfo = O.info (O.helper <*> subcmds) (O.progDescDoc (Just intro)) @@ -96,7 +96,7 @@ parseCmd progname progdesc globaloptions allargs allcmds getparser = mkparser c = (,,) <$> pure c <*> getparser c - <*> combineGlobalOptions (globaloptions ++ cmdglobaloptions c) + <*> combineGlobalOptions (cmdglobaloptions c) synopsis n d = n ++ " - " ++ d intro = mconcat $ concatMap (\l -> [H.text l, H.line]) (synopsis progname progdesc : commandList allcmds) diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs index 08c03d7ae9..9c433629ad 100644 --- a/CmdLine/GitAnnex.hs +++ b/CmdLine/GitAnnex.hs @@ -126,7 +126,7 @@ import qualified Command.TestRemote import qualified Command.Benchmark cmds :: Parser TestOptions -> TestRunner -> MkBenchmarkGenerator -> [Command] -cmds testoptparser testrunner mkbenchmarkgenerator = +cmds testoptparser testrunner mkbenchmarkgenerator = map addGitAnnexGlobalOptions $ [ Command.Help.cmd , Command.Add.cmd , Command.Get.cmd @@ -237,12 +237,15 @@ cmds testoptparser testrunner mkbenchmarkgenerator = mkbenchmarkgenerator $ cmds testoptparser testrunner (\_ _ -> return noop) ] +addGitAnnexGlobalOptions :: Command -> Command +addGitAnnexGlobalOptions c = c { cmdglobaloptions = gitAnnexGlobalOptions ++ cmdglobaloptions c } + run :: Parser TestOptions -> TestRunner -> MkBenchmarkGenerator -> [String] -> IO () run testoptparser testrunner mkbenchmarkgenerator args = go envmodes where go [] = dispatch True args (cmds testoptparser testrunner mkbenchmarkgenerator) - gitAnnexGlobalOptions [] Git.CurrentRepo.get + [] Git.CurrentRepo.get "git-annex" "manage files with git, without checking their contents in" go ((v, a):rest) = maybe (go rest) a =<< getEnv v diff --git a/CmdLine/GitAnnexShell.hs b/CmdLine/GitAnnexShell.hs index 222024a754..ed4f83a3d4 100644 --- a/CmdLine/GitAnnexShell.hs +++ b/CmdLine/GitAnnexShell.hs @@ -40,7 +40,7 @@ cmdsMap = M.fromList $ map mk , (ServeReadWrite, allcmds) ] where - readonlycmds = + readonlycmds = map addGlobalOptions [ Command.ConfigList.cmd , gitAnnexShellCheck Command.InAnnex.cmd , gitAnnexShellCheck Command.LockContent.cmd @@ -51,11 +51,11 @@ cmdsMap = M.fromList $ map mk -- determine the security policy to use , gitAnnexShellCheck Command.P2PStdIO.cmd ] - appendcmds = readonlycmds ++ + appendcmds = readonlycmds ++ map addGlobalOptions [ gitAnnexShellCheck Command.RecvKey.cmd , gitAnnexShellCheck Command.Commit.cmd ] - allcmds = + allcmds = map addGlobalOptions [ gitAnnexShellCheck Command.DropKey.cmd , Command.GCryptSetup.cmd ] @@ -69,6 +69,9 @@ cmdsFor = fromMaybe [] . flip M.lookup cmdsMap cmdsList :: [Command] cmdsList = concat $ M.elems cmdsMap +addGlobalOptions :: Command -> Command +addGlobalOptions c = c { cmdglobaloptions = globalOptions ++ cmdglobaloptions c } + globalOptions :: [GlobalOption] globalOptions = globalSetter checkUUID (strOption @@ -119,7 +122,7 @@ builtin cmd dir params = do let (params', fieldparams, opts) = partitionParams params rsyncopts = ("RsyncOptions", unwords opts) fields = rsyncopts : filter checkField (parseFields fieldparams) - dispatch False (cmd : params') cmdsList globalOptions fields mkrepo + dispatch False (cmd : params') cmdsList fields mkrepo "git-annex-shell" "Restricted login shell for git-annex only SSH access" where