Skip to content

Commit b79f991

Browse files
committed
draft
1 parent ac7d678 commit b79f991

File tree

16 files changed

+230
-163
lines changed

16 files changed

+230
-163
lines changed

commands/instances.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ func (s *arduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCor
320320
// Load libraries
321321
for _, pack := range pme.GetPackages() {
322322
for _, platform := range pack.Platforms {
323-
if platformRelease := pme.GetInstalledPlatformRelease(platform); platformRelease != nil {
323+
if platformRelease := pme.GetBestInstalledPlatformRelease(platform); platformRelease != nil {
324324
lmb.AddLibrariesDir(librariesmanager.LibrariesDir{
325325
PlatformRelease: platformRelease,
326326
Path: platformRelease.GetLibrariesDir(),

commands/service_board_listall.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func (s *arduinoCoreServerImpl) BoardListAll(ctx context.Context, req *rpc.Board
3939
list := &rpc.BoardListAllResponse{Boards: []*rpc.BoardListItem{}}
4040
for _, targetPackage := range toSortedPackageArray(pme.GetPackages()) {
4141
for _, platform := range toSortedPlatformArray(targetPackage.Platforms) {
42-
installedPlatformRelease := pme.GetInstalledPlatformRelease(platform)
42+
installedPlatformRelease := pme.GetBestInstalledPlatformRelease(platform)
4343
// We only want to list boards for installed platforms
4444
if installedPlatformRelease == nil {
4545
continue

commands/service_board_search.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func (s *arduinoCoreServerImpl) BoardSearch(ctx context.Context, req *rpc.BoardS
4040
for _, targetPackage := range pme.GetPackages() {
4141
for _, platform := range targetPackage.Platforms {
4242
latestPlatformRelease := platform.GetLatestCompatibleRelease()
43-
installedPlatformRelease := pme.GetInstalledPlatformRelease(platform)
43+
installedPlatformRelease := pme.GetBestInstalledPlatformRelease(platform)
4444

4545
if latestPlatformRelease == nil && installedPlatformRelease == nil {
4646
continue

commands/service_platform_install.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,20 @@ func (s *arduinoCoreServerImpl) PlatformInstall(req *rpc.PlatformInstallRequest,
7777
PlatformArchitecture: req.GetArchitecture(),
7878
PlatformVersion: version,
7979
}
80+
fmt.Println(ref)
8081
platformRelease, tools, err := pme.FindPlatformReleaseDependencies(ref)
8182
if err != nil {
8283
return &cmderrors.PlatformNotFoundError{Platform: ref.String(), Cause: err}
8384
}
8485

8586
// Prerequisite checks before install
87+
fmt.Println("A")
8688
if platformRelease.IsInstalled() {
8789
taskCB(&rpc.TaskProgress{Name: i18n.Tr("Platform %s already installed", platformRelease), Completed: true})
8890
return nil
8991
}
9092

93+
fmt.Println("B")
9194
if req.GetNoOverwrite() {
9295
if installed := pme.GetInstalledPlatformRelease(platformRelease.Platform); installed != nil {
9396
return fmt.Errorf("%s: %s",

commands/service_platform_search.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func (s *arduinoCoreServerImpl) PlatformSearch(_ context.Context, req *rpc.Platf
4141
res = pme.FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid)
4242
} else {
4343
searchArgs := utils.SearchTermsFromQueryString(req.GetSearchArgs())
44-
for _, targetPackage := range pme.GetPackages() {
44+
for _, targetPackage := range pme.AllPackages() {
4545
for _, platform := range targetPackage.Platforms {
4646
if platform == nil {
4747
continue
@@ -91,6 +91,9 @@ func (s *arduinoCoreServerImpl) PlatformSearch(_ context.Context, req *rpc.Platf
9191
if latestCompatible := platform.GetLatestCompatibleRelease(); latestCompatible != nil {
9292
rpcPlatformSummary.LatestVersion = latestCompatible.Version.String()
9393
}
94+
if _, has := platform.GetManuallyInstalledRelease(); has {
95+
rpcPlatformSummary.HasManuallyInstalledRelease = true
96+
}
9497
for _, platformRelease := range platform.GetAllReleases() {
9598
rpcPlatformRelease := platformReleaseToRPC(platformRelease)
9699
rpcPlatformSummary.Releases[rpcPlatformRelease.GetVersion()] = rpcPlatformRelease

commands/service_platform_uninstall.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func platformUninstall(_ context.Context, req *rpc.PlatformUninstallRequest, tas
7777
if platform == nil {
7878
return &cmderrors.PlatformNotFoundError{Platform: ref.String()}
7979
}
80-
platformRelease := pme.GetInstalledPlatformRelease(platform)
80+
platformRelease := pme.GetBestInstalledPlatformRelease(platform)
8181
if platformRelease == nil {
8282
return &cmderrors.PlatformNotFoundError{Platform: ref.String()}
8383
}

commands/service_upload.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ func (s *arduinoCoreServerImpl) runProgramAction(ctx context.Context, pme *packa
362362
return nil, &cmderrors.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture}
363363
}
364364
uploadToolID = split[1]
365-
uploadToolPlatform = pme.GetInstalledPlatformRelease(p)
365+
uploadToolPlatform = pme.GetBestInstalledPlatformRelease(p)
366366
if uploadToolPlatform == nil {
367367
return nil, &cmderrors.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture}
368368
}

internal/arduino/cores/cores.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ type Platform struct {
4040
Architecture string // The name of the architecture of this package.
4141
Releases map[semver.NormalizedString]*PlatformRelease // The Releases of this platform, labeled by version.
4242
Package *Package `json:"-"`
43-
ManuallyInstalled bool // true if the Platform has been installed without the CLI
43+
ManuallyInstalled bool // true if the Platform exists due to a manually installed release
4444
Deprecated bool // true if the latest PlatformRelease of this Platform has been deprecated
4545
Indexed bool // true if the Platform has been indexed from additional-urls
4646
Latest *semver.Version `json:"-"`
@@ -238,10 +238,10 @@ func (d *MonitorDependency) String() string {
238238
// GetOrCreateRelease returns the specified release corresponding the provided version,
239239
// or creates a new one if not found.
240240
func (platform *Platform) GetOrCreateRelease(version *semver.Version) *PlatformRelease {
241-
var tag semver.NormalizedString
242-
if version != nil {
243-
tag = version.NormalizedString()
241+
if version == nil {
242+
version = semver.MustParse("")
244243
}
244+
tag := version.NormalizedString()
245245
if release, ok := platform.Releases[tag]; ok {
246246
return release
247247
}
@@ -257,6 +257,13 @@ func (platform *Platform) GetOrCreateRelease(version *semver.Version) *PlatformR
257257
return release
258258
}
259259

260+
// GetManuallyInstalledRelease returns (*PlatformRelease, true) if the Platform has
261+
// a manually installed release or (nil, false) otherwise.
262+
func (platform *Platform) GetManuallyInstalledRelease() (*PlatformRelease, bool) {
263+
res, ok := platform.Releases[semver.MustParse("").NormalizedString()]
264+
return res, ok
265+
}
266+
260267
// FindReleaseWithVersion returns the specified release corresponding the provided version,
261268
// or nil if not found.
262269
func (platform *Platform) FindReleaseWithVersion(version *semver.Version) *PlatformRelease {

internal/arduino/cores/packageindex/index.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,10 @@ func (inPlatformRelease indexPlatformRelease) extractPlatformIn(outPackage *core
263263
outPlatform := outPackage.GetOrCreatePlatform(inPlatformRelease.Architecture)
264264
// If the variable `isInstallJSON` is false it means that the index we're reading is coming from the additional-urls.
265265
// Therefore, the `outPlatform.Indexed` will be set at `true`.
266-
outPlatform.Indexed = outPlatform.Indexed || !isInstallJSON
266+
if !isInstallJSON {
267+
outPlatform.Indexed = true
268+
outPlatform.ManuallyInstalled = false
269+
}
267270

268271
// If the latest platform release is deprecated, then deprecate the whole platform.
269272
if outPlatform.Latest == nil || outPlatform.Latest.LessThan(inPlatformRelease.Version) {

internal/arduino/cores/packagemanager/install_uninstall.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"encoding/json"
2222
"errors"
23+
"fmt"
2324
"runtime"
2425

2526
"github.com/arduino/arduino-cli/commands/cmderrors"
@@ -43,6 +44,7 @@ func (pme *Explorer) DownloadAndInstallPlatformUpgrades(
4344
skipPreUninstall bool,
4445
checks resources.IntegrityCheckMode,
4546
) (*cores.PlatformRelease, error) {
47+
fmt.Println("D")
4648
if platformRef.PlatformVersion != nil {
4749
return nil, &cmderrors.InvalidArgumentError{Message: i18n.Tr("Upgrade doesn't accept parameters with version")}
4850
}
@@ -441,7 +443,7 @@ func (pme *Explorer) IsToolRequired(toolRelease *cores.ToolRelease) bool {
441443
// Search in all installed platforms
442444
for _, targetPackage := range pme.packages {
443445
for _, platform := range targetPackage.Platforms {
444-
if platformRelease := pme.GetInstalledPlatformRelease(platform); platformRelease != nil {
446+
if platformRelease := pme.GetBestInstalledPlatformRelease(platform); platformRelease != nil {
445447
if platformRelease.RequiresToolRelease(toolRelease) {
446448
return true
447449
}

0 commit comments

Comments
 (0)