Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-dms3
Commits
4970d8b5
Commit
4970d8b5
authored
Nov 11, 2014
by
Matt Bell
Committed by
Juan Batiz-Benet
Nov 14, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commands/cli: Use template for helptext generation
parent
ea15bd6f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
89 additions
and
49 deletions
+89
-49
cmd/ipfs2/main.go
cmd/ipfs2/main.go
+4
-10
commands/cli/helptext.go
commands/cli/helptext.go
+85
-39
No files found.
cmd/ipfs2/main.go
View file @
4970d8b5
...
...
@@ -107,11 +107,9 @@ func createRequest(args []string) (cmds.Request, *cmds.Command, error) {
}
// generate the help text for the command the user was trying to call (or root)
helpText
,
htErr
:=
cmdsCli
.
Help
Text
(
"ipfs"
,
root
,
path
)
htErr
:=
cmdsCli
.
Long
Help
(
"ipfs"
,
root
,
path
,
os
.
Stdout
)
if
htErr
!=
nil
{
fmt
.
Println
(
htErr
)
}
else
{
fmt
.
Println
(
helpText
)
}
return
nil
,
nil
,
err
}
...
...
@@ -150,12 +148,10 @@ func handleHelpOption(req cmds.Request, root *cmds.Command) (helpTextDisplayed b
if
!
help
{
return
false
,
nil
}
helpText
,
err
:
=
cmdsCli
.
Help
Text
(
"ipfs"
,
root
,
req
.
Path
())
err
=
cmdsCli
.
Long
Help
(
"ipfs"
,
root
,
req
.
Path
()
,
os
.
Stdout
)
if
err
!=
nil
{
return
false
,
err
}
fmt
.
Println
(
helpText
)
return
true
,
nil
}
...
...
@@ -214,11 +210,9 @@ func outputResponse(res cmds.Response, root *cmds.Command) error {
// if this is a client error, we try to display help text
if
res
.
Error
()
.
Code
==
cmds
.
ErrClient
{
helpText
,
err
:=
cmdsCli
.
Help
Text
(
"ipfs"
,
root
,
res
.
Request
()
.
Path
())
err
:=
cmdsCli
.
Long
Help
(
"ipfs"
,
root
,
res
.
Request
()
.
Path
()
,
os
.
Stdout
)
if
err
!=
nil
{
fmt
.
Println
(
err
.
Error
())
}
else
{
fmt
.
Println
(
helpText
)
fmt
.
Println
(
err
)
}
}
...
...
commands/cli/helptext.go
View file @
4970d8b5
...
...
@@ -2,7 +2,9 @@ package cli
import
(
"fmt"
"io"
"strings"
"text/template"
cmds
"github.com/jbenet/go-ipfs/commands"
)
...
...
@@ -15,60 +17,104 @@ const (
optionType
=
"(%v)"
whitespace
=
"
\r\n\t
"
indentStr
=
" "
)
// HelpText returns a formatted CLI helptext string, generated for the given command
func
HelpText
(
rootName
string
,
root
*
cmds
.
Command
,
path
[]
string
)
(
string
,
error
)
{
cmd
,
err
:=
root
.
Get
(
path
)
type
helpFields
struct
{
Indent
string
Path
string
ArgUsage
string
Tagline
string
Arguments
string
Options
string
Subcommands
string
Description
string
}
const
usageFormat
=
"{{.Path}}{{if .ArgUsage}} {{.ArgUsage}}{{end}} - {{.Tagline}}"
const
longHelpFormat
=
`
{{.Indent}}{{template "usage" .}}
{{if .Arguments}}ARGUMENTS:
{{.Indent}}{{.Arguments}}
{{end}}{{if .Options}}OPTIONS:
{{.Indent}}{{.Options}}
{{end}}{{if .Subcommands}}SUBCOMMANDS:
{{.Indent}}{{.Subcommands}}
{{.Indent}}Use '{{.Path}} <subcmd> --help' for more information about each command.
{{end}}{{if .Description}}DESCRIPTION:
{{.Indent}}{{.Description}}
{{end}}
`
var
longHelpTemplate
*
template
.
Template
var
usageTemplate
*
template
.
Template
func
init
()
{
tmpl
,
err
:=
template
.
New
(
"usage"
)
.
Parse
(
usageFormat
)
if
err
!=
nil
{
return
""
,
err
panic
(
err
)
}
usageTemplate
=
tmpl
s
:=
""
usage
:=
usageText
(
cmd
)
if
len
(
usage
)
>
0
{
usage
+=
" "
tmpl
,
err
=
usageTemplate
.
New
(
"longHelp"
)
.
Parse
(
longHelpFormat
)
if
err
!=
nil
{
panic
(
err
)
}
s
+=
fmt
.
Sprintf
(
"%v %v %v- %v
\n\n
"
,
rootName
,
strings
.
Join
(
path
,
" "
),
usage
,
cmd
.
Description
)
longHelpTemplate
=
tmpl
}
if
len
(
cmd
.
Help
)
>
0
{
s
+=
fmt
.
Sprintf
(
"%v
\n\n
"
,
strings
.
Trim
(
cmd
.
Help
,
whitespace
))
// LongHelp returns a formatted CLI helptext string, generated for the given command
func
LongHelp
(
rootName
string
,
root
*
cmds
.
Command
,
path
[]
string
,
out
io
.
Writer
)
error
{
cmd
,
err
:=
root
.
Get
(
path
)
if
err
!=
nil
{
return
err
}
if
cmd
.
Arguments
!=
nil
{
if
len
(
cmd
.
ArgumentHelp
)
>
0
{
s
+=
cmd
.
ArgumentHelp
}
else
{
section
:=
strings
.
Join
(
indent
(
argumentText
(
cmd
),
" "
),
"
\n
"
)
s
+=
fmt
.
Sprintf
(
"Arguments:
\n
%v"
,
section
)
}
s
+=
"
\n\n
"
pathStr
:=
rootName
if
len
(
path
)
>
0
{
pathStr
+=
" "
+
strings
.
Join
(
path
,
" "
)
}
if
cmd
.
Subcomman
ds
!
=
nil
{
if
len
(
cmd
.
SubcommandHelp
)
>
0
{
s
+=
cmd
.
SubcommandHelp
}
else
{
section
:=
strings
.
Join
(
indent
(
subcommandText
(
cmd
,
rootName
,
path
),
" "
),
"
\n
"
)
s
+=
fmt
.
Sprintf
(
"Subcommands:
\n
%v"
,
section
)
}
s
+=
"
\n\n
"
fiel
ds
:
=
helpFields
{
Indent
:
indentStr
,
Path
:
pathStr
,
ArgUsage
:
usageText
(
cmd
),
Tagline
:
cmd
.
Description
,
Arguments
:
cmd
.
ArgumentHelp
,
Options
:
cmd
.
OptionHelp
,
Subcommands
:
cmd
.
SubcommandHelp
,
Description
:
cmd
.
Help
,
}
if
cmd
.
Options
!=
nil
{
if
len
(
cmd
.
OptionHelp
)
>
0
{
s
+=
cmd
.
OptionHelp
}
else
{
section
:=
strings
.
Join
(
indent
(
optionText
(
cmd
),
" "
),
"
\n
"
)
s
+=
fmt
.
Sprintf
(
"Options:
\n
%v"
,
section
)
}
s
+=
"
\n\n
"
// autogen fields that are empty
if
len
(
cmd
.
ArgumentHelp
)
==
0
{
fields
.
Arguments
=
strings
.
Join
(
argumentText
(
cmd
),
"
\n
"
)
}
if
len
(
cmd
.
OptionHelp
)
==
0
{
fields
.
Options
=
strings
.
Join
(
optionText
(
cmd
),
"
\n
"
)
}
if
len
(
cmd
.
SubcommandHelp
)
==
0
{
fields
.
Subcommands
=
strings
.
Join
(
subcommandText
(
cmd
,
rootName
,
path
),
"
\n
"
)
}
fields
.
Arguments
=
indentString
(
fields
.
Arguments
,
indentStr
)
fields
.
Options
=
indentString
(
fields
.
Options
,
indentStr
)
fields
.
Subcommands
=
indentString
(
fields
.
Subcommands
,
indentStr
)
fields
.
Description
=
indentString
(
fields
.
Description
,
indentStr
)
return
s
,
nil
return
longHelpTemplate
.
Execute
(
out
,
fields
)
}
func
argumentText
(
cmd
*
cmds
.
Command
)
[]
string
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment