@@ -17,6 +17,7 @@ package core
17
17
18
18
import (
19
19
"context"
20
+ "fmt"
20
21
21
22
"github.com/arduino/arduino-cli/arduino"
22
23
"github.com/arduino/arduino-cli/arduino/cores"
@@ -44,37 +45,43 @@ func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest,
44
45
PlatformArchitecture : req .Architecture ,
45
46
PlatformVersion : version ,
46
47
}
47
- platform , tools , err := pm .FindPlatformReleaseDependencies (ref )
48
+ platformRelease , tools , err := pm .FindPlatformReleaseDependencies (ref )
48
49
if err != nil {
49
50
return nil , & arduino.PlatformNotFoundError {Platform : ref .String (), Cause : err }
50
51
}
51
52
52
- didInstall , err := installPlatform (pm , platform , tools , downloadCB , taskCB , req .GetSkipPostInstall ())
53
- if err != nil {
54
- return nil , err
53
+ // Prerequisite checks before install
54
+ if platformRelease .IsInstalled () {
55
+ taskCB (& rpc.TaskProgress {Name : tr ("Platform %s already installed" , platformRelease ), Completed : true })
56
+ return & rpc.PlatformInstallResponse {}, nil
55
57
}
56
58
57
- if didInstall {
58
- if err := commands .Init (& rpc.InitRequest {Instance : req .Instance }, nil ); err != nil {
59
- return nil , err
59
+ if req .GetNoOverwrite () {
60
+ if installed := pm .GetInstalledPlatformRelease (platformRelease .Platform ); installed != nil {
61
+ return nil , fmt .Errorf ("%s: %s" ,
62
+ tr ("Platform %s already installed" , installed ),
63
+ tr ("could not overwrite" ))
60
64
}
61
65
}
62
66
67
+ if err := installPlatform (pm , platformRelease , tools , downloadCB , taskCB , req .GetSkipPostInstall ()); err != nil {
68
+ return nil , err
69
+ }
70
+
71
+ if err := commands .Init (& rpc.InitRequest {Instance : req .Instance }, nil ); err != nil {
72
+ return nil , err
73
+ }
74
+
63
75
return & rpc.PlatformInstallResponse {}, nil
64
76
}
65
77
66
78
func installPlatform (pm * packagemanager.PackageManager ,
67
79
platformRelease * cores.PlatformRelease , requiredTools []* cores.ToolRelease ,
68
80
downloadCB rpc.DownloadProgressCB , taskCB rpc.TaskProgressCB ,
69
- skipPostInstall bool ) ( bool , error ) {
81
+ skipPostInstall bool ) error {
70
82
log := pm .Log .WithField ("platform" , platformRelease )
71
83
72
84
// Prerequisite checks before install
73
- if platformRelease .IsInstalled () {
74
- log .Warn ("Platform already installed" )
75
- taskCB (& rpc.TaskProgress {Name : tr ("Platform %s already installed" , platformRelease ), Completed : true })
76
- return false , nil
77
- }
78
85
toolsToInstall := []* cores.ToolRelease {}
79
86
for _ , tool := range requiredTools {
80
87
if tool .IsInstalled () {
@@ -89,18 +96,18 @@ func installPlatform(pm *packagemanager.PackageManager,
89
96
taskCB (& rpc.TaskProgress {Name : tr ("Downloading packages" )})
90
97
for _ , tool := range toolsToInstall {
91
98
if err := downloadTool (pm , tool , downloadCB ); err != nil {
92
- return false , err
99
+ return err
93
100
}
94
101
}
95
102
if err := downloadPlatform (pm , platformRelease , downloadCB ); err != nil {
96
- return false , err
103
+ return err
97
104
}
98
105
taskCB (& rpc.TaskProgress {Completed : true })
99
106
100
107
// Install tools first
101
108
for _ , tool := range toolsToInstall {
102
109
if err := commands .InstallToolRelease (pm , tool , taskCB ); err != nil {
103
- return false , err
110
+ return err
104
111
}
105
112
}
106
113
@@ -112,8 +119,8 @@ func installPlatform(pm *packagemanager.PackageManager,
112
119
taskCB (& rpc.TaskProgress {Name : tr ("Installing platform %s" , platformRelease )})
113
120
} else {
114
121
// A platform with a different version is already installed
115
- log .Info ("Upgrading platform " + installed .String ())
116
- taskCB (& rpc.TaskProgress {Name : tr ("Upgrading platform %[1]s with %[2]s" , installed , platformRelease )})
122
+ log .Info ("Replacing platform " + installed .String ())
123
+ taskCB (& rpc.TaskProgress {Name : tr ("Replacing platform %[1]s with %[2]s" , installed , platformRelease )})
117
124
platformRef := & packagemanager.PlatformReference {
118
125
Package : platformRelease .Platform .Package .Name ,
119
126
PlatformArchitecture : platformRelease .Platform .Architecture ,
@@ -126,14 +133,14 @@ func installPlatform(pm *packagemanager.PackageManager,
126
133
var err error
127
134
_ , installedTools , err = pm .FindPlatformReleaseDependencies (platformRef )
128
135
if err != nil {
129
- return false , & arduino.NotFoundError {Message : tr ("Can't find dependencies for platform %s" , platformRef ), Cause : err }
136
+ return & arduino.NotFoundError {Message : tr ("Can't find dependencies for platform %s" , platformRef ), Cause : err }
130
137
}
131
138
}
132
139
133
140
// Install
134
141
if err := pm .InstallPlatform (platformRelease ); err != nil {
135
142
log .WithError (err ).Error ("Cannot install platform" )
136
- return false , & arduino.FailedInstallError {Message : tr ("Cannot install platform" ), Cause : err }
143
+ return & arduino.FailedInstallError {Message : tr ("Cannot install platform" ), Cause : err }
137
144
}
138
145
139
146
// If upgrading remove previous release
@@ -151,7 +158,7 @@ func installPlatform(pm *packagemanager.PackageManager,
151
158
taskCB (& rpc.TaskProgress {Message : tr ("Error rolling-back changes: %s" , err )})
152
159
}
153
160
154
- return false , & arduino.FailedInstallError {Message : tr ("Cannot upgrade platform" ), Cause : uninstallErr }
161
+ return & arduino.FailedInstallError {Message : tr ("Cannot upgrade platform" ), Cause : uninstallErr }
155
162
}
156
163
157
164
// Uninstall unused tools
@@ -177,5 +184,5 @@ func installPlatform(pm *packagemanager.PackageManager,
177
184
178
185
log .Info ("Platform installed" )
179
186
taskCB (& rpc.TaskProgress {Message : tr ("Platform %s installed" , platformRelease ), Completed : true })
180
- return true , nil
187
+ return nil
181
188
}
0 commit comments