@@ -19,6 +19,7 @@ import (
19
19
"encoding/json"
20
20
"errors"
21
21
"fmt"
22
+ "slices"
22
23
23
24
"github.com/arduino/arduino-cli/internal/arduino/cores"
24
25
"github.com/arduino/arduino-cli/internal/arduino/resources"
@@ -348,15 +349,18 @@ func (inToolRelease indexToolRelease) extractToolIn(outPackage *cores.Package) {
348
349
outTool := outPackage .GetOrCreateTool (inToolRelease .Name )
349
350
350
351
outToolRelease := outTool .GetOrCreateRelease (inToolRelease .Version )
351
- outToolRelease .Flavors = inToolRelease .extractFlavours ( )
352
+ outToolRelease .Flavors = inToolRelease .extractAndMergeFlavours ( outToolRelease . Flavors )
352
353
}
353
354
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
+ }
358
362
size , _ := flavour .Size .Int64 ()
359
- ret [ i ] = & cores.Flavor {
363
+ in = append ( in , & cores.Flavor {
360
364
OS : flavour .OS ,
361
365
Resource : & resources.DownloadResource {
362
366
ArchiveFileName : flavour .ArchiveFileName ,
@@ -365,9 +369,9 @@ func (inToolRelease indexToolRelease) extractFlavours() []*cores.Flavor {
365
369
URL : flavour .URL ,
366
370
CachePath : "packages" ,
367
371
},
368
- }
372
+ })
369
373
}
370
- return ret
374
+ return in
371
375
}
372
376
373
377
// LoadIndex reads a package_index.json from a file and returns the corresponding Index structure.
0 commit comments