b932acf4ad
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.
110 lines
2.5 KiB
Haskell
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
|