Skip to content

Commit d350fdc

Browse files
committed
Improved index merger for tool release flavors
1 parent 24e152a commit d350fdc

File tree

1 file changed

+12
-8
lines changed
  • internal/arduino/cores/packageindex

1 file changed

+12
-8
lines changed

internal/arduino/cores/packageindex/index.go

+12-8
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"encoding/json"
2020
"errors"
2121
"fmt"
22+
"slices"
2223

2324
"github.com/arduino/arduino-cli/internal/arduino/cores"
2425
"github.com/arduino/arduino-cli/internal/arduino/resources"
@@ -348,15 +349,18 @@ func (inToolRelease indexToolRelease) extractToolIn(outPackage *cores.Package) {
348349
outTool := outPackage.GetOrCreateTool(inToolRelease.Name)
349350

350351
outToolRelease := outTool.GetOrCreateRelease(inToolRelease.Version)
351-
outToolRelease.Flavors = inToolRelease.extractFlavours()
352+
outToolRelease.Flavors = inToolRelease.extractAndMergeFlavours(outToolRelease.Flavors)
352353
}
353354

354-
// extractFlavours extracts a map[OS]Flavor object from an indexToolRelease entry.
355-
func (inToolRelease indexToolRelease) extractFlavours() []*cores.Flavor {
356-
ret := make([]*cores.Flavor, len(inToolRelease.Systems))
357-
for i, flavour := range inToolRelease.Systems {
355+
// extractAndMergeFlavours extracts flavors objects from an indexToolRelease
356+
// and adds them to the given flavors array if missing. It returns the updated array.
357+
func (inToolRelease indexToolRelease) extractAndMergeFlavours(in []*cores.Flavor) []*cores.Flavor {
358+
for _, flavour := range inToolRelease.Systems {
359+
if slices.ContainsFunc(in, func(f *cores.Flavor) bool { return f.OS == flavour.OS }) {
360+
continue
361+
}
358362
size, _ := flavour.Size.Int64()
359-
ret[i] = &cores.Flavor{
363+
in = append(in, &cores.Flavor{
360364
OS: flavour.OS,
361365
Resource: &resources.DownloadResource{
362366
ArchiveFileName: flavour.ArchiveFileName,
@@ -365,9 +369,9 @@ func (inToolRelease indexToolRelease) extractFlavours() []*cores.Flavor {
365369
URL: flavour.URL,
366370
CachePath: "packages",
367371
},
368-
}
372+
})
369373
}
370-
return ret
374+
return in
371375
}
372376

373377
// LoadIndex reads a package_index.json from a file and returns the corresponding Index structure.

0 commit comments

Comments
 (0)