Make full option parsing be done when not in a git repo, so --help can be displayed for commands that require a git repo, etc.

This commit is contained in:
Joey Hess 2015-09-09 15:55:13 -04:00
parent 08b7af3fe6
commit f6c03414cf
3 changed files with 23 additions and 9 deletions

View file

@ -36,8 +36,9 @@ dispatch fuzzyok allargs allcmds globaloptions fields getgitrepo progname progde
Annex.eval state $ do
checkEnvironment
forM_ fields $ uncurry Annex.setField
(cmd, seek, globalconfig) <- parsewith cmdparser
(cmd, seek, globalconfig) <- parsewith False cmdparser
(\a -> inRepo $ a . Just)
(liftIO . O.handleParseResult)
when (cmdnomessages cmd) $
Annex.setOutput QuietOutput
getParsed globalconfig
@ -47,20 +48,30 @@ dispatch fuzzyok allargs allcmds globaloptions fields getgitrepo progname progde
performCommandAction cmd seek $
shutdown $ cmdnocommit cmd
go (Left norepo) = do
(_, a, _globalconfig) <- parsewith
(fromMaybe (throw norepo) . cmdnorepo)
(\a -> a =<< Git.Config.global)
a
let ingitrepo = \a -> a =<< Git.Config.global
-- Parse command line with full cmdparser first,
-- so that help can be displayed for bad parses
-- even when not run in a repo.
res <- parsewith False cmdparser ingitrepo return
case res of
Failure _ -> void (O.handleParseResult res)
_ -> do
-- Parse command line in norepo mode.
(_, a, _globalconfig) <- parsewith True
(fromMaybe (throw norepo) . cmdnorepo)
ingitrepo
O.handleParseResult
a
parsewith getparser ingitrepo =
parsewith secondrun getparser ingitrepo handleresult =
case parseCmd progname progdesc globaloptions allargs allcmds getparser of
O.Failure _ -> do
-- parse failed, so fall back to
-- fuzzy matching, or to showing usage
when fuzzy $
when (fuzzy && not secondrun) $
ingitrepo autocorrect
liftIO (O.handleParseResult (parseCmd progname progdesc globaloptions correctedargs allcmds getparser))
res -> liftIO (O.handleParseResult res)
handleresult (parseCmd progname progdesc globaloptions correctedargs allcmds getparser)
res -> handleresult res
where
autocorrect = Git.AutoCorrect.prepare (fromJust inputcmdname) cmdname cmds
(fuzzy, cmds, inputcmdname, args) = findCmd fuzzyok allargs allcmds

2
debian/changelog vendored
View file

@ -5,6 +5,8 @@ git-annex (5.20150825) UNRELEASED; urgency=medium
* info: Support querying info of individual files in direct mode.
* unused: Fix reversion in 5.20150727 that broke parsing of the
--unused-refspec option. Thanks, Øyvind A. Holm.
* Make full option parsing be done when not in a git repo, so --help
can be displayed for commands that require a git repo, etc.
-- Joey Hess <id@joeyh.name> Tue, 01 Sep 2015 14:46:18 -0700

View file

@ -22,3 +22,4 @@ remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glac
YES -- lots of luck ;)
> [[fixed|done]] --[[Joey]]