func getCommand()

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
}