git-annex/CmdLine/Usage.hs
Joey Hess b932acf4ad
started Annex.Sim
Have most of the sim command handler, but to keep it pure while implementing
the rest will need some refactoring.

It seems likely that running the simulation itself will not be able to be
entirely pure. Preferred content evaluation runs in Annex after all.

Note that the somewhat awkward randomWords is because the i386ancient
build depends on a version of random too old to support generating a
random ByteString on its own.
2024-09-04 15:15:36 -04:00

110 lines
2.5 KiB
Haskell

{- git-annex usage messages
-
- Copyright 2010-2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU AGPL version 3 or higher.
-}
module CmdLine.Usage where
import Annex.Common
import Types.Command
usageMessage :: String -> String
usageMessage s = "Usage: " ++ s
usage :: String -> [Command] -> String
usage header cmds = unlines $ usageMessage header : commandList cmds
{- Commands listed by section, with brief usage and description. -}
commandList :: [Command] -> [String]
commandList cmds = concatMap go [minBound..]
where
go section
| null cs = []
| otherwise =
[ ""
, descSection section ++ ":"
, ""
] ++ map cmdline cs
where
cs = filter (\c -> cmdsection c == section) scmds
cmdline c = concat
[ cmdname c
, namepad (cmdname c)
, cmddesc c
]
pad n s = replicate (n - length s) ' '
namepad = pad $ longest cmdname + 1
longest f = foldl max 0 $ map (length . f) cmds
scmds = sort cmds
{- Descriptions of params used in usage messages. -}
paramPaths :: String
paramPaths = paramRepeating paramPath -- most often used
paramPath :: String
paramPath = "PATH"
paramKey :: String
paramKey = "KEY"
paramDesc :: String
paramDesc = "DESC"
paramUrl :: String
paramUrl = "URL"
paramNumber :: String
paramNumber = "NUMBER"
paramNumRange :: String
paramNumRange = "NUM|RANGE"
paramRemote :: String
paramRemote = "REMOTE"
paramRepository :: String
paramRepository = "REPOSITORY"
paramField :: String
paramField = "FIELD"
paramGlob :: String
paramGlob = "GLOB"
paramName :: String
paramName = "NAME"
paramValue :: String
paramValue = "VALUE"
paramUUID :: String
paramUUID = "UUID"
paramType :: String
paramType = "TYPE"
paramDate :: String
paramDate = "DATE"
paramTime :: String
paramTime = "TIME"
paramFormat :: String
paramFormat = "FORMAT"
paramFile :: String
paramFile = "FILE"
paramRef :: String
paramRef = "REF"
paramRefSpec :: String
paramRefSpec = "REFSPEC"
paramGroup :: String
paramGroup = "GROUP"
paramExpression :: String
paramExpression = "EXPR"
paramSize :: String
paramSize = "SIZE"
paramAddress :: String
paramAddress = "ADDRESS"
paramItem :: String
paramItem = "ITEM"
paramTreeish :: String
paramTreeish = "TREEISH"
paramParamValue :: String
paramParamValue = "PARAM=VALUE"
paramCommand :: String
paramCommand = "COMMAND"
paramNothing :: String
paramNothing = ""
paramRepeating :: String -> String
paramRepeating s = s ++ " ..."
paramOptional :: String -> String
paramOptional s = s
paramPair :: String -> String -> String
paramPair a b = a ++ " " ++ b
paramOr :: String -> String -> String
paramOr a b = a ++ " | " ++ b