Skip to content

Commit 552afac

Browse files
committed
legacy: replacing ParseCommandLine with the equivalent library call
1 parent 815deb7 commit 552afac

File tree

2 files changed

+3
-95
lines changed

2 files changed

+3
-95
lines changed

legacy/builder/test/utils_test.go

-40
Original file line numberDiff line numberDiff line change
@@ -23,39 +23,6 @@ import (
2323
"github.com/stretchr/testify/require"
2424
)
2525

26-
func TestCommandLineParser(t *testing.T) {
27-
command := "\"/home/federico/materiale/works_Arduino/Arduino/build/hardware/tools/coan\" source -m -E -P -kb -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega32u4 -DF_CPU=16000000L -DARDUINO=010600 -DARDUINO_AVR_LEONARDO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x8036 '-DUSB_MANUFACTURER=' '-DUSB_PRODUCT=\"Arduino Leonardo\"' \"/tmp/sketch321469072.cpp\""
28-
29-
parts, err := utils.ParseCommandLine(command)
30-
NoError(t, err)
31-
32-
require.Equal(t, 23, len(parts))
33-
34-
require.Equal(t, "/home/federico/materiale/works_Arduino/Arduino/build/hardware/tools/coan", parts[0])
35-
require.Equal(t, "source", parts[1])
36-
require.Equal(t, "-m", parts[2])
37-
require.Equal(t, "-E", parts[3])
38-
require.Equal(t, "-P", parts[4])
39-
require.Equal(t, "-kb", parts[5])
40-
require.Equal(t, "-c", parts[6])
41-
require.Equal(t, "-g", parts[7])
42-
require.Equal(t, "-Os", parts[8])
43-
require.Equal(t, "-w", parts[9])
44-
require.Equal(t, "-ffunction-sections", parts[10])
45-
require.Equal(t, "-fdata-sections", parts[11])
46-
require.Equal(t, "-MMD", parts[12])
47-
require.Equal(t, "-mmcu=atmega32u4", parts[13])
48-
require.Equal(t, "-DF_CPU=16000000L", parts[14])
49-
require.Equal(t, "-DARDUINO=010600", parts[15])
50-
require.Equal(t, "-DARDUINO_AVR_LEONARDO", parts[16])
51-
require.Equal(t, "-DARDUINO_ARCH_AVR", parts[17])
52-
require.Equal(t, "-DUSB_VID=0x2341", parts[18])
53-
require.Equal(t, "-DUSB_PID=0x8036", parts[19])
54-
require.Equal(t, "-DUSB_MANUFACTURER=", parts[20])
55-
require.Equal(t, "-DUSB_PRODUCT=\"Arduino Leonardo\"", parts[21])
56-
require.Equal(t, "/tmp/sketch321469072.cpp", parts[22])
57-
}
58-
5926
func TestPrintableCommand(t *testing.T) {
6027
parts := []string{
6128
"/path/to/dir with spaces/cmd",
@@ -75,13 +42,6 @@ func TestPrintableCommand(t *testing.T) {
7542
require.Equal(t, correct, result)
7643
}
7744

78-
func TestCommandLineParserError(t *testing.T) {
79-
command := "\"command missing quote"
80-
81-
_, err := utils.ParseCommandLine(command)
82-
require.Error(t, err)
83-
}
84-
8545
func TestMapTrimSpace(t *testing.T) {
8646
value := "hello, world , how are,you? "
8747
parts := utils.Map(strings.Split(value, ","), utils.TrimSpace)

legacy/builder/utils/utils.go

+3-55
Original file line numberDiff line numberDiff line change
@@ -29,56 +29,15 @@ import (
2929
"unicode"
3030
"unicode/utf8"
3131

32-
"github.com/arduino/arduino-cli/legacy/builder/constants"
3332
"github.com/arduino/arduino-cli/legacy/builder/gohasissues"
3433
"github.com/arduino/arduino-cli/legacy/builder/types"
3534
paths "github.com/arduino/go-paths-helper"
35+
"github.com/arduino/go-properties-orderedmap"
3636
"github.com/pkg/errors"
3737
"golang.org/x/text/transform"
3838
"golang.org/x/text/unicode/norm"
3939
)
4040

41-
func ParseCommandLine(input string) ([]string, error) {
42-
var parts []string
43-
escapingChar := constants.EMPTY_STRING
44-
escapedArg := constants.EMPTY_STRING
45-
for _, inputPart := range strings.Split(input, constants.SPACE) {
46-
inputPart = strings.TrimSpace(inputPart)
47-
if len(inputPart) == 0 {
48-
continue
49-
}
50-
51-
if escapingChar == constants.EMPTY_STRING {
52-
if inputPart[0] != '"' && inputPart[0] != '\'' {
53-
parts = append(parts, inputPart)
54-
continue
55-
}
56-
57-
escapingChar = string(inputPart[0])
58-
inputPart = inputPart[1:]
59-
escapedArg = constants.EMPTY_STRING
60-
}
61-
62-
if inputPart[len(inputPart)-1] != '"' && inputPart[len(inputPart)-1] != '\'' {
63-
escapedArg = escapedArg + inputPart + " "
64-
continue
65-
}
66-
67-
escapedArg = escapedArg + inputPart[:len(inputPart)-1]
68-
escapedArg = strings.TrimSpace(escapedArg)
69-
if len(escapedArg) > 0 {
70-
parts = append(parts, escapedArg)
71-
}
72-
escapingChar = constants.EMPTY_STRING
73-
}
74-
75-
if escapingChar != constants.EMPTY_STRING {
76-
return nil, errors.Errorf("Invalid quoting: no closing [%s] char found.", escapingChar)
77-
}
78-
79-
return parts, nil
80-
}
81-
8241
type filterFiles func([]os.FileInfo) []os.FileInfo
8342

8443
func ReadDirFiltered(folder string, fn filterFiles) ([]os.FileInfo, error) {
@@ -189,22 +148,11 @@ func TrimSpace(value string) string {
189148
}
190149

191150
func PrepareCommand(pattern string) (*exec.Cmd, error) {
192-
parts, err := ParseCommandLine(pattern)
151+
parts, err := properties.SplitQuotedString(pattern, `"'`, false)
193152
if err != nil {
194153
return nil, errors.WithStack(err)
195154
}
196-
command := parts[0]
197-
parts = parts[1:]
198-
var args []string
199-
for _, part := range parts {
200-
if part == "" {
201-
continue
202-
}
203-
args = append(args, part)
204-
}
205-
206-
cmd := exec.Command(command, args...)
207-
return cmd, nil
155+
return exec.Command(parts[0], parts[1:]...), nil
208156
}
209157

210158
func printableArgument(arg string) string {

0 commit comments

Comments
 (0)