提交 9ca0be36 作者: Juan Benet

Merge pull request #1852 from ipfs/rht-commands-flags

Make `ipfs commands --flags` option
......@@ -11,6 +11,7 @@ import (
"bytes"
"io"
"sort"
"strings"
cmds "github.com/ipfs/go-ipfs/commands"
)
......@@ -18,8 +19,14 @@ import (
type Command struct {
Name string
Subcommands []Command
Options []cmds.Option
ShowOptions bool
}
const (
flagsOptionName = "flags"
)
// CommandsCmd takes in a root command,
// and returns a command that lists the subcommands in that root
func CommandsCmd(root *cmds.Command) *cmds.Command {
......@@ -28,10 +35,13 @@ func CommandsCmd(root *cmds.Command) *cmds.Command {
Tagline: "List all available commands.",
ShortDescription: `Lists all available commands (and subcommands) and exits.`,
},
Options: []cmds.Option{
cmds.BoolOption(flagsOptionName, "f", "Show command flags"),
},
Run: func(req cmds.Request, res cmds.Response) {
root := cmd2outputCmd("ipfs", root)
res.SetOutput(&root)
showOptions, _, _ := req.Option(flagsOptionName).Bool()
rootCmd := cmd2outputCmd("ipfs", root, showOptions)
res.SetOutput(&rootCmd)
},
Marshalers: cmds.MarshalerMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) {
......@@ -47,15 +57,17 @@ func CommandsCmd(root *cmds.Command) *cmds.Command {
}
}
func cmd2outputCmd(name string, cmd *cmds.Command) Command {
func cmd2outputCmd(name string, cmd *cmds.Command, showOptions bool) Command {
output := Command{
Name: name,
Subcommands: make([]Command, len(cmd.Subcommands)),
Options: cmd.Options,
ShowOptions: showOptions,
}
i := 0
for name, sub := range cmd.Subcommands {
output.Subcommands[i] = cmd2outputCmd(name, sub)
output.Subcommands[i] = cmd2outputCmd(name, sub, showOptions)
i++
}
......@@ -67,9 +79,25 @@ func cmdPathStrings(cmd *Command) []string {
var recurse func(prefix string, cmd *Command)
recurse = func(prefix string, cmd *Command) {
cmds = append(cmds, prefix+cmd.Name)
newPrefix := prefix + cmd.Name
cmds = append(cmds, newPrefix)
if prefix != "" && cmd.ShowOptions {
for _, option := range cmd.Options {
names := option.Names()
var cmdOpts []string
for _, flag := range names {
if len(flag) == 1 {
flag = "-" + flag
} else {
flag = "--" + flag
}
cmdOpts = append(cmdOpts, newPrefix+" "+flag)
}
cmds = append(cmds, strings.Join(cmdOpts, " / "))
}
}
for _, sub := range cmd.Subcommands {
recurse(prefix+cmd.Name+" ", &sub)
recurse(newPrefix+" ", &sub)
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论