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.
This commit is contained in:
bagtoad 2024-11-19 16:25:13 -07:00
parent 1bc2bb8059
commit 4b73e55fd2
2 changed files with 41 additions and 1 deletions

View file

@ -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])

View file

@ -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"},