diff --git a/core/commands/commands.go b/core/commands/commands.go index 3333794f9..d338a2e3d 100644 --- a/core/commands/commands.go +++ b/core/commands/commands.go @@ -19,8 +19,13 @@ 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 { @@ -29,10 +34,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) { @@ -48,16 +56,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++ } @@ -71,7 +80,7 @@ func cmdPathStrings(cmd *Command) []string { recurse = func(prefix string, cmd *Command) { newPrefix := prefix + cmd.Name cmds = append(cmds, newPrefix) - if prefix != "" { + if prefix != "" && cmd.ShowOptions { for _, option := range cmd.Options { optName := option.Names()[0] if len(optName) == 1 {