in cli/app/app.go [84:119]
func getCommand(baseName string, metadata command_metadata.CommandMetadata, runner command_runner.Runner) *cli.Command {
command := &cli.Command{
Name: metadata.Name,
Aliases: metadata.Aliases,
Description: metadata.Description,
Usage: strings.Replace(metadata.Usage, "BROOKLYN_NAME", baseName, -1),
Action: func(context *cli.Context) error {
if err := runner.RunCmdByName(metadata.Name, context); err != nil {
return fmt.Errorf("error running %s: %w", metadata.Name, err)
}
return nil
},
Flags: metadata.Flags,
SkipFlagParsing: metadata.SkipFlagParsing,
}
if nil != metadata.Operands {
command.Subcommands = make([]*cli.Command, 0)
for _, operand := range metadata.Operands {
command.Subcommands = append(command.Subcommands, &cli.Command{
Name: operand.Name,
Aliases: operand.Aliases,
Description: operand.Description,
Usage: strings.Replace(operand.Usage, "BROOKLYN_NAME", baseName, -1),
Flags: operand.Flags,
SkipFlagParsing: operand.SkipFlagParsing,
Action: subCommandAction(command.Name, operand.Name, runner),
})
command.Usage = strings.Join([]string{
command.Usage, "\n... ", operand.Usage, "\t", operand.Description,
}, "")
}
}
return command
}