From 4b73e55fd23e4dfbe2b49d10e31e7ad94fcf39f7 Mon Sep 17 00:00:00 2001 From: bagtoad <47394200+BagToad@users.noreply.github.com> Date: Tue, 19 Nov 2024 16:25:13 -0700 Subject: [PATCH] Change: exit zero, still print warning to stderr Instead of returning `ErrExtensionExecutableNotFound` error which causes `gh` to have a non-zero exit code, catch it and print the message to stderr, returning nil. Only print the warning to stderr when there is a TTY. --- pkg/cmd/extension/command.go | 10 +++++++++- pkg/cmd/extension/command_test.go | 32 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/pkg/cmd/extension/command.go b/pkg/cmd/extension/command.go index 0030b5078..7f2ec0ac1 100644 --- a/pkg/cmd/extension/command.go +++ b/pkg/cmd/extension/command.go @@ -338,7 +338,15 @@ func NewCmdExtension(f *cmdutil.Factory) *cobra.Command { if err != nil { return err } - return m.InstallLocal(wd) + + err = m.InstallLocal(wd) + if errors.Is(err, ErrExtensionExecutableNotFound) { + if io.IsStdoutTTY() { + fmt.Fprintln(io.ErrOut, err.Error()) + } + return nil + } + return err } repo, err := ghrepo.FromFullName(args[0]) diff --git a/pkg/cmd/extension/command_test.go b/pkg/cmd/extension/command_test.go index e26e70690..dccd487ea 100644 --- a/pkg/cmd/extension/command_test.go +++ b/pkg/cmd/extension/command_test.go @@ -286,6 +286,38 @@ func TestNewCmdExtension(t *testing.T) { } }, }, + { + name: "install local extension without executable TTY", + args: []string{"install", "."}, + managerStubs: func(em *extensions.ExtensionManagerMock) func(*testing.T) { + em.InstallLocalFunc = func(dir string) error { + return ErrExtensionExecutableNotFound + } + em.ListFunc = func() []extensions.Extension { + return []extensions.Extension{} + } + return nil + }, + wantStderr: fmt.Sprintln(ErrExtensionExecutableNotFound.Error()), + wantErr: false, + isTTY: true, + }, + { + name: "install local extension without executable no TTY", + args: []string{"install", "."}, + managerStubs: func(em *extensions.ExtensionManagerMock) func(*testing.T) { + em.InstallLocalFunc = func(dir string) error { + return ErrExtensionExecutableNotFound + } + em.ListFunc = func() []extensions.Extension { + return []extensions.Extension{} + } + return nil + }, + wantStderr: "", + wantErr: false, + isTTY: false, + }, { name: "error extension not found", args: []string{"install", "owner/gh-some-ext"},