cli-plugins/manager: simplify generating errors

1. Ditch wrapAsPluginError as we can simply use NewPluginError now.

2. Add a TODO to remove pluginError.Cause method.

3. Stop referring to pkg/errors method (except for 2 above).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
Kir Kolyshkin 2024-10-09 17:21:41 -07:00
parent fa30284bd4
commit 8eb1567b78
3 changed files with 9 additions and 17 deletions

View File

@ -23,12 +23,13 @@ func (e *pluginError) Error() string {
return e.cause.Error()
}
// Cause satisfies the errors.causer interface for pluginError.
// Cause satisfies the github.com/pkg/errors.causer interface for pluginError.
// TODO: remove this once all users switch away from github.com/pkg/errors.
func (e *pluginError) Cause() error {
return e.cause
}
// Unwrap provides compatibility for Go 1.13 error chains.
// Unwrap provides compatibility for Go 1.13+ error chains.
func (e *pluginError) Unwrap() error {
return e.cause
}
@ -38,17 +39,8 @@ func (e *pluginError) MarshalText() (text []byte, err error) {
return []byte(e.cause.Error()), nil
}
// wrapAsPluginError wraps an error in a pluginError with an
// additional message, analogous to errors.Wrapf.
func wrapAsPluginError(err error, msg string) error {
if err == nil {
return nil
}
return &pluginError{cause: fmt.Errorf(msg+": %w", err)}
}
// NewPluginError creates a new pluginError, analogous to
// errors.Errorf.
// [fmt.Errorf].
func NewPluginError(msg string, args ...any) error {
return &pluginError{cause: fmt.Errorf(msg, args...)}
}

View File

@ -14,7 +14,7 @@ func TestPluginError(t *testing.T) {
assert.Check(t, is.Error(err, "new error"))
inner := errors.New("testing")
err = wrapAsPluginError(inner, "wrapping")
err = NewPluginError("wrapping: %w", inner)
assert.Check(t, is.Error(err, "wrapping: testing"))
assert.Check(t, is.ErrorIs(err, inner))

View File

@ -86,12 +86,12 @@ func newPlugin(c Candidate, cmds []*cobra.Command) (Plugin, error) {
// We are supposed to check for relevant execute permissions here. Instead we rely on an attempt to execute.
meta, err := c.Metadata()
if err != nil {
p.Err = wrapAsPluginError(err, "failed to fetch metadata")
p.Err = NewPluginError("failed to fetch metadata: %w", err)
return p, nil
}
if err := json.Unmarshal(meta, &p.Metadata); err != nil {
p.Err = wrapAsPluginError(err, "invalid metadata")
p.Err = NewPluginError("invalid metadata: %w", err)
return p, nil
}
if p.Metadata.SchemaVersion != "0.1.0" {
@ -110,7 +110,7 @@ func newPlugin(c Candidate, cmds []*cobra.Command) (Plugin, error) {
func (p *Plugin) RunHook(ctx context.Context, hookData HookPluginData) ([]byte, error) {
hDataBytes, err := json.Marshal(hookData)
if err != nil {
return nil, wrapAsPluginError(err, "failed to marshall hook data")
return nil, NewPluginError("failed to marshall hook data: %w", err)
}
pCmd := exec.CommandContext(ctx, p.Path, p.Name, HookSubcommandName, string(hDataBytes))
@ -118,7 +118,7 @@ func (p *Plugin) RunHook(ctx context.Context, hookData HookPluginData) ([]byte,
pCmd.Env = append(pCmd.Env, ReexecEnvvar+"="+os.Args[0])
hookCmdOutput, err := pCmd.Output()
if err != nil {
return nil, wrapAsPluginError(err, "failed to execute plugin hook subcommand")
return nil, NewPluginError("failed to execute plugin hook subcommand: %w", err)
}
return hookCmdOutput, nil