Skip to content

Commit 721ab25

Browse files
authored
Merge pull request #291 from arduino/massi/core-upgrade
Fix core upgrade
2 parents d876ac9 + eed6d58 commit 721ab25

27 files changed

+268
-211
lines changed

Diff for: Taskfile.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ tasks:
3030
test-legacy:
3131
desc: Run tests for the `legacy` package
3232
cmds:
33-
- go test {{ default "-v" .GOFLAGS }} ./legacy/...
33+
- go test {{ default "-v -failfast" .GOFLAGS }} ./legacy/...
3434

3535
test-unit-race:
3636
desc: Run unit tests only with race condition detection

Diff for: arduino/cores/cores.go

+30-8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package cores
1919

2020
import (
21+
"encoding/json"
2122
"strings"
2223

2324
paths "github.com/arduino/go-paths-helper"
@@ -41,14 +42,13 @@ type PlatformRelease struct {
4142
Resource *resources.DownloadResource
4243
Version *semver.Version
4344
BoardsManifest []*BoardManifest
44-
Dependencies ToolDependencies // The Dependency entries to load tools.
45-
Platform *Platform `json:"-"`
46-
47-
Properties *properties.Map `json:"-"`
48-
Boards map[string]*Board `json:"-"`
49-
Programmers map[string]*properties.Map `json:"-"`
50-
Menus *properties.Map `json:"-"`
51-
InstallDir *paths.Path `json:"-"`
45+
Dependencies ToolDependencies // The Dependency entries to load tools.
46+
Platform *Platform `json:"-"`
47+
Properties *properties.Map `json:"-"`
48+
Boards map[string]*Board `json:"-"`
49+
Programmers map[string]*properties.Map `json:"-"`
50+
Menus *properties.Map `json:"-"`
51+
InstallDir *paths.Path `json:"-"`
5252
}
5353

5454
// BoardManifest contains information about a board. These metadata are usually
@@ -226,3 +226,25 @@ func (release *PlatformRelease) String() string {
226226
}
227227
return release.Platform.String() + "@" + version
228228
}
229+
230+
// MarshalJSON provides a more user friendly serialization for
231+
// PlatformRelease objects.
232+
func (release *PlatformRelease) MarshalJSON() ([]byte, error) {
233+
latestStr := ""
234+
latest := release.Platform.GetLatestRelease()
235+
if latest != nil {
236+
latestStr = latest.Version.String()
237+
}
238+
239+
return json.Marshal(&struct {
240+
ID string `json:"ID,omitempty"`
241+
Installed string `json:"Installed,omitempty"`
242+
Latest string `json:"Latest,omitempty"`
243+
Name string `json:"Name,omitempty"`
244+
}{
245+
ID: release.Platform.String(),
246+
Installed: release.Version.String(),
247+
Latest: latestStr,
248+
Name: release.Platform.Name,
249+
})
250+
}

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 {

0 commit comments

Comments
 (0)