@@ -2,47 +2,46 @@ package core
2
2
3
3
import (
4
4
"context"
5
- "os "
5
+ "fmt "
6
6
7
7
"github.com/arduino/arduino-cli/arduino/cores"
8
8
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
9
- "github.com/arduino/arduino-cli/cli "
9
+ "github.com/arduino/arduino-cli/commands "
10
10
"github.com/arduino/arduino-cli/common/formatter"
11
11
"github.com/arduino/arduino-cli/rpc"
12
12
semver "go.bug.st/relaxed-semver"
13
13
)
14
14
15
- //"packager:arch@version
16
15
func PlatformInstall (ctx context.Context , req * rpc.PlatformInstallReq ) (* rpc.PlatformInstallResp , error ) {
17
16
version , err := semver .Parse (req .Version )
18
17
if err != nil {
19
18
formatter .PrintError (err , "version not readable" )
20
- os . Exit ( cli . ErrBadCall )
19
+ return nil , fmt . Errorf ( "version not readable" , err )
21
20
}
22
21
ref := & packagemanager.PlatformReference {
23
22
Package : req .PlatformPackage ,
24
23
PlatformArchitecture : req .Architecture ,
25
24
PlatformVersion : version }
26
- pm , _ := cli . InitPackageAndLibraryManagerWithoutBundles ( )
25
+ pm := commands . GetPackageManager ( req )
27
26
platform , tools , err := pm .FindPlatformReleaseDependencies (ref )
28
27
if err != nil {
29
28
formatter .PrintError (err , "Could not determine platform dependencies" )
30
- os . Exit ( cli . ErrBadCall )
29
+ return nil , fmt . Errorf ( "Could not determine platform dependencies" , err )
31
30
}
32
31
33
32
installPlatform (pm , platform , tools )
34
33
35
34
return & rpc.PlatformInstallResp {}, nil
36
35
}
37
36
38
- func installPlatform (pm * packagemanager.PackageManager , platformRelease * cores.PlatformRelease , requiredTools []* cores.ToolRelease ) {
37
+ func installPlatform (pm * packagemanager.PackageManager , platformRelease * cores.PlatformRelease , requiredTools []* cores.ToolRelease ) error {
39
38
log := pm .Log .WithField ("platform" , platformRelease )
40
39
41
40
// Prerequisite checks before install
42
41
if platformRelease .IsInstalled () {
43
42
log .Warn ("Platform already installed" )
44
43
formatter .Print ("Platform " + platformRelease .String () + " already installed" )
45
- return
44
+ return fmt . Errorf ( "Platform " + platformRelease . String () + " already installed" )
46
45
}
47
46
toolsToInstall := []* cores.ToolRelease {}
48
47
for _ , tool := range requiredTools {
@@ -80,39 +79,41 @@ func installPlatform(pm *packagemanager.PackageManager, platformRelease *cores.P
80
79
if err != nil {
81
80
log .WithError (err ).Error ("Cannot install platform" )
82
81
formatter .PrintError (err , "Cannot install platform" )
83
- os . Exit ( cli . ErrGeneric )
82
+ return fmt . Errorf ( "Cannot install platform" , err )
84
83
}
85
84
86
85
// If upgrading remove previous release
87
86
if installed != nil {
88
- err := pm .UninstallPlatform (installed )
87
+ errUn := pm .UninstallPlatform (installed )
89
88
90
89
// In case of error try to rollback
91
- if err != nil {
92
- log .WithError (err ).Error ("Error updating platform." )
93
- formatter .PrintError (err , "Error updating platform" )
90
+ if errUn != nil {
91
+ log .WithError (errUn ).Error ("Error updating platform." )
92
+ formatter .PrintError (errUn , "Error updating platform" )
94
93
95
94
// Rollback
96
95
if err := pm .UninstallPlatform (platformRelease ); err != nil {
97
96
log .WithError (err ).Error ("Error rolling-back changes." )
98
97
formatter .PrintError (err , "Error rolling-back changes." )
98
+ return fmt .Errorf ("Error rolling-back changes." , err )
99
99
}
100
- os . Exit ( cli . ErrGeneric )
100
+ return fmt . Errorf ( "Error updating platform" , errUn )
101
101
}
102
102
}
103
103
104
104
log .Info ("Platform installed" )
105
105
formatter .Print (platformRelease .String () + " installed" )
106
+ return nil
106
107
}
107
108
108
109
// InstallToolRelease installs a ToolRelease
109
- func InstallToolRelease (pm * packagemanager.PackageManager , toolRelease * cores.ToolRelease ) {
110
+ func InstallToolRelease (pm * packagemanager.PackageManager , toolRelease * cores.ToolRelease ) error {
110
111
log := pm .Log .WithField ("Tool" , toolRelease )
111
112
112
113
if toolRelease .IsInstalled () {
113
114
log .Warn ("Tool already installed" )
114
115
formatter .Print ("Tool " + toolRelease .String () + " already installed" )
115
- return
116
+ return fmt . Errorf ( "Tool " + toolRelease . String () + " already installed" )
116
117
}
117
118
118
119
log .Info ("Installing tool" )
@@ -121,9 +122,10 @@ func InstallToolRelease(pm *packagemanager.PackageManager, toolRelease *cores.To
121
122
if err != nil {
122
123
log .WithError (err ).Warn ("Cannot install tool" )
123
124
formatter .PrintError (err , "Cannot install tool: " + toolRelease .String ())
124
- os . Exit ( cli . ErrGeneric )
125
+ return fmt . Errorf ( "Cannot install tool: " + toolRelease . String (), err )
125
126
}
126
127
127
128
log .Info ("Tool installed" )
128
129
formatter .Print (toolRelease .String () + " installed" )
130
+ return nil
129
131
}
0 commit comments