1{- git-annex usage messages
2 -
3 - Copyright 2010-2015 Joey Hess <id@joeyh.name>
4 -
5 - Licensed under the GNU AGPL version 3 or higher.
6 -}
7
8module CmdLine.Usage where
9
10import Annex.Common
11import Types.Command
12
13usageMessage :: String -> String
14usageMessage s = "Usage: " ++ s
15
16usage :: String -> [Command] -> String
17usage header cmds = unlines $ usageMessage header : commandList cmds
18
19{- Commands listed by section, with brief usage and description. -}
20commandList :: [Command] -> [String]
21commandList cmds = concatMap go [minBound..]
22  where
23	go section
24		| null cs = []
25		| otherwise =
26			[ ""
27			, descSection section ++ ":"
28			, ""
29			] ++ map cmdline cs
30	  where
31		cs = filter (\c -> cmdsection c == section) scmds
32	cmdline c = concat
33		[ cmdname c
34		, namepad (cmdname c)
35		, cmdparamdesc c
36		, descpad (cmdparamdesc c)
37		, cmddesc c
38		]
39	pad n s = replicate (n - length s) ' '
40	namepad = pad $ longest cmdname + 1
41	descpad = pad $ longest cmdparamdesc + 2
42	longest f = foldl max 0 $ map (length . f) cmds
43	scmds = sort cmds
44
45
46{- Descriptions of params used in usage messages. -}
47paramPaths :: String
48paramPaths = paramRepeating paramPath -- most often used
49paramPath :: String
50paramPath = "PATH"
51paramKey :: String
52paramKey = "KEY"
53paramDesc :: String
54paramDesc = "DESC"
55paramUrl :: String
56paramUrl = "URL"
57paramNumber :: String
58paramNumber = "NUMBER"
59paramNumRange :: String
60paramNumRange = "NUM|RANGE"
61paramRemote :: String
62paramRemote = "REMOTE"
63paramField :: String
64paramField = "FIELD"
65paramGlob :: String
66paramGlob = "GLOB"
67paramName :: String
68paramName = "NAME"
69paramValue :: String
70paramValue = "VALUE"
71paramUUID :: String
72paramUUID = "UUID"
73paramType :: String
74paramType = "TYPE"
75paramDate :: String
76paramDate = "DATE"
77paramTime :: String
78paramTime = "TIME"
79paramFormat :: String
80paramFormat = "FORMAT"
81paramFile :: String
82paramFile = "FILE"
83paramRef :: String
84paramRef = "REF"
85paramRefSpec :: String
86paramRefSpec = "REFSPEC"
87paramGroup :: String
88paramGroup = "GROUP"
89paramExpression :: String
90paramExpression = "EXPR"
91paramSize :: String
92paramSize = "SIZE"
93paramAddress :: String
94paramAddress = "ADDRESS"
95paramItem :: String
96paramItem = "ITEM"
97paramTreeish :: String
98paramTreeish = "TREEISH"
99paramParamValue :: String
100paramParamValue = "PARAM=VALUE"
101paramNothing :: String
102paramNothing = ""
103paramRepeating :: String -> String
104paramRepeating s = s ++ " ..."
105paramOptional :: String -> String
106paramOptional s = s
107paramPair :: String -> String -> String
108paramPair a b = a ++ " " ++ b
109paramOr :: String -> String -> String
110paramOr a b = a ++ " | " ++ b
111