diff --git a/pkg/cli/api.go b/pkg/cli/api.go index 5abcbb651bb..8e71ab0438d 100644 --- a/pkg/cli/api.go +++ b/pkg/cli/api.go @@ -60,8 +60,8 @@ func (c cli) bindCreateAPI(ctx plugin.Context, cmd *cobra.Command) { tmpGetter, isGetter := p.(plugin.CreateAPIPluginGetter) if isGetter { if getter != nil { - err := fmt.Errorf("duplicate API creation plugins for project version %q: %s, %s", - c.projectVersion, getter.Name(), p.Name()) + err := fmt.Errorf("duplicate API creation plugins for project version %q (%s, %s), "+ + "use a more specific plugin key", c.projectVersion, plugin.KeyFor(getter), plugin.KeyFor(p)) cmdErr(cmd, err) return } diff --git a/pkg/cli/cmd_helpers.go b/pkg/cli/cmd_helpers.go index 28bd48dd3a2..9ea30788da7 100644 --- a/pkg/cli/cmd_helpers.go +++ b/pkg/cli/cmd_helpers.go @@ -32,6 +32,12 @@ func cmdErr(cmd *cobra.Command, err error) { cmd.RunE = errCmdFunc(err) } +// cmdErrNoHelp calls cmdErr(cmd, err) then turns cmd's usage off. +func cmdErrNoHelp(cmd *cobra.Command, err error) { + cmdErr(cmd, err) + cmd.SilenceUsage = true +} + // errCmdFunc returns a cobra RunE function that returns the provided error func errCmdFunc(err error) func(*cobra.Command, []string) error { return func(*cobra.Command, []string) error { diff --git a/pkg/cli/init.go b/pkg/cli/init.go index 0dd1f340be4..5f97a571eb9 100644 --- a/pkg/cli/init.go +++ b/pkg/cli/init.go @@ -121,18 +121,23 @@ func (c cli) bindInit(ctx plugin.Context, cmd *cobra.Command) { tmpGetter, isGetter := p.(plugin.InitPluginGetter) if isGetter { if getter != nil { - log.Fatalf("duplicate initialization plugins for project version %q: %s, %s", - c.projectVersion, getter.Name(), p.Name()) + err := fmt.Errorf("duplicate initialization plugins for project version %q (%s, %s), "+ + "use a more specific plugin key", c.projectVersion, plugin.KeyFor(getter), plugin.KeyFor(p)) + cmdErrNoHelp(cmd, err) + return } getter = tmpGetter } } if getter == nil { + var err error if c.cliPluginKey == "" { - log.Fatalf("project version %q does not support an initialization plugin", c.projectVersion) + err = fmt.Errorf("project version %q does not support an initialization plugin", c.projectVersion) } else { - log.Fatalf("plugin %q does not support an initialization plugin", c.cliPluginKey) + err = fmt.Errorf("plugin %q does not support an initialization plugin", c.cliPluginKey) } + cmdErrNoHelp(cmd, err) + return } cfg := internalconfig.New(internalconfig.DefaultPath) diff --git a/pkg/cli/webhook.go b/pkg/cli/webhook.go index 6e1b9244055..08d7ecd3334 100644 --- a/pkg/cli/webhook.go +++ b/pkg/cli/webhook.go @@ -60,8 +60,8 @@ func (c cli) bindCreateWebhook(ctx plugin.Context, cmd *cobra.Command) { tmpGetter, isGetter := p.(plugin.CreateWebhookPluginGetter) if isGetter { if getter != nil { - err := fmt.Errorf("duplicate webhook creation plugins for project version %q: %s, %s", - c.projectVersion, getter.Name(), p.Name()) + err := fmt.Errorf("duplicate webhook creation plugins for project version %q (%s, %s), "+ + "use a more specific plugin key", c.projectVersion, plugin.KeyFor(getter), plugin.KeyFor(p)) cmdErr(cmd, err) return }