make usage less terrifying

Need to make `git annex help command` show the options for that command.
This commit is contained in:
Joey Hess 2013-03-25 12:41:57 -04:00
parent 3babb935d3
commit 0d72519ae0
4 changed files with 22 additions and 34 deletions

View file

@ -45,7 +45,7 @@ dispatch fuzzyok allargs allcmds commonoptions fields header getgitrepo = do
prepCommand cmd params
tryRun state' cmd $ [startup] ++ actions ++ [shutdown $ cmdnocommit cmd]
where
err msg = msg ++ "\n\n" ++ usage header allcmds commonoptions
err msg = msg ++ "\n\n" ++ usage header allcmds
cmd = Prelude.head cmds
(fuzzy, cmds, name, args) = findCmd fuzzyok allargs allcmds err
(flags, params) = getOptCmd args cmd commonoptions err

View file

@ -126,7 +126,7 @@ checkField (field, value)
| otherwise = False
failure :: IO ()
failure = error $ "bad parameters\n\n" ++ usage header cmds options
failure = error $ "bad parameters\n\n" ++ usage header cmds
checkNotLimited :: IO ()
checkNotLimited = checkEnv "GIT_ANNEX_SHELL_LIMITED"

View file

@ -53,9 +53,9 @@ instance Eq CommandCheck where
instance Eq Command where
a == b = cmdname a == cmdname b
{- Order commands by section and then by name -}
{- Order commands by name. -}
instance Ord Command where
compare = comparing (\c -> (cmdsection c, cmdname c))
compare = comparing cmdname
{- The same sections are listed in doc/git-annex.mdwn -}
data CommandSection

View file

@ -8,41 +8,29 @@
module Usage where
import Common.Annex
import System.Console.GetOpt
import Types.Command
{- Usage message with lists of commands and options. -}
usage :: String -> [Command] -> [Option] -> String
usage header cmds commonoptions = unlines $
[ header
, ""
, "Options:"
] ++ optlines ++ cmdlines
{- Usage message with lists of commands by section. -}
usage :: String -> [Command] -> String
usage header cmds = unlines $ header : concatMap go [minBound..]
where
-- To get consistent indentation of options, generate the
-- usage for all options at once. A command's options will
-- be displayed after the command.
alloptlines = filter (not . null) $
lines $ usageInfo "" $
concatMap cmdoptions scmds ++ commonoptions
(cmdlines, optlines) = go Nothing scmds alloptlines []
go _ [] os ls = (ls, os)
go section (c:cs) os ls = go section' cs os' ls'
go section
| null cs = []
| otherwise =
[ ""
, descSection section ++ ":"
, ""
] ++ map cmdline cs
where
ls' = ls++sectionheader++(l:o)
sectionheader
| section == section' = []
| otherwise = ["", descSection (cmdsection c) ++ ":", ""]
section' = Just (cmdsection c)
(o, os') = splitAt (length $ cmdoptions c) os
l = concat
[ cmdname c
, namepad (cmdname c)
, cmdparamdesc c
, descpad (cmdparamdesc c)
, cmddesc c
]
cs = filter (\c -> cmdsection c == section) scmds
cmdline c = concat
[ cmdname c
, namepad (cmdname c)
, cmdparamdesc c
, descpad (cmdparamdesc c)
, cmddesc c
]
pad n s = replicate (n - length s) ' '
namepad = pad $ longest cmdname + 1
descpad = pad $ longest cmdparamdesc + 2