Skip to content

Commit 5256878

Browse files
committed
make packages and platform case insensitive pt 3
using the `core.PlatformSearch()` approach but using only a small portion of the logic
1 parent a07b4d8 commit 5256878

File tree

6 files changed

+36
-11
lines changed

6 files changed

+36
-11
lines changed

cli/arguments/reference.go

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ package arguments
1818
import (
1919
"fmt"
2020
"strings"
21+
22+
"github.com/arduino/arduino-cli/arduino/cores"
23+
"github.com/arduino/arduino-cli/commands"
24+
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2125
)
2226

2327
// Reference represents a reference item (core or library) passed to the CLI
@@ -37,10 +41,10 @@ func (r *Reference) String() string {
3741

3842
// ParseReferences is a convenient wrapper that operates on a slice of strings and
3943
// calls ParseReference for each of them. It returns at the first invalid argument.
40-
func ParseReferences(args []string) ([]*Reference, error) {
44+
func ParseReferences(args []string, inst *rpc.Instance) ([]*Reference, error) {
4145
ret := []*Reference{}
4246
for _, arg := range args {
43-
reference, err := ParseReference(arg)
47+
reference, err := ParseReference(arg, inst)
4448
if err != nil {
4549
return nil, err
4650
}
@@ -50,7 +54,7 @@ func ParseReferences(args []string) ([]*Reference, error) {
5054
}
5155

5256
// ParseReference parses a string and returns a Reference object.
53-
func ParseReference(arg string) (*Reference, error) {
57+
func ParseReference(arg string, inst *rpc.Instance) (*Reference, error) {
5458
ret := &Reference{}
5559
if arg == "" {
5660
return nil, fmt.Errorf(tr("invalid empty core argument"))
@@ -75,10 +79,31 @@ func ParseReference(arg string) (*Reference, error) {
7579
return nil, fmt.Errorf(tr("invalid empty core name '%s'"), arg)
7680
}
7781
ret.PackageName = toks[0]
82+
83+
// try to search in the packages, this way ParseReference can be case insensitive
84+
// note that if the search fail for some reason the ret.Packagename does not get overwritten
85+
var targetPackage *cores.Package
86+
if inst != nil { // do not perform the search if the instance is not defined
87+
pm := commands.GetPackageManager(inst.Id)
88+
for _, targetPackage = range pm.Packages {
89+
if targetPackage.Name == strings.ToLower(ret.PackageName) {
90+
ret.PackageName = targetPackage.Name
91+
break
92+
}
93+
}
94+
}
7895
if toks[1] == "" {
7996
return nil, fmt.Errorf(tr("invalid empty core architecture '%s'"), arg)
8097
}
8198
ret.Architecture = toks[1]
82-
99+
// we do the same for architecture
100+
if inst != nil { // do not perform the search if the instance is not defined
101+
for _, platform := range targetPackage.Platforms {
102+
if platform.Architecture == strings.ToLower(ret.Architecture) {
103+
ret.Architecture = platform.Architecture
104+
break
105+
}
106+
}
107+
}
83108
return ret, nil
84109
}

cli/arguments/reference_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ func TestArgsStringify(t *testing.T) {
5353

5454
func TestParseReferenceCores(t *testing.T) {
5555
for _, tt := range goodCores {
56-
actual, err := arguments.ParseReference(tt.in)
56+
actual, err := arguments.ParseReference(tt.in, nil)
5757
assert.Nil(t, err)
5858
assert.Equal(t, tt.expected, actual)
5959
}
6060

6161
for _, tt := range badCores {
62-
actual, err := arguments.ParseReference(tt.in)
62+
actual, err := arguments.ParseReference(tt.in, nil)
6363
require.NotNil(t, err, "Testing bad core '%s'", tt.in)
6464
require.Equal(t, tt.expected, actual, "Testing bad core '%s'", tt.in)
6565
}
@@ -71,7 +71,7 @@ func TestParseArgs(t *testing.T) {
7171
input = append(input, tt.in)
7272
}
7373

74-
refs, err := arguments.ParseReferences(input)
74+
refs, err := arguments.ParseReferences(input, nil)
7575
assert.Nil(t, err)
7676
assert.Equal(t, len(goodCores), len(refs))
7777

cli/core/download.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func runDownloadCommand(cmd *cobra.Command, args []string) {
5353

5454
logrus.Info("Executing `arduino-cli core download`")
5555

56-
platformsRefs, err := arguments.ParseReferences(args)
56+
platformsRefs, err := arguments.ParseReferences(args, inst)
5757
if err != nil {
5858
feedback.Errorf(tr("Invalid argument passed: %v"), err)
5959
os.Exit(errorcodes.ErrBadArgument)

cli/core/install.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func runInstallCommand(cmd *cobra.Command, args []string) {
6161
inst := instance.CreateAndInit()
6262
logrus.Info("Executing `arduino-cli core install`")
6363

64-
platformsRefs, err := arguments.ParseReferences(args)
64+
platformsRefs, err := arguments.ParseReferences(args, inst)
6565
if err != nil {
6666
feedback.Errorf(tr("Invalid argument passed: %v"), err)
6767
os.Exit(errorcodes.ErrBadArgument)

cli/core/uninstall.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func runUninstallCommand(cmd *cobra.Command, args []string) {
5050
inst := instance.CreateAndInit()
5151
logrus.Info("Executing `arduino-cli core uninstall`")
5252

53-
platformsRefs, err := arguments.ParseReferences(args)
53+
platformsRefs, err := arguments.ParseReferences(args, inst)
5454
if err != nil {
5555
feedback.Errorf(tr("Invalid argument passed: %v"), err)
5656
os.Exit(errorcodes.ErrBadArgument)

cli/core/upgrade.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func runUpgradeCommand(cmd *cobra.Command, args []string) {
7676

7777
// proceed upgrading, if anything is upgradable
7878
exitErr := false
79-
platformsRefs, err := arguments.ParseReferences(args)
79+
platformsRefs, err := arguments.ParseReferences(args, inst)
8080
if err != nil {
8181
feedback.Errorf(tr("Invalid argument passed: %v"), err)
8282
os.Exit(errorcodes.ErrBadArgument)

0 commit comments

Comments
 (0)