@@ -20,7 +20,6 @@ import (
2020 "fmt"
2121
2222 "github.com/arduino/arduino-cli/arduino"
23- "github.com/arduino/arduino-cli/arduino/cores"
2423 "github.com/arduino/arduino-cli/arduino/cores/packagemanager"
2524 "github.com/arduino/arduino-cli/commands"
2625 rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
@@ -64,7 +63,7 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest,
6463 }
6564 }
6665
67- if err := installPlatform ( pm , platformRelease , tools , downloadCB , taskCB , req .GetSkipPostInstall ()); err != nil {
66+ if err := pm . DownloadAndInstallPlatformAndTools ( platformRelease , tools , downloadCB , taskCB , req .GetSkipPostInstall ()); err != nil {
6867 return nil , err
6968 }
7069
@@ -74,116 +73,3 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest,
7473
7574 return & rpc.PlatformInstallResponse {}, nil
7675}
77-
78- func installPlatform (pm * packagemanager.PackageManager ,
79- platformRelease * cores.PlatformRelease , requiredTools []* cores.ToolRelease ,
80- downloadCB rpc.DownloadProgressCB , taskCB rpc.TaskProgressCB ,
81- skipPostInstall bool ) error {
82- log := pm .Log .WithField ("platform" , platformRelease )
83-
84- // Prerequisite checks before install
85- toolsToInstall := []* cores.ToolRelease {}
86- for _ , tool := range requiredTools {
87- if tool .IsInstalled () {
88- log .WithField ("tool" , tool ).Warn ("Tool already installed" )
89- taskCB (& rpc.TaskProgress {Name : tr ("Tool %s already installed" , tool ), Completed : true })
90- } else {
91- toolsToInstall = append (toolsToInstall , tool )
92- }
93- }
94-
95- // Package download
96- taskCB (& rpc.TaskProgress {Name : tr ("Downloading packages" )})
97- for _ , tool := range toolsToInstall {
98- if err := pm .DownloadToolRelease (tool , nil , downloadCB ); err != nil {
99- return err
100- }
101- }
102- if err := pm .DownloadPlatformRelease (platformRelease , nil , downloadCB ); err != nil {
103- return err
104- }
105- taskCB (& rpc.TaskProgress {Completed : true })
106-
107- // Install tools first
108- for _ , tool := range toolsToInstall {
109- if err := pm .InstallTool (tool , taskCB ); err != nil {
110- return err
111- }
112- }
113-
114- installed := pm .GetInstalledPlatformRelease (platformRelease .Platform )
115- installedTools := []* cores.ToolRelease {}
116- if installed == nil {
117- // No version of this platform is installed
118- log .Info ("Installing platform" )
119- taskCB (& rpc.TaskProgress {Name : tr ("Installing platform %s" , platformRelease )})
120- } else {
121- // A platform with a different version is already installed
122- log .Info ("Replacing platform " + installed .String ())
123- taskCB (& rpc.TaskProgress {Name : tr ("Replacing platform %[1]s with %[2]s" , installed , platformRelease )})
124- platformRef := & packagemanager.PlatformReference {
125- Package : platformRelease .Platform .Package .Name ,
126- PlatformArchitecture : platformRelease .Platform .Architecture ,
127- PlatformVersion : installed .Version ,
128- }
129-
130- // Get a list of tools used by the currently installed platform version.
131- // This must be done so tools used by the currently installed version are
132- // removed if not used also by the newly installed version.
133- var err error
134- _ , installedTools , err = pm .FindPlatformReleaseDependencies (platformRef )
135- if err != nil {
136- return & arduino.NotFoundError {Message : tr ("Can't find dependencies for platform %s" , platformRef ), Cause : err }
137- }
138- }
139-
140- // Install
141- if err := pm .InstallPlatform (platformRelease ); err != nil {
142- log .WithError (err ).Error ("Cannot install platform" )
143- return & arduino.FailedInstallError {Message : tr ("Cannot install platform" ), Cause : err }
144- }
145-
146- // If upgrading remove previous release
147- if installed != nil {
148- uninstallErr := pm .UninstallPlatform (installed , taskCB )
149-
150- // In case of error try to rollback
151- if uninstallErr != nil {
152- log .WithError (uninstallErr ).Error ("Error upgrading platform." )
153- taskCB (& rpc.TaskProgress {Message : tr ("Error upgrading platform: %s" , uninstallErr )})
154-
155- // Rollback
156- if err := pm .UninstallPlatform (platformRelease , taskCB ); err != nil {
157- log .WithError (err ).Error ("Error rolling-back changes." )
158- taskCB (& rpc.TaskProgress {Message : tr ("Error rolling-back changes: %s" , err )})
159- }
160-
161- return & arduino.FailedInstallError {Message : tr ("Cannot upgrade platform" ), Cause : uninstallErr }
162- }
163-
164- // Uninstall unused tools
165- for _ , tool := range installedTools {
166- taskCB (& rpc.TaskProgress {Name : tr ("Uninstalling %s, tool is no more required" , tool )})
167- if ! pm .IsToolRequired (tool ) {
168- pm .UninstallTool (tool , taskCB )
169- }
170- }
171-
172- }
173-
174- // Perform post install
175- if ! skipPostInstall {
176- log .Info ("Running post_install script" )
177- taskCB (& rpc.TaskProgress {Message : tr ("Configuring platform." )})
178- if err := pm .RunPostInstallScript (platformRelease ); err != nil {
179- taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure platform: %s" , err )})
180- }
181- } else {
182- log .Info ("Skipping platform configuration." )
183- taskCB (& rpc.TaskProgress {Message : tr ("Skipping platform configuration." )})
184- }
185-
186- log .Info ("Platform installed" )
187- taskCB (& rpc.TaskProgress {Message : tr ("Platform %s installed" , platformRelease ), Completed : true })
188- return nil
189- }
0 commit comments