Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Removed librariesindex.Reference structure and related helpers
It does make things more complicated without any actual benefit.
  • Loading branch information
cmaglie committed Dec 28, 2023
commit ddf25e52f74d1b4f9077e2560e919834d17493b3
2 changes: 1 addition & 1 deletion commands/core/download.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func PlatformDownload(ctx context.Context, req *rpc.PlatformDownloadRequest, dow
}
defer release()

version, err := commands.ParseVersion(req)
version, err := commands.ParseVersion(req.GetVersion())
if err != nil {
return nil, &cmderrors.InvalidVersionError{Cause: err}
}
Expand Down
2 changes: 1 addition & 1 deletion commands/core/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest, downl
}
defer release()

version, err := commands.ParseVersion(req)
version, err := commands.ParseVersion(req.GetVersion())
if err != nil {
return &cmderrors.InvalidVersionError{Cause: err}
}
Expand Down
7 changes: 2 additions & 5 deletions commands/instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -357,11 +357,8 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
if !libDir.IsDir() {
// Download library
taskCallback(&rpc.TaskProgress{Name: tr("Downloading library %s", libraryRef)})
libRelease := li.FindRelease(&librariesindex.Reference{
Name: libraryRef.Library,
Version: libraryRef.Version,
})
if libRelease == nil {
libRelease, err := li.FindRelease(libraryRef.Library, libraryRef.Version)
if err != nil {
taskCallback(&rpc.TaskProgress{Name: tr("Library %s not found", libraryRef)})
err := &cmderrors.LibraryNotFoundError{Library: libraryRef.Library}
responseError(err.ToRPCStatus())
Expand Down
8 changes: 7 additions & 1 deletion commands/lib/download.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package lib
import (
"context"

"github.com/arduino/arduino-cli/commands"
"github.com/arduino/arduino-cli/commands/cmderrors"
"github.com/arduino/arduino-cli/commands/internal/instances"
"github.com/arduino/arduino-cli/internal/arduino/httpclient"
Expand Down Expand Up @@ -50,7 +51,12 @@ func LibraryDownload(ctx context.Context, req *rpc.LibraryDownloadRequest, downl

logrus.Info("Preparing download")

lib, err := findLibraryIndexRelease(li, req)
version, err := commands.ParseVersion(req.GetVersion())
if err != nil {
return nil, err
}

lib, err := li.FindRelease(req.GetName(), version)
if err != nil {
return nil, err
}
Expand Down
9 changes: 5 additions & 4 deletions commands/lib/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,11 @@ func LibraryInstall(ctx context.Context, req *rpc.LibraryInstallRequest, downloa
libReleasesToInstall := map[*librariesindex.Release]*librariesmanager.LibraryInstallPlan{}
installLocation := libraries.FromRPCLibraryInstallLocation(req.GetInstallLocation())
for _, lib := range toInstall {
libRelease, err := findLibraryIndexRelease(li, &rpc.LibraryInstallRequest{
Name: lib.GetName(),
Version: lib.GetVersionRequired(),
})
version, err := commands.ParseVersion(lib.GetVersionRequired())
if err != nil {
return err
}
libRelease, err := li.FindRelease(lib.GetName(), version)
if err != nil {
return err
}
Expand Down
14 changes: 8 additions & 6 deletions commands/lib/resolve_deps.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"errors"
"sort"

"github.com/arduino/arduino-cli/commands"
"github.com/arduino/arduino-cli/commands/cmderrors"
"github.com/arduino/arduino-cli/commands/internal/instances"
"github.com/arduino/arduino-cli/internal/arduino/libraries"
Expand All @@ -41,7 +42,12 @@ func LibraryResolveDependencies(ctx context.Context, req *rpc.LibraryResolveDepe
return nil, err
}

reqLibRelease, err := findLibraryIndexRelease(li, req)
version, err := commands.ParseVersion(req.GetVersion())
if err != nil {
return nil, err
}

reqLibRelease, err := li.FindRelease(req.GetName(), version)
if err != nil {
return nil, err
}
Expand All @@ -58,11 +64,7 @@ func LibraryResolveDependencies(ctx context.Context, req *rpc.LibraryResolveDepe
libs := lm.FindAllInstalled()
libs = libs.FilterByVersionAndInstallLocation(nil, libraries.User)
for _, lib := range libs {
release := li.FindRelease(&librariesindex.Reference{
Name: lib.Name,
Version: lib.Version,
})
if release != nil {
if release, err := li.FindRelease(lib.Name, lib.Version); err == nil {
overrides = append(overrides, release)
}
}
Expand Down
8 changes: 4 additions & 4 deletions commands/lib/uninstall.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package lib
import (
"context"

"github.com/arduino/arduino-cli/commands"
"github.com/arduino/arduino-cli/commands/cmderrors"
"github.com/arduino/arduino-cli/commands/internal/instances"
"github.com/arduino/arduino-cli/internal/arduino/libraries"
Expand All @@ -32,13 +33,12 @@ func LibraryUninstall(ctx context.Context, req *rpc.LibraryUninstallRequest, tas
return err
}

ref, err := createLibIndexReference(req)
version, err := commands.ParseVersion(req.GetVersion())
if err != nil {
return &cmderrors.InvalidLibraryError{Cause: err}
return err
}

libs := lm.FindByReference(ref, libraries.User)

libs := lm.FindByReference(req.GetName(), version, libraries.User)
if len(libs) == 0 {
taskCB(&rpc.TaskProgress{Message: tr("Library %s is not installed", req.GetName()), Completed: true})
return nil
Expand Down
48 changes: 0 additions & 48 deletions commands/lib/utils.go

This file was deleted.

23 changes: 12 additions & 11 deletions commands/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,20 @@
package commands

import (
"github.com/arduino/arduino-cli/commands/cmderrors"
semver "go.bug.st/relaxed-semver"
)

// Versioned is an object that provides a GetVersion() method
type Versioned interface {
GetVersion() string
}

// ParseVersion returns the version parsed from an interface that provides
// the GetVersion() method (interface Versioned)
func ParseVersion(req Versioned) (*semver.Version, error) {
if req.GetVersion() != "" {
return semver.Parse(req.GetVersion())
// ParseVersion returns the parsed version or nil if the version is
// the empty string. An error is returned if the version is not valid
// semver.
func ParseVersion(version string) (*semver.Version, error) {
if version == "" {
return nil, nil
}
res, err := semver.Parse(version)
if err != nil {
return nil, &cmderrors.InvalidVersionError{Cause: err}
}
return nil, nil
return res, nil
}
16 changes: 10 additions & 6 deletions internal/arduino/libraries/librariesindex/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package librariesindex
import (
"sort"

"github.com/arduino/arduino-cli/commands/cmderrors"
"github.com/arduino/arduino-cli/internal/arduino/libraries"
"github.com/arduino/arduino-cli/internal/arduino/resources"
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
Expand Down Expand Up @@ -112,14 +113,17 @@ func (r *Release) String() string {
// FindRelease search a library Release in the index. Returns nil if the
// release is not found. If the version is not specified returns the latest
// version available.
func (idx *Index) FindRelease(ref *Reference) *Release {
if library, exists := idx.Libraries[ref.Name]; exists {
if ref.Version == nil {
return library.Latest
func (idx *Index) FindRelease(name string, version *semver.Version) (*Release, error) {
if library, exists := idx.Libraries[name]; exists {
if version == nil {
return library.Latest, nil
}
return library.Releases[ref.Version.NormalizedString()]
return library.Releases[version.NormalizedString()], nil
}
return nil
if version == nil {
return nil, &cmderrors.LibraryNotFoundError{Library: name + "@latest"}
}
return nil, &cmderrors.LibraryNotFoundError{Library: name + "@" + version.String()}
}

// FindIndexedLibrary search an indexed library that matches the provided
Expand Down
33 changes: 16 additions & 17 deletions internal/arduino/libraries/librariesindex/index_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,27 +49,22 @@ func TestIndexer(t *testing.T) {
require.Equal(t, "", alp.Latest.Dependencies[0].GetConstraint().String())
require.Equal(t, "[1.0.0 1.1.0 1.2.0 1.2.1 1.2.2]", fmt.Sprintf("%v", alp.Versions()))

rtc100ref := &Reference{Name: "RTCZero", Version: semver.MustParse("1.0.0")}
require.Equal(t, "RTCZero@1.0.0", rtc100ref.String())
rtc100 := index.FindRelease(rtc100ref)
rtc100, err := index.FindRelease("RTCZero", semver.MustParse("1.0.0"))
require.NoError(t, err)
require.NotNil(t, rtc100)
require.Equal(t, "RTCZero@1.0.0", rtc100.String())

rtcLatestRef := &Reference{Name: "RTCZero"}
require.Equal(t, "RTCZero", rtcLatestRef.String())
rtcLatest := index.FindRelease(rtcLatestRef)
rtcLatest, err := index.FindRelease("RTCZero", nil)
require.NoError(t, err)
require.NotNil(t, rtcLatest)
require.Equal(t, "RTCZero@1.6.0", rtcLatest.String())

rtcInexistent := index.FindRelease(&Reference{
Name: "RTCZero",
Version: semver.MustParse("0.0.0-blah"),
})
rtcInexistent, err := index.FindRelease("RTCZero", semver.MustParse("0.0.0-blah"))
require.Error(t, err)
require.Nil(t, rtcInexistent)

rtcInexistent = index.FindRelease(&Reference{
Name: "RTCZero-blah",
})
rtcInexistent, err = index.FindRelease("RTCZero-blah", nil)
require.Error(t, err)
require.Nil(t, rtcInexistent)

rtc := index.FindIndexedLibrary(&libraries.Library{Name: "RTCZero"})
Expand All @@ -95,16 +90,20 @@ func TestIndexer(t *testing.T) {
require.Contains(t, resolve1, alp.Releases["1.2.1"])
require.Contains(t, resolve1, rtc.Releases["1.6.0"])

oauth010 := index.FindRelease(&Reference{Name: "Arduino_OAuth", Version: semver.MustParse("0.1.0")})
oauth010, err := index.FindRelease("Arduino_OAuth", semver.MustParse("0.1.0"))
require.NoError(t, err)
require.NotNil(t, oauth010)
require.Equal(t, "Arduino_OAuth@0.1.0", oauth010.String())
eccx135 := index.FindRelease(&Reference{Name: "ArduinoECCX08", Version: semver.MustParse("1.3.5")})
eccx135, err := index.FindRelease("ArduinoECCX08", semver.MustParse("1.3.5"))
require.NoError(t, err)
require.NotNil(t, eccx135)
require.Equal(t, "ArduinoECCX08@1.3.5", eccx135.String())
bear172 := index.FindRelease(&Reference{Name: "ArduinoBearSSL", Version: semver.MustParse("1.7.2")})
bear172, err := index.FindRelease("ArduinoBearSSL", semver.MustParse("1.7.2"))
require.NoError(t, err)
require.NotNil(t, bear172)
require.Equal(t, "ArduinoBearSSL@1.7.2", bear172.String())
http040 := index.FindRelease(&Reference{Name: "ArduinoHttpClient", Version: semver.MustParse("0.4.0")})
http040, err := index.FindRelease("ArduinoHttpClient", semver.MustParse("0.4.0"))
require.NoError(t, err)
require.NotNil(t, http040)
require.Equal(t, "ArduinoHttpClient@0.4.0", http040.String())

Expand Down
33 changes: 0 additions & 33 deletions internal/arduino/libraries/librariesindex/reference.go

This file was deleted.

3 changes: 1 addition & 2 deletions internal/arduino/libraries/librariesmanager/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import (
"github.com/arduino/arduino-cli/commands/cmderrors"
"github.com/arduino/arduino-cli/internal/arduino/globals"
"github.com/arduino/arduino-cli/internal/arduino/libraries"
"github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex"
"github.com/arduino/arduino-cli/internal/arduino/utils"
paths "github.com/arduino/go-paths-helper"
"github.com/codeclysm/extract/v3"
Expand Down Expand Up @@ -65,8 +64,8 @@ func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semve
}

lm.RescanLibraries()
libs := lm.FindByReference(&librariesindex.Reference{Name: name}, installLocation)

libs := lm.FindByReference(name, nil, installLocation)
if len(libs) > 1 {
libsDir := paths.NewPathList()
for _, lib := range libs {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ import (

"github.com/arduino/arduino-cli/internal/arduino/cores"
"github.com/arduino/arduino-cli/internal/arduino/libraries"
"github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex"
"github.com/arduino/arduino-cli/internal/i18n"
paths "github.com/arduino/go-paths-helper"
"github.com/sirupsen/logrus"
semver "go.bug.st/relaxed-semver"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
Expand Down Expand Up @@ -161,12 +161,12 @@ func (lm *LibrariesManager) loadLibrariesFromDir(librariesDir *LibrariesDir) []*
// FindByReference return the installed libraries matching the Reference
// name and version or, if the version is nil, the libraries installed
// in the installLocation.
func (lm *LibrariesManager) FindByReference(libRef *librariesindex.Reference, installLocation libraries.LibraryLocation) libraries.List {
alternatives := lm.libraries[libRef.Name]
func (lm *LibrariesManager) FindByReference(name string, version *semver.Version, installLocation libraries.LibraryLocation) libraries.List {
alternatives := lm.libraries[name]
if alternatives == nil {
return nil
}
return alternatives.FilterByVersionAndInstallLocation(libRef.Version, installLocation)
return alternatives.FilterByVersionAndInstallLocation(version, installLocation)
}

// FindAllInstalled returns all the installed libraries
Expand Down