Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
4970d8b5
提交
4970d8b5
authored
11月 11, 2014
作者:
Matt Bell
提交者:
Juan Batiz-Benet
11月 14, 2014
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
commands/cli: Use template for helptext generation
上级
ea15bd6f
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
89 行增加
和
49 行删除
+89
-49
main.go
cmd/ipfs2/main.go
+4
-10
helptext.go
commands/cli/helptext.go
+85
-39
没有找到文件。
cmd/ipfs2/main.go
浏览文件 @
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)
h
elpText
,
htErr
:=
cmdsCli
.
HelpText
(
"ipfs"
,
root
,
path
)
h
tErr
:=
cmdsCli
.
LongHelp
(
"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
.
HelpText
(
"ipfs"
,
root
,
req
.
Path
()
)
err
=
cmdsCli
.
LongHelp
(
"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
.
HelpText
(
"ipfs"
,
root
,
res
.
Request
()
.
Path
()
)
err
:=
cmdsCli
.
LongHelp
(
"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
浏览文件 @
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
.
Subcommands
!=
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
"
fields
:=
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
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论