@@ -19,10 +19,8 @@ package packagemanager
1919
2020import (
2121 "fmt"
22- "os"
2322
2423 "github.com/arduino/arduino-cli/arduino/cores"
25- "github.com/arduino/arduino-cli/common/formatter/output"
2624 "github.com/cavaliercoder/grab"
2725 "go.bug.st/relaxed-semver"
2826)
@@ -65,58 +63,37 @@ func (pm *PackageManager) FindPlatformRelease(ref *PlatformReference) *cores.Pla
6563 return platformRelease
6664}
6765
68- // FindItemsToDownload takes a set of PlatformReference and returns a set of items to download and
66+ // FindPlatformReleaseDependencies takes a PlatformReference and returns a set of items to download and
6967// a set of outputs for non existing platforms.
70- func (pm * PackageManager ) FindItemsToDownload (items []PlatformReference ) (
71- []* cores.PlatformRelease , []* cores.ToolRelease , error ) {
72-
73- retPlatforms := []* cores.PlatformRelease {}
74- retTools := []* cores.ToolRelease {}
75- added := map [string ]bool {}
76-
77- for _ , item := range items {
78- targetPackage , exists := pm .packages .Packages [item .Package ]
79- if ! exists {
80- return nil , nil , fmt .Errorf ("package %s not found" , item .Package )
81- }
82- platform , exists := targetPackage .Platforms [item .PlatformArchitecture ]
83- if ! exists {
84- return nil , nil , fmt .Errorf ("platform %s not found in package %s" , item .PlatformArchitecture , targetPackage .String ())
85- }
68+ func (pm * PackageManager ) FindPlatformReleaseDependencies (item * PlatformReference ) (* cores.PlatformRelease , []* cores.ToolRelease , error ) {
69+ targetPackage , exists := pm .packages .Packages [item .Package ]
70+ if ! exists {
71+ return nil , nil , fmt .Errorf ("package %s not found" , item .Package )
72+ }
73+ platform , exists := targetPackage .Platforms [item .PlatformArchitecture ]
74+ if ! exists {
75+ return nil , nil , fmt .Errorf ("platform %s not found in package %s" , item .PlatformArchitecture , targetPackage .String ())
76+ }
8677
87- if added [platform .String ()] {
88- continue
78+ var release * cores.PlatformRelease
79+ if item .PlatformVersion != nil {
80+ release = platform .GetRelease (item .PlatformVersion )
81+ if release == nil {
82+ return nil , nil , fmt .Errorf ("required version %s not found for platform %s" , item .PlatformVersion , platform .String ())
8983 }
90- added [platform .String ()] = true
91-
92- var release * cores.PlatformRelease
93- if item .PlatformVersion != nil {
94- release = platform .GetRelease (item .PlatformVersion )
95- if release == nil {
96- return nil , nil , fmt .Errorf ("required version %s not found for platform %s" , item .PlatformVersion , platform .String ())
97- }
98- } else {
99- release = platform .GetLatestRelease ()
100- if release == nil {
101- return nil , nil , fmt .Errorf ("platform %s has no available releases" , platform .String ())
102- }
84+ } else {
85+ release = platform .GetLatestRelease ()
86+ if release == nil {
87+ return nil , nil , fmt .Errorf ("platform %s has no available releases" , platform .String ())
10388 }
104- retPlatforms = append ( retPlatforms , release )
89+ }
10590
106- // replaces "latest" with latest version too
107- toolDeps , err := pm .packages .GetDepsOfPlatformRelease (release )
108- if err != nil {
109- return nil , nil , fmt .Errorf ("getting tool dependencies for platform %s: %s" , release .String (), err )
110- }
111- for _ , tool := range toolDeps {
112- if added [tool .String ()] {
113- continue
114- }
115- added [tool .String ()] = true
116- retTools = append (retTools , tool )
117- }
91+ // replaces "latest" with latest version too
92+ toolDeps , err := pm .packages .GetDepsOfPlatformRelease (release )
93+ if err != nil {
94+ return nil , nil , fmt .Errorf ("getting tool dependencies for platform %s: %s" , release .String (), err )
11895 }
119- return retPlatforms , retTools , nil
96+ return release , toolDeps , nil
12097}
12198
12299// DownloadToolRelease downloads a ToolRelease. If the tool is already downloaded a nil Response
@@ -134,79 +111,3 @@ func (pm *PackageManager) DownloadToolRelease(tool *cores.ToolRelease) (*grab.Re
134111func (pm * PackageManager ) DownloadPlatformRelease (platform * cores.PlatformRelease ) (* grab.Response , error ) {
135112 return platform .Resource .Download (pm .DownloadDir )
136113}
137-
138- // FIXME: Make more generic and decouple the error print logic (that list should not exists;
139- // rather a failure @ the first package)
140-
141- func (pm * PackageManager ) InstallToolReleases (toolReleases []* cores.ToolRelease ,
142- result * output.CoreProcessResults ) error {
143-
144- for _ , toolRelease := range toolReleases {
145- pm .Log .WithField ("Package" , toolRelease .Tool .Package .Name ).
146- WithField ("Name" , toolRelease .Tool .Name ).
147- WithField ("Version" , toolRelease .Version ).
148- Info ("Installing tool" )
149-
150- err := pm .InstallTool (toolRelease )
151- var processResult output.ProcessResult
152- if err != nil {
153- if os .IsExist (err ) {
154- pm .Log .WithError (err ).Warnf ("Cannot install tool `%s`, it is already installed" , toolRelease .Tool .Name )
155- processResult = output.ProcessResult {
156- Status : "Already Installed" ,
157- }
158- } else {
159- pm .Log .WithError (err ).Warnf ("Cannot install tool `%s`" , toolRelease .Tool .Name )
160- processResult = output.ProcessResult {
161- Error : err .Error (),
162- }
163- }
164- } else {
165- pm .Log .Info ("Adding installed tool to final result" )
166- processResult = output.ProcessResult {
167- Status : "Installed" ,
168- }
169- }
170- name := toolRelease .String ()
171- processResult .ItemName = name
172- result .Tools [name ] = processResult
173- }
174- return nil
175- }
176-
177- func (pm * PackageManager ) InstallPlatformReleases (platformReleases []* cores.PlatformRelease ,
178- outputResults * output.CoreProcessResults ) error {
179-
180- for _ , platformRelease := range platformReleases {
181- pm .Log .WithField ("Package" , platformRelease .Platform .Package .Name ).
182- WithField ("Name" , platformRelease .Platform .Name ).
183- WithField ("Version" , platformRelease .Version ).
184- Info ("Installing platform" )
185-
186- err := pm .InstallPlatform (platformRelease )
187- var result output.ProcessResult
188- if err != nil {
189- if os .IsExist (err ) {
190- pm .Log .WithError (err ).Warnf ("Cannot install platform `%s`, it is already installed" , platformRelease .Platform .Name )
191- result = output.ProcessResult {
192- Status : "Already Installed" ,
193- }
194- } else {
195- pm .Log .WithError (err ).Warnf ("Cannot install platform `%s`" , platformRelease .Platform .Name )
196- result = output.ProcessResult {
197- Error : err .Error (),
198- }
199- }
200- } else {
201- pm .Log .Info ("Adding installed platform to final result" )
202-
203- result = output.ProcessResult {
204- Status : "Installed" ,
205- }
206- }
207- name := platformRelease .String ()
208- result .ItemName = name
209- outputResults .Cores [name ] = result
210- }
211- return nil
212- }
0 commit comments