Skip to content

Commit 2be83b1

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 5e81e12 commit 2be83b1

File tree

6 files changed

+36
-11
lines changed

6 files changed

+36
-11
lines changed

Diff for: cli/arguments/reference.go

+29-4
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
}
@@ -52,7 +56,7 @@ func ParseReferences(args []string) ([]*Reference, error) {
5256
// ParseReference parses a string and returns a Reference object. If `parseArch` is passed,
5357
// the method also tries to parse the architecture bit, i.e. string must be in the form
5458
// "packager:arch@version", useful to represent a platform (or core) name.
55-
func ParseReference(arg string) (*Reference, error) {
59+
func ParseReference(arg string, inst *rpc.Instance) (*Reference, error) {
5660
ret := &Reference{}
5761
if arg == "" {
5862
return nil, fmt.Errorf(tr("invalid empty core argument"))
@@ -77,10 +81,31 @@ func ParseReference(arg string) (*Reference, error) {
7781
return nil, fmt.Errorf(tr("invalid empty core name '%s'"), arg)
7882
}
7983
ret.PackageName = toks[0]
84+
85+
// try to search in the packages, this way ParseReference can be case insensitive
86+
// note that if the search fail for some reason the ret.Packagename does not get overwritten
87+
var targetPackage *cores.Package
88+
if inst != nil { // do not perform the search if the instance is not defined
89+
pm := commands.GetPackageManager(inst.Id)
90+
for _, targetPackage = range pm.Packages {
91+
if targetPackage.Name == strings.ToLower(ret.PackageName) {
92+
ret.PackageName = targetPackage.Name
93+
break
94+
}
95+
}
96+
}
8097
if toks[1] == "" {
8198
return nil, fmt.Errorf(tr("invalid empty core architecture '%s'"), arg)
8299
}
83100
ret.Architecture = toks[1]
84-
101+
// we do the same for architecture
102+
if inst != nil { // do not perform the search if the instance is not defined
103+
for _, platform := range targetPackage.Platforms {
104+
if platform.Architecture == strings.ToLower(ret.Architecture) {
105+
ret.Architecture = platform.Architecture
106+
break
107+
}
108+
}
109+
}
85110
return ret, nil
86111
}

Diff for: cli/arguments/reference_test.go

+3-3
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

Diff for: cli/core/download.go

+1-1
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)

Diff for: cli/core/install.go

+1-1
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)

Diff for: cli/core/uninstall.go

+1-1
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)

Diff for: cli/core/upgrade.go

+1-1
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)