|
16 | 16 | package packagemanager
|
17 | 17 |
|
18 | 18 | import (
|
| 19 | + "cmp" |
19 | 20 | "errors"
|
20 | 21 | "net/url"
|
21 | 22 | "os"
|
@@ -229,6 +230,17 @@ func (pme *Explorer) GetPackages() cores.Packages {
|
229 | 230 | return pme.packages
|
230 | 231 | }
|
231 | 232 |
|
| 233 | +func (pme *Explorer) AllPackages() []*cores.Package { |
| 234 | + packages := make([]*cores.Package, 0, len(pme.packages)) |
| 235 | + for _, p := range pme.packages { |
| 236 | + packages = append(packages, p) |
| 237 | + } |
| 238 | + slices.SortFunc(packages, func(i, j *cores.Package) int { |
| 239 | + return cmp.Compare(i.String(), j.String()) |
| 240 | + }) |
| 241 | + return packages |
| 242 | +} |
| 243 | + |
232 | 244 | // GetCustomGlobalProperties returns the user defined custom global
|
233 | 245 | // properties for installed platforms.
|
234 | 246 | func (pme *Explorer) GetCustomGlobalProperties() *properties.Map {
|
@@ -302,7 +314,7 @@ func (pme *Explorer) ResolveFQBN(fqbn *fqbn.FQBN) (
|
302 | 314 | return targetPackage, nil, nil, nil, nil,
|
303 | 315 | errors.New(i18n.Tr("unknown platform %s:%s", targetPackage, fqbn.Architecture))
|
304 | 316 | }
|
305 |
| - boardPlatformRelease := pme.GetInstalledPlatformRelease(platform) |
| 317 | + boardPlatformRelease := pme.GetBestInstalledPlatformRelease(platform) |
306 | 318 | if boardPlatformRelease == nil {
|
307 | 319 | return targetPackage, nil, nil, nil, nil,
|
308 | 320 | errors.New(i18n.Tr("platform %s is not installed", platform))
|
@@ -433,7 +445,7 @@ func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *pr
|
433 | 445 | return "", nil, "", nil,
|
434 | 446 | errors.New(i18n.Tr("missing platform %[1]s:%[2]s referenced by board %[3]s", referredPackageName, fqbn.Architecture, fqbn))
|
435 | 447 | }
|
436 |
| - referredPlatformRelease = pme.GetInstalledPlatformRelease(referredPlatform) |
| 448 | + referredPlatformRelease = pme.GetBestInstalledPlatformRelease(referredPlatform) |
437 | 449 | if referredPlatformRelease == nil {
|
438 | 450 | return "", nil, "", nil,
|
439 | 451 | errors.New(i18n.Tr("missing platform release %[1]s:%[2]s referenced by board %[3]s", referredPackageName, fqbn.Architecture, fqbn))
|
@@ -592,8 +604,20 @@ func (tr *ToolReleaseActions) Get() (*cores.ToolRelease, error) {
|
592 | 604 | return tr.release, nil
|
593 | 605 | }
|
594 | 606 |
|
595 |
| -// GetInstalledPlatformRelease returns the PlatformRelease installed (it is chosen) |
| 607 | +// GetInstalledPlatformRelease return the PlatformRelease installed through the package manager |
| 608 | +// or nil if the PlatformRelease is not installed. Platforms installed manually are ignored. |
596 | 609 | func (pme *Explorer) GetInstalledPlatformRelease(platform *cores.Platform) *cores.PlatformRelease {
|
| 610 | + for _, release := range platform.GetAllInstalled() { |
| 611 | + if release.IsInstalled() && pme.IsManagedPlatformRelease(release) { |
| 612 | + return release |
| 613 | + } |
| 614 | + } |
| 615 | + return nil |
| 616 | +} |
| 617 | + |
| 618 | +// GetBestInstalledPlatformRelease returns the PlatformRelease installed (it is chosen between |
| 619 | +// the platform installed through the package manager and the one installed manually) |
| 620 | +func (pme *Explorer) GetBestInstalledPlatformRelease(platform *cores.Platform) *cores.PlatformRelease { |
597 | 621 | releases := platform.GetAllInstalled()
|
598 | 622 | if len(releases) == 0 {
|
599 | 623 | return nil
|
|
0 commit comments