Improve error code when platform not available for OS (#2933) · arduino/arduino-cli@11b2625 (original) (raw)
File tree
3 files changed
lines changed
- internal/arduino/cores/packagemanager
3 files changed
lines changed
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -16,6 +16,7 @@ | ||
| 16 | 16 | package cmderrors |
| 17 | 17 | |
| 18 | 18 | import ( |
| 19 | +"errors" | |
| 19 | 20 | "fmt" |
| 20 | 21 | "strings" |
| 21 | 22 | |
| @@ -415,6 +416,26 @@ func (e *PlatformNotFoundError) Unwrap() error { | ||
| 415 | 416 | return e.Cause |
| 416 | 417 | } |
| 417 | 418 | |
| 419 | +// PlatformNotAvailableForOSError is returned when a platform contains a tool not available | |
| 420 | +// for the user OS + ARCH | |
| 421 | +type PlatformNotAvailableForOSError struct { | |
| 422 | +Platform string | |
| 423 | +Cause error | |
| 424 | +} | |
| 425 | + | |
| 426 | +func (e *PlatformNotAvailableForOSError) Error() string { | |
| 427 | +return composeErrorMsg(i18n.Tr("Platform '%s'", e.Platform), errors.New(i18n.Tr("platform is not available for your OS"))) | |
| 428 | +} | |
| 429 | + | |
| 430 | +// GRPCStatus converts the error into a *status.Status | |
| 431 | +func (e *PlatformNotAvailableForOSError) GRPCStatus() *status.Status { | |
| 432 | +return status.New(codes.FailedPrecondition, e.Error()) | |
| 433 | +} | |
| 434 | + | |
| 435 | +func (e *PlatformNotAvailableForOSError) Unwrap() error { | |
| 436 | +return e.Cause | |
| 437 | +} | |
| 438 | + | |
| 418 | 439 | // PlatformLoadingError is returned when a platform has fatal errors that prevents loading |
| 419 | 440 | type PlatformLoadingError struct { |
| 420 | 441 | Cause error |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -17,6 +17,7 @@ package commands | ||
| 17 | 17 | |
| 18 | 18 | import ( |
| 19 | 19 | "context" |
| 20 | +"errors" | |
| 20 | 21 | "fmt" |
| 21 | 22 | |
| 22 | 23 | "github.com/arduino/arduino-cli/commands/cmderrors" |
| @@ -79,6 +80,9 @@ func (s *arduinoCoreServerImpl) PlatformInstall(req *rpc.PlatformInstallRequest, | ||
| 79 | 80 | } |
| 80 | 81 | platformRelease, tools, err := pme.FindPlatformReleaseDependencies(ref) |
| 81 | 82 | if err != nil { |
| 83 | +if errors.Is(err, packagemanager.ErrPlatformNotAvailableForOS) { | |
| 84 | +return &cmderrors.PlatformNotAvailableForOSError{Platform: ref.String()} | |
| 85 | + } | |
| 82 | 86 | return &cmderrors.PlatformNotFoundError{Platform: ref.String(), Cause: err} |
| 83 | 87 | } |
| 84 | 88 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -26,6 +26,8 @@ import ( | ||
| 26 | 26 | semver "go.bug.st/relaxed-semver" |
| 27 | 27 | ) |
| 28 | 28 | |
| 29 | +var ErrPlatformNotAvailableForOS = errors.New("platform is not available for your OS") | |
| 30 | + | |
| 29 | 31 | // PlatformReference represents a tuple to identify a Platform |
| 30 | 32 | type PlatformReference struct { |
| 31 | 33 | Package string // The package where this Platform belongs to. |
| @@ -89,7 +91,7 @@ func (pme *Explorer) FindPlatformReleaseDependencies(item *PlatformReference) (* | ||
| 89 | 91 | } else { |
| 90 | 92 | release = platform.GetLatestCompatibleRelease() |
| 91 | 93 | if release == nil { |
| 92 | -return nil, nil, errors.New(i18n.Tr("platform is not available for your OS")) | |
| 94 | +return nil, nil, ErrPlatformNotAvailableForOS | |
| 93 | 95 | } |
| 94 | 96 | } |
| 95 | 97 |