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 {
@@ -260,7 +272,7 @@ func (pme *Explorer) FindBoardsWithVidPid(vid, pid string) []*cores.Board {
260
272
res := []* cores.Board {}
261
273
for _ , targetPackage := range pme .packages {
262
274
for _ , targetPlatform := range targetPackage .Platforms {
263
- if platform := pme .GetInstalledPlatformRelease (targetPlatform ); platform != nil {
275
+ if platform := pme .GetBestInstalledPlatformRelease (targetPlatform ); platform != nil {
264
276
for _ , board := range platform .Boards {
265
277
if board .HasUsbID (vid , pid ) {
266
278
res = append (res , board )
@@ -277,7 +289,7 @@ func (pme *Explorer) FindBoardsWithID(id string) []*cores.Board {
277
289
res := []* cores.Board {}
278
290
for _ , targetPackage := range pme .packages {
279
291
for _ , targetPlatform := range targetPackage .Platforms {
280
- if platform := pme .GetInstalledPlatformRelease (targetPlatform ); platform != nil {
292
+ if platform := pme .GetBestInstalledPlatformRelease (targetPlatform ); platform != nil {
281
293
for _ , board := range platform .Boards {
282
294
if board .BoardID == id {
283
295
res = append (res , board )
@@ -336,7 +348,7 @@ func (pme *Explorer) ResolveFQBN(fqbn *fqbn.FQBN) (
336
348
return targetPackage , nil , nil , nil , nil ,
337
349
errors .New (i18n .Tr ("unknown platform %s:%s" , targetPackage , fqbn .Architecture ))
338
350
}
339
- boardPlatformRelease := pme .GetInstalledPlatformRelease (platform )
351
+ boardPlatformRelease := pme .GetBestInstalledPlatformRelease (platform )
340
352
if boardPlatformRelease == nil {
341
353
return targetPackage , nil , nil , nil , nil ,
342
354
errors .New (i18n .Tr ("platform %s is not installed" , platform ))
@@ -467,7 +479,7 @@ func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *pr
467
479
return "" , nil , "" , nil ,
468
480
errors .New (i18n .Tr ("missing platform %[1]s:%[2]s referenced by board %[3]s" , referredPackageName , fqbn .Architecture , fqbn ))
469
481
}
470
- referredPlatformRelease = pme .GetInstalledPlatformRelease (referredPlatform )
482
+ referredPlatformRelease = pme .GetBestInstalledPlatformRelease (referredPlatform )
471
483
if referredPlatformRelease == nil {
472
484
return "" , nil , "" , nil ,
473
485
errors .New (i18n .Tr ("missing platform release %[1]s:%[2]s referenced by board %[3]s" , referredPackageName , fqbn .Architecture , fqbn ))
@@ -626,8 +638,20 @@ func (tr *ToolReleaseActions) Get() (*cores.ToolRelease, error) {
626
638
return tr .release , nil
627
639
}
628
640
629
- // GetInstalledPlatformRelease returns the PlatformRelease installed (it is chosen)
641
+ // GetInstalledPlatformRelease return the PlatformRelease installed through the package manager
642
+ // or nil if the PlatformRelease is not installed. Platforms installed manually are ignored.
630
643
func (pme * Explorer ) GetInstalledPlatformRelease (platform * cores.Platform ) * cores.PlatformRelease {
644
+ for _ , release := range platform .GetAllInstalled () {
645
+ if release .IsInstalled () && pme .IsManagedPlatformRelease (release ) {
646
+ return release
647
+ }
648
+ }
649
+ return nil
650
+ }
651
+
652
+ // GetBestInstalledPlatformRelease returns the PlatformRelease installed (it is chosen between
653
+ // the platform installed through the package manager and the one installed manually)
654
+ func (pme * Explorer ) GetBestInstalledPlatformRelease (platform * cores.Platform ) * cores.PlatformRelease {
631
655
releases := platform .GetAllInstalled ()
632
656
if len (releases ) == 0 {
633
657
return nil
0 commit comments