@@ -22,37 +22,46 @@ import (
2222 "os"
2323 "strings"
2424
25- "github.com/arduino/arduino-cli/arduino/cores/packagemanager"
2625 "github.com/arduino/arduino-cli/commands"
26+
2727 "github.com/arduino/arduino-cli/common/formatter"
28+
29+ "github.com/arduino/arduino-cli/arduino/cores/packagemanager"
2830 "go.bug.st/relaxed-semver"
2931)
3032
3133// parsePlatformReferenceArgs parses a sequence of "packager:arch@version" tokens and returns a platformReference slice.
3234func parsePlatformReferenceArgs (args []string ) []* packagemanager.PlatformReference {
3335 ret := []* packagemanager.PlatformReference {}
34-
3536 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 )
4940 os .Exit (commands .ErrBadArgument )
5041 }
51- ret = append (ret , & packagemanager.PlatformReference {
52- Package : split [0 ],
53- PlatformArchitecture : split [1 ],
54- PlatformVersion : version ,
55- })
42+ ret = append (ret , reference )
5643 }
5744 return ret
5845}
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