Skip to content

Commit 58936ea

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 81fa91b commit 58936ea

File tree

4 files changed

+549
-535
lines changed

4 files changed

+549
-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: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,40 @@ 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+
48+
// Extract all installed libraries
49+
installedLibs := map[string]*libraries.Library{}
50+
for _, lib := range listLibraries(lme, li, false, false) {
51+
installedLibs[lib.Library.Name] = lib.Library
52+
}
53+
54+
res := []*rpc.LibraryDependencyStatus{}
55+
for _, dep := range deps {
56+
// ...and add information on currently installed versions of the libraries
57+
var installed *semver.Version
58+
required := dep.GetVersion()
59+
if installedLib, has := installedLibs[dep.GetName()]; has {
60+
installed = installedLib.Version
61+
if installed != nil && required != nil && installed.Equal(required) {
62+
// avoid situations like installed=0.53 and required=0.53.0
63+
required = installed
64+
}
65+
}
66+
res = append(res, &rpc.LibraryDependencyStatus{
67+
Name: dep.GetName(),
68+
VersionRequired: required.String(),
69+
VersionInstalled: installed.String(),
70+
})
71+
}
72+
sort.Slice(res, func(i, j int) bool {
73+
return res[i].GetName() < res[j].GetName()
74+
})
75+
return &rpc.LibraryResolveDependenciesResponse{Dependencies: res}, nil
4776
}
4877

4978
func libraryResolveDependencies(lme *librariesmanager.Explorer, li *librariesindex.Index,
50-
reqName, reqVersion string, noOverwrite bool) (*rpc.LibraryResolveDependenciesResponse, error) {
79+
reqName, reqVersion string, noOverwrite bool) ([]*librariesindex.Release, error) {
5180
version, err := parseVersion(reqVersion)
5281
if err != nil {
5382
return nil, err
@@ -59,12 +88,6 @@ func libraryResolveDependencies(lme *librariesmanager.Explorer, li *librariesind
5988
return nil, err
6089
}
6190

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-
6891
// Resolve all dependencies...
6992
var overrides []*librariesindex.Release
7093
if noOverwrite {
@@ -92,26 +115,5 @@ func libraryResolveDependencies(lme *librariesmanager.Explorer, li *librariesind
92115
return nil, &cmderrors.LibraryDependenciesResolutionFailedError{}
93116
}
94117

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
118+
return deps, nil
117119
}

0 commit comments

Comments
 (0)