40ecf58d4b
This does not change the overall license of the git-annex program, which was already AGPL due to a number of sources files being AGPL already. Legally speaking, I'm adding a new license under which these files are now available; I already released their current contents under the GPL license. Now they're dual licensed GPL and AGPL. However, I intend for all my future changes to these files to only be released under the AGPL license, and I won't be tracking the dual licensing status, so I'm simply changing the license statement to say it's AGPL. (In some cases, others wrote parts of the code of a file and released it under the GPL; but in all cases I have contributed a significant portion of the code in each file and it's that code that is getting the AGPL license; the GPL license of other contributors allows combining with AGPL code.)
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 breif 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)
|
|
, cmdparamdesc c
|
|
, descpad (cmdparamdesc c)
|
|
, cmddesc c
|
|
]
|
|
pad n s = replicate (n - length s) ' '
|
|
namepad = pad $ longest cmdname + 1
|
|
descpad = pad $ longest cmdparamdesc + 2
|
|
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"
|
|
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"
|
|
paramKeyValue :: String
|
|
paramKeyValue = "K=V"
|
|
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
|