@@ -22,37 +22,46 @@ import (
22
22
"os"
23
23
"strings"
24
24
25
- "github.com/arduino/arduino-cli/arduino/cores/packagemanager"
26
25
"github.com/arduino/arduino-cli/commands"
26
+
27
27
"github.com/arduino/arduino-cli/common/formatter"
28
+
29
+ "github.com/arduino/arduino-cli/arduino/cores/packagemanager"
28
30
"go.bug.st/relaxed-semver"
29
31
)
30
32
31
33
// parsePlatformReferenceArgs parses a sequence of "packager:arch@version" tokens and returns a platformReference slice.
32
34
func parsePlatformReferenceArgs (args []string ) []* packagemanager.PlatformReference {
33
35
ret := []* packagemanager.PlatformReference {}
34
-
35
36
for _ , arg := range args {
36
- var version * semver.Version
37
- if strings .Contains (arg , "@" ) {
38
- split := strings .SplitN (arg , "@" , 2 )
39
- arg = split [0 ]
40
- if ver , err := semver .Parse (split [1 ]); err != nil {
41
- formatter .PrintErrorMessage (fmt .Sprintf ("invalid item '%s': %s" , arg , err ))
42
- } else {
43
- version = ver
44
- }
45
- }
46
- split := strings .Split (arg , ":" )
47
- if len (split ) != 2 {
48
- formatter .PrintErrorMessage (fmt .Sprintf ("'%s' is an invalid item (does not match the syntax 'PACKAGER:ARCH[@VERSION]')" , arg ))
37
+ reference , err := parsePlatformReferenceArg (arg )
38
+ if err != nil {
39
+ formatter .PrintError (err , "Invalid item " + arg )
49
40
os .Exit (commands .ErrBadArgument )
50
41
}
51
- ret = append (ret , & packagemanager.PlatformReference {
52
- Package : split [0 ],
53
- PlatformArchitecture : split [1 ],
54
- PlatformVersion : version ,
55
- })
42
+ ret = append (ret , reference )
56
43
}
57
44
return ret
58
45
}
46
+
47
+ func parsePlatformReferenceArg (arg string ) (* packagemanager.PlatformReference , error ) {
48
+ split := strings .SplitN (arg , "@" , 2 )
49
+ arg = split [0 ]
50
+ var version * semver.Version
51
+ if len (split ) > 1 {
52
+ if ver , err := semver .Parse (split [1 ]); err == nil {
53
+ version = ver
54
+ } else {
55
+ return nil , fmt .Errorf ("invalid version: %s" , err )
56
+ }
57
+ }
58
+ split = strings .Split (arg , ":" )
59
+ if len (split ) != 2 {
60
+ return nil , fmt .Errorf ("invalid item %s" , arg )
61
+ }
62
+ return & packagemanager.PlatformReference {
63
+ Package : split [0 ],
64
+ PlatformArchitecture : split [1 ],
65
+ PlatformVersion : version ,
66
+ }, nil
67
+ }
0 commit comments