Skip to content

Commit 189737a

Browse files
committed
refactor the way core list is built
1 parent 296c872 commit 189737a

21 files changed

+143
-140
lines changed

Diff for: arduino/cores/packageindex/index.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"github.com/arduino/arduino-cli/arduino/cores"
2525
"github.com/arduino/arduino-cli/arduino/resources"
2626
"github.com/arduino/go-paths-helper"
27-
"go.bug.st/relaxed-semver"
27+
semver "go.bug.st/relaxed-semver"
2828
)
2929

3030
// Index represents Cores and Tools struct as seen from package_index.json file.
@@ -97,13 +97,13 @@ type indexHelp struct {
9797

9898
// MergeIntoPackages converts the Index data into a cores.Packages and merge them
9999
// with the existing conents of the cores.Packages passed as parameter.
100-
func (index Index) MergeIntoPackages(outPackages *cores.Packages) {
100+
func (index Index) MergeIntoPackages(outPackages cores.Packages) {
101101
for _, inPackage := range index.Packages {
102102
inPackage.extractPackageIn(outPackages)
103103
}
104104
}
105105

106-
func (inPackage indexPackage) extractPackageIn(outPackages *cores.Packages) {
106+
func (inPackage indexPackage) extractPackageIn(outPackages cores.Packages) {
107107
outPackage := outPackages.GetOrCreatePackage(inPackage.Name)
108108
outPackage.Maintainer = inPackage.Maintainer
109109
outPackage.WebsiteURL = inPackage.WebsiteURL

Diff for: arduino/cores/packagemanager/download.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323

2424
"github.com/arduino/arduino-cli/arduino/cores"
2525
"go.bug.st/downloader"
26-
"go.bug.st/relaxed-semver"
26+
semver "go.bug.st/relaxed-semver"
2727
)
2828

2929
// PlatformReference represents a tuple to identify a Platform
@@ -44,7 +44,7 @@ func (platform *PlatformReference) String() string {
4444
// FindPlatform returns the Platform matching the PlatformReference or nil if not found.
4545
// The PlatformVersion field of the reference is ignored.
4646
func (pm *PackageManager) FindPlatform(ref *PlatformReference) *cores.Platform {
47-
targetPackage, ok := pm.GetPackages().Packages[ref.Package]
47+
targetPackage, ok := pm.Packages[ref.Package]
4848
if !ok {
4949
return nil
5050
}
@@ -71,7 +71,7 @@ func (pm *PackageManager) FindPlatformRelease(ref *PlatformReference) *cores.Pla
7171
// FindPlatformReleaseDependencies takes a PlatformReference and returns a set of items to download and
7272
// a set of outputs for non existing platforms.
7373
func (pm *PackageManager) FindPlatformReleaseDependencies(item *PlatformReference) (*cores.PlatformRelease, []*cores.ToolRelease, error) {
74-
targetPackage, exists := pm.packages.Packages[item.Package]
74+
targetPackage, exists := pm.Packages[item.Package]
7575
if !exists {
7676
return nil, nil, fmt.Errorf("package %s not found", item.Package)
7777
}
@@ -94,7 +94,7 @@ func (pm *PackageManager) FindPlatformReleaseDependencies(item *PlatformReferenc
9494
}
9595

9696
// replaces "latest" with latest version too
97-
toolDeps, err := pm.packages.GetDepsOfPlatformRelease(release)
97+
toolDeps, err := pm.Packages.GetDepsOfPlatformRelease(release)
9898
if err != nil {
9999
return nil, nil, fmt.Errorf("getting tool dependencies for platform %s: %s", release.String(), err)
100100
}

Diff for: arduino/cores/packagemanager/install_uninstall.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func (pm *PackageManager) UninstallTool(toolRelease *cores.ToolRelease) error {
127127
// passed as parameter
128128
func (pm *PackageManager) IsToolRequired(toolRelease *cores.ToolRelease) bool {
129129
// Search in all installed platforms
130-
for _, targetPackage := range pm.packages.Packages {
130+
for _, targetPackage := range pm.Packages {
131131
for _, platform := range targetPackage.Platforms {
132132
if platformRelease := pm.GetInstalledPlatformRelease(platform); platformRelease != nil {
133133
if platformRelease.RequiresToolRelease(toolRelease) {

Diff for: arduino/cores/packagemanager/loader.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func (pm *PackageManager) LoadHardwareFromDirectory(path *paths.Path) error {
112112
continue
113113
}
114114

115-
targetPackage := pm.packages.GetOrCreatePackage(packager)
115+
targetPackage := pm.Packages.GetOrCreatePackage(packager)
116116
if err := pm.loadPlatforms(targetPackage, architectureParentPath); err != nil {
117117
return fmt.Errorf("loading package %s: %s", packager, err)
118118
}
@@ -419,7 +419,7 @@ func (pm *PackageManager) LoadToolsFromBundleDirectory(toolsPath *paths.Path) er
419419
}
420420

421421
for packager, toolsData := range all.FirstLevelOf() {
422-
targetPackage := pm.packages.GetOrCreatePackage(packager)
422+
targetPackage := pm.Packages.GetOrCreatePackage(packager)
423423

424424
for toolName, toolVersion := range toolsData.AsMap() {
425425
tool := targetPackage.GetOrCreateTool(toolName)
@@ -431,7 +431,7 @@ func (pm *PackageManager) LoadToolsFromBundleDirectory(toolsPath *paths.Path) er
431431
}
432432
} else {
433433
// otherwise load the tools inside the unnamed package
434-
unnamedPackage := pm.packages.GetOrCreatePackage("")
434+
unnamedPackage := pm.Packages.GetOrCreatePackage("")
435435
pm.loadToolsFromPackage(unnamedPackage, toolsPath)
436436
}
437437
return nil

Diff for: arduino/cores/packagemanager/package_manager.go

+14-25
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ import (
3838
// The manager also keeps track of the status of the Packages (their Platform Releases, actually)
3939
// installed in the system.
4040
type PackageManager struct {
41-
Log logrus.FieldLogger
42-
packages *cores.Packages
43-
41+
Log logrus.FieldLogger
42+
Packages cores.Packages
4443
IndexDir *paths.Path
4544
PackagesDir *paths.Path
4645
DownloadDir *paths.Path
@@ -51,28 +50,18 @@ type PackageManager struct {
5150
func NewPackageManager(indexDir, packagesDir, downloadDir, tempDir *paths.Path) *PackageManager {
5251
return &PackageManager{
5352
Log: logrus.StandardLogger(),
54-
packages: cores.NewPackages(),
53+
Packages: cores.NewPackages(),
5554
IndexDir: indexDir,
5655
PackagesDir: packagesDir,
5756
DownloadDir: downloadDir,
5857
TempDir: tempDir,
5958
}
6059
}
6160

62-
// Clear FIXMEDOC
63-
func (pm *PackageManager) Clear() {
64-
pm.packages = cores.NewPackages()
65-
}
66-
67-
// GetPackages FIXMEDOC
68-
func (pm *PackageManager) GetPackages() *cores.Packages {
69-
return pm.packages
70-
}
71-
7261
// FindPlatformReleaseProvidingBoardsWithVidPid FIXMEDOC
7362
func (pm *PackageManager) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid string) []*cores.PlatformRelease {
7463
res := []*cores.PlatformRelease{}
75-
for _, targetPackage := range pm.packages.Packages {
64+
for _, targetPackage := range pm.Packages {
7665
for _, targetPlatform := range targetPackage.Platforms {
7766
platformRelease := targetPlatform.GetLatestRelease()
7867
if platformRelease == nil {
@@ -92,7 +81,7 @@ func (pm *PackageManager) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid
9281
// FindBoardsWithVidPid FIXMEDOC
9382
func (pm *PackageManager) FindBoardsWithVidPid(vid, pid string) []*cores.Board {
9483
res := []*cores.Board{}
95-
for _, targetPackage := range pm.packages.Packages {
84+
for _, targetPackage := range pm.Packages {
9685
for _, targetPlatform := range targetPackage.Platforms {
9786
if platform := pm.GetInstalledPlatformRelease(targetPlatform); platform != nil {
9887
for _, board := range platform.Boards {
@@ -109,7 +98,7 @@ func (pm *PackageManager) FindBoardsWithVidPid(vid, pid string) []*cores.Board {
10998
// FindBoardsWithID FIXMEDOC
11099
func (pm *PackageManager) FindBoardsWithID(id string) []*cores.Board {
111100
res := []*cores.Board{}
112-
for _, targetPackage := range pm.packages.Packages {
101+
for _, targetPackage := range pm.Packages {
113102
for _, targetPlatform := range targetPackage.Platforms {
114103
if platform := pm.GetInstalledPlatformRelease(targetPlatform); platform != nil {
115104
for _, board := range platform.Boards {
@@ -152,7 +141,7 @@ func (pm *PackageManager) ResolveFQBN(fqbn *cores.FQBN) (
152141
*properties.Map, *cores.PlatformRelease, error) {
153142

154143
// Find package
155-
targetPackage := pm.packages.Packages[fqbn.Package]
144+
targetPackage := pm.Packages[fqbn.Package]
156145
if targetPackage == nil {
157146
return nil, nil, nil, nil, nil,
158147
errors.New("unknown package " + fqbn.Package)
@@ -189,7 +178,7 @@ func (pm *PackageManager) ResolveFQBN(fqbn *cores.FQBN) (
189178
coreParts := strings.Split(buildProperties.Get("build.core"), ":")
190179
if len(coreParts) > 1 {
191180
referredPackage := coreParts[1]
192-
buildPackage := pm.packages.Packages[referredPackage]
181+
buildPackage := pm.Packages[referredPackage]
193182
if buildPackage == nil {
194183
return targetPackage, platformRelease, board, buildProperties, nil,
195184
fmt.Errorf("missing package %s:%s required for build", referredPackage, platform)
@@ -215,7 +204,7 @@ func (pm *PackageManager) LoadPackageIndexFromFile(indexPath *paths.Path) (*pack
215204
return nil, fmt.Errorf("loading json index file %s: %s", indexPath, err)
216205
}
217206

218-
index.MergeIntoPackages(pm.packages)
207+
index.MergeIntoPackages(pm.Packages)
219208
return index, nil
220209
}
221210

@@ -224,7 +213,7 @@ func (pm *PackageManager) LoadPackageIndexFromFile(indexPath *paths.Path) (*pack
224213
func (pm *PackageManager) Package(name string) *PackageActions {
225214
//TODO: perhaps these 2 structure should be merged? cores.Packages vs pkgmgr??
226215
var err error
227-
thePackage := pm.packages.Packages[name]
216+
thePackage := pm.Packages[name]
228217
if thePackage == nil {
229218
err = fmt.Errorf("package '%s' not found", name)
230219
}
@@ -350,7 +339,7 @@ func (pm *PackageManager) GetInstalledPlatformRelease(platform *cores.Platform)
350339
// GetAllInstalledToolsReleases FIXMEDOC
351340
func (pm *PackageManager) GetAllInstalledToolsReleases() []*cores.ToolRelease {
352341
tools := []*cores.ToolRelease{}
353-
for _, targetPackage := range pm.packages.Packages {
342+
for _, targetPackage := range pm.Packages {
354343
for _, tool := range targetPackage.Tools {
355344
for _, release := range tool.Releases {
356345
if release.IsInstalled() {
@@ -366,7 +355,7 @@ func (pm *PackageManager) GetAllInstalledToolsReleases() []*cores.ToolRelease {
366355
// useful to range all PlatformReleases in for loops.
367356
func (pm *PackageManager) InstalledPlatformReleases() []*cores.PlatformRelease {
368357
platforms := []*cores.PlatformRelease{}
369-
for _, targetPackage := range pm.packages.Packages {
358+
for _, targetPackage := range pm.Packages {
370359
for _, platform := range targetPackage.Platforms {
371360
for _, release := range platform.GetAllInstalled() {
372361
platforms = append(platforms, release)
@@ -380,7 +369,7 @@ func (pm *PackageManager) InstalledPlatformReleases() []*cores.PlatformRelease {
380369
// all Boards in for loops.
381370
func (pm *PackageManager) InstalledBoards() []*cores.Board {
382371
boards := []*cores.Board{}
383-
for _, targetPackage := range pm.packages.Packages {
372+
for _, targetPackage := range pm.Packages {
384373
for _, platform := range targetPackage.Platforms {
385374
for _, release := range platform.GetAllInstalled() {
386375
for _, board := range release.Boards {
@@ -404,7 +393,7 @@ func (pm *PackageManager) FindToolsRequiredForBoard(board *cores.Board) ([]*core
404393

405394
// a Platform may not specify required tools (because it's a platform that comes from a
406395
// sketchbook/hardware dir without a package_index.json) then add all available tools
407-
for _, targetPackage := range pm.packages.Packages {
396+
for _, targetPackage := range pm.Packages {
408397
for _, tool := range targetPackage.Tools {
409398
rel := tool.GetLatestInstalled()
410399
if rel != nil {

Diff for: arduino/cores/status.go

+35-39
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,11 @@ import (
2525
)
2626

2727
// Packages represents a set of Packages
28-
type Packages struct {
29-
Packages map[string]*Package // Maps packager name to Package
30-
}
28+
type Packages map[string]*Package // Maps packager name to Package
3129

3230
// NewPackages creates a new Packages object
33-
func NewPackages() *Packages {
34-
return &Packages{
35-
Packages: map[string]*Package{},
36-
}
31+
func NewPackages() Packages {
32+
return map[string]*Package{}
3733
}
3834

3935
// Package represents a package in the system.
@@ -44,13 +40,13 @@ type Package struct {
4440
Email string // Email of maintainer.
4541
Platforms map[string]*Platform // The platforms in the system.
4642
Tools map[string]*Tool // The tools in the system.
47-
Packages *Packages `json:"-"`
43+
Packages Packages `json:"-"`
4844
}
4945

5046
// GetOrCreatePackage returns the specified Package or create an empty one
5147
// filling all the cross-references
52-
func (packages *Packages) GetOrCreatePackage(packager string) *Package {
53-
if targetPackage, ok := packages.Packages[packager]; ok {
48+
func (packages Packages) GetOrCreatePackage(packager string) *Package {
49+
if targetPackage, ok := packages[packager]; ok {
5450
return targetPackage
5551
}
5652
targetPackage := &Package{
@@ -59,22 +55,46 @@ func (packages *Packages) GetOrCreatePackage(packager string) *Package {
5955
Tools: map[string]*Tool{},
6056
Packages: packages,
6157
}
62-
packages.Packages[packager] = targetPackage
58+
packages[packager] = targetPackage
6359
return targetPackage
6460
}
6561

6662
// Names returns the array containing the name of the packages.
67-
func (packages *Packages) Names() []string {
68-
res := make([]string, len(packages.Packages))
63+
func (packages Packages) Names() []string {
64+
res := make([]string, len(packages))
6965
i := 0
70-
for n := range packages.Packages {
66+
for n := range packages {
7167
res[i] = n
7268
i++
7369
}
7470
sortutil.CiAsc(res)
7571
return res
7672
}
7773

74+
// GetDepsOfPlatformRelease returns the deps of a specified release of a core.
75+
func (packages Packages) GetDepsOfPlatformRelease(release *PlatformRelease) ([]*ToolRelease, error) {
76+
if release == nil {
77+
return nil, errors.New("release cannot be nil")
78+
}
79+
ret := []*ToolRelease{}
80+
for _, dep := range release.Dependencies {
81+
pkg, exists := packages[dep.ToolPackager]
82+
if !exists {
83+
return nil, fmt.Errorf("package %s not found", dep.ToolPackager)
84+
}
85+
tool, exists := pkg.Tools[dep.ToolName]
86+
if !exists {
87+
return nil, fmt.Errorf("tool %s not found", dep.ToolName)
88+
}
89+
toolRelease, exists := tool.Releases[dep.ToolVersion.String()]
90+
if !exists {
91+
return nil, fmt.Errorf("tool version %s not found", dep.ToolVersion)
92+
}
93+
ret = append(ret, toolRelease)
94+
}
95+
return ret, nil
96+
}
97+
7898
// GetOrCreatePlatform returns the Platform object with the specified architecture
7999
// or creates a new one if not found
80100
func (targetPackage *Package) GetOrCreatePlatform(architecure string) *Platform {
@@ -110,7 +130,7 @@ func (targetPackage *Package) String() string {
110130
}
111131

112132
func (tdep ToolDependency) extractTool(sc Packages) (*Tool, error) {
113-
pkg, exists := sc.Packages[tdep.ToolPackager]
133+
pkg, exists := sc[tdep.ToolPackager]
114134
if !exists {
115135
return nil, errors.New("package not found")
116136
}
@@ -132,27 +152,3 @@ func (tdep ToolDependency) extractRelease(sc Packages) (*ToolRelease, error) {
132152
}
133153
return release, nil
134154
}
135-
136-
// GetDepsOfPlatformRelease returns the deps of a specified release of a core.
137-
func (packages *Packages) GetDepsOfPlatformRelease(release *PlatformRelease) ([]*ToolRelease, error) {
138-
if release == nil {
139-
return nil, errors.New("release cannot be nil")
140-
}
141-
ret := []*ToolRelease{}
142-
for _, dep := range release.Dependencies {
143-
pkg, exists := packages.Packages[dep.ToolPackager]
144-
if !exists {
145-
return nil, fmt.Errorf("package %s not found", dep.ToolPackager)
146-
}
147-
tool, exists := pkg.Tools[dep.ToolName]
148-
if !exists {
149-
return nil, fmt.Errorf("tool %s not found", dep.ToolName)
150-
}
151-
toolRelease, exists := tool.Releases[dep.ToolVersion.String()]
152-
if !exists {
153-
return nil, fmt.Errorf("tool version %s not found", dep.ToolVersion)
154-
}
155-
ret = append(ret, toolRelease)
156-
}
157-
return ret, nil
158-
}

0 commit comments

Comments
 (0)