Skip to content

Commit 67bfb9e

Browse files
committed
Slighlt refactored libraryResolveDependencies
This change makes the function libraryResolveDependencies a bit more generic, moving the rpc-related conversion into the gRPC method. This is useful for the next commits and, as a nice bonus, has also made more straighforward the exising InstallLibrary implementation.
1 parent f41a773 commit 67bfb9e

File tree

4 files changed

+552
-535
lines changed

4 files changed

+552
-535
lines changed

commands/service_library_install.go

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -67,31 +67,36 @@ func (s *arduinoCoreServerImpl) LibraryInstall(req *rpc.LibraryInstallRequest, s
6767
return err
6868
}
6969

70-
toInstall := map[string]*rpc.LibraryDependencyStatus{}
70+
toInstall := map[string]*librariesindex.Release{}
7171
if req.GetNoDeps() {
72-
toInstall[req.GetName()] = &rpc.LibraryDependencyStatus{
73-
Name: req.GetName(),
74-
VersionRequired: req.GetVersion(),
72+
version, err := parseVersion(req.GetVersion())
73+
if err != nil {
74+
return err
75+
}
76+
libRelease, err := li.FindRelease(req.GetName(), version)
77+
if err != nil {
78+
return err
7579
}
80+
toInstall[libRelease.GetName()] = libRelease
7681
} else {
7782
// Obtain the library explorer from the instance
7883
lme, releaseLme, err := instances.GetLibraryManagerExplorer(req.GetInstance())
7984
if err != nil {
8085
return err
8186
}
8287

83-
res, err := libraryResolveDependencies(lme, li, req.GetName(), req.GetVersion(), req.GetNoOverwrite())
88+
deps, err := libraryResolveDependencies(lme, li, req.GetName(), req.GetVersion(), req.GetNoOverwrite())
8489
releaseLme()
8590
if err != nil {
8691
return err
8792
}
8893

89-
for _, dep := range res.GetDependencies() {
94+
for _, dep := range deps {
9095
if existingDep, has := toInstall[dep.GetName()]; has {
91-
if existingDep.GetVersionRequired() != dep.GetVersionRequired() {
96+
if !existingDep.GetVersion().Equal(dep.GetVersion()) {
9297
err := errors.New(
9398
i18n.Tr("two different versions of the library %[1]s are required: %[2]s and %[3]s",
94-
dep.GetName(), dep.GetVersionRequired(), existingDep.GetVersionRequired()))
99+
dep.GetName(), dep.GetVersion(), existingDep.GetVersion()))
95100
return &cmderrors.LibraryDependenciesResolutionFailedError{Cause: err}
96101
}
97102
}
@@ -118,16 +123,7 @@ func (s *arduinoCoreServerImpl) LibraryInstall(req *rpc.LibraryInstallRequest, s
118123
// Find the libReleasesToInstall to install
119124
libReleasesToInstall := map[*librariesindex.Release]*librariesmanager.LibraryInstallPlan{}
120125
installLocation := libraries.FromRPCLibraryInstallLocation(req.GetInstallLocation())
121-
for _, lib := range toInstall {
122-
version, err := parseVersion(lib.GetVersionRequired())
123-
if err != nil {
124-
return err
125-
}
126-
libRelease, err := li.FindRelease(lib.GetName(), version)
127-
if err != nil {
128-
return err
129-
}
130-
126+
for _, libRelease := range toInstall {
131127
installTask, err := lmi.InstallPrerequisiteCheck(libRelease.Library.Name, libRelease.Version, installLocation)
132128
if err != nil {
133129
return err

commands/service_library_resolve_deps.go

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,43 @@ func (s *arduinoCoreServerImpl) LibraryResolveDependencies(ctx context.Context,
4343
return nil, err
4444
}
4545

46-
return libraryResolveDependencies(lme, li, req.GetName(), req.GetVersion(), req.GetDoNotUpdateInstalledLibraries())
46+
deps, err := libraryResolveDependencies(lme, li, req.GetName(), req.GetVersion(), req.GetDoNotUpdateInstalledLibraries())
47+
if err != nil {
48+
return nil, err
49+
}
50+
51+
// Extract all installed libraries
52+
installedLibs := map[string]*libraries.Library{}
53+
for _, lib := range listLibraries(lme, li, false, false) {
54+
installedLibs[lib.Library.Name] = lib.Library
55+
}
56+
57+
res := []*rpc.LibraryDependencyStatus{}
58+
for _, dep := range deps {
59+
// ...and add information on currently installed versions of the libraries
60+
var installed *semver.Version
61+
required := dep.GetVersion()
62+
if installedLib, has := installedLibs[dep.GetName()]; has {
63+
installed = installedLib.Version
64+
if installed != nil && required != nil && installed.Equal(required) {
65+
// avoid situations like installed=0.53 and required=0.53.0
66+
required = installed
67+
}
68+
}
69+
res = append(res, &rpc.LibraryDependencyStatus{
70+
Name: dep.GetName(),
71+
VersionRequired: required.String(),
72+
VersionInstalled: installed.String(),
73+
})
74+
}
75+
sort.Slice(res, func(i, j int) bool {
76+
return res[i].GetName() < res[j].GetName()
77+
})
78+
return &rpc.LibraryResolveDependenciesResponse{Dependencies: res}, nil
4779
}
4880

4981
func libraryResolveDependencies(lme *librariesmanager.Explorer, li *librariesindex.Index,
50-
reqName, reqVersion string, noOverwrite bool) (*rpc.LibraryResolveDependenciesResponse, error) {
82+
reqName, reqVersion string, noOverwrite bool) ([]*librariesindex.Release, error) {
5183
version, err := parseVersion(reqVersion)
5284
if err != nil {
5385
return nil, err
@@ -59,12 +91,6 @@ func libraryResolveDependencies(lme *librariesmanager.Explorer, li *librariesind
5991
return nil, err
6092
}
6193

62-
// Extract all installed libraries
63-
installedLibs := map[string]*libraries.Library{}
64-
for _, lib := range listLibraries(lme, li, false, false) {
65-
installedLibs[lib.Library.Name] = lib.Library
66-
}
67-
6894
// Resolve all dependencies...
6995
var overrides []*librariesindex.Release
7096
if noOverwrite {
@@ -92,26 +118,5 @@ func libraryResolveDependencies(lme *librariesmanager.Explorer, li *librariesind
92118
return nil, &cmderrors.LibraryDependenciesResolutionFailedError{}
93119
}
94120

95-
res := []*rpc.LibraryDependencyStatus{}
96-
for _, dep := range deps {
97-
// ...and add information on currently installed versions of the libraries
98-
var installed *semver.Version
99-
required := dep.GetVersion()
100-
if installedLib, has := installedLibs[dep.GetName()]; has {
101-
installed = installedLib.Version
102-
if installed != nil && required != nil && installed.Equal(required) {
103-
// avoid situations like installed=0.53 and required=0.53.0
104-
required = installed
105-
}
106-
}
107-
res = append(res, &rpc.LibraryDependencyStatus{
108-
Name: dep.GetName(),
109-
VersionRequired: required.String(),
110-
VersionInstalled: installed.String(),
111-
})
112-
}
113-
sort.Slice(res, func(i, j int) bool {
114-
return res[i].GetName() < res[j].GetName()
115-
})
116-
return &rpc.LibraryResolveDependenciesResponse{Dependencies: res}, nil
121+
return deps, nil
117122
}

0 commit comments

Comments
 (0)