@@ -20,7 +20,6 @@ import (
20
20
"fmt"
21
21
22
22
"github.com/arduino/arduino-cli/arduino"
23
- "github.com/arduino/arduino-cli/arduino/cores"
24
23
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
25
24
"github.com/arduino/arduino-cli/commands"
26
25
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
@@ -64,7 +63,7 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest,
64
63
}
65
64
}
66
65
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 {
68
67
return nil , err
69
68
}
70
69
@@ -74,116 +73,3 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest,
74
73
75
74
return & rpc.PlatformInstallResponse {}, nil
76
75
}
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