Skip to content

Commit 00b2a3a

Browse files
committed
Added 'upload' flags to set upload fields value
1 parent c004b42 commit 00b2a3a

File tree

1 file changed

+34
-7
lines changed

1 file changed

+34
-7
lines changed

Diff for: internal/cli/upload/upload.go

+34-7
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ var (
5151

5252
// NewCommand created a new `upload` command
5353
func NewCommand() *cobra.Command {
54+
var uploadFields []string
55+
var parsedUploadFields map[string]string
5456
uploadCommand := &cobra.Command{
5557
Use: "upload",
5658
Short: tr("Upload Arduino sketches."),
@@ -59,8 +61,20 @@ func NewCommand() *cobra.Command {
5961
Args: cobra.MaximumNArgs(1),
6062
PreRun: func(cmd *cobra.Command, args []string) {
6163
arguments.CheckFlagsConflicts(cmd, "input-file", "input-dir")
64+
if len(uploadFields) > 0 {
65+
parsedUploadFields = map[string]string{}
66+
for _, field := range uploadFields {
67+
split := strings.SplitN(field, "=", 2)
68+
if len(split) != 2 {
69+
feedback.Fatal(tr("Invalid upload field: %s", field), feedback.ErrBadArgument)
70+
}
71+
parsedUploadFields[split[0]] = split[1]
72+
}
73+
}
74+
},
75+
Run: func(cmd *cobra.Command, args []string) {
76+
runUploadCommand(args, parsedUploadFields)
6277
},
63-
Run: runUploadCommand,
6478
}
6579

6680
fqbnArg.AddToCommand(uploadCommand)
@@ -73,10 +87,11 @@ func NewCommand() *cobra.Command {
7387
programmer.AddToCommand(uploadCommand)
7488
uploadCommand.Flags().BoolVar(&dryRun, "dry-run", false, tr("Do not perform the actual upload, just log out actions"))
7589
uploadCommand.Flags().MarkHidden("dry-run")
90+
uploadCommand.Flags().StringArrayVar(&uploadFields, "upload-field", uploadFields, tr("Set a value for a field required to upload.")+" (field=value)")
7691
return uploadCommand
7792
}
7893

79-
func runUploadCommand(command *cobra.Command, args []string) {
94+
func runUploadCommand(args []string, uploadFieldsArgs map[string]string) {
8095
logrus.Info("Executing `arduino-cli upload`")
8196

8297
path := ""
@@ -147,12 +162,24 @@ func runUploadCommand(command *cobra.Command, args []string) {
147162

148163
fields := map[string]string{}
149164
if len(userFieldRes.UserFields) > 0 {
150-
feedback.Print(tr("Uploading to specified board using %s protocol requires the following info:", port.Protocol))
151-
if f, err := arguments.AskForUserFields(userFieldRes.UserFields); err != nil {
152-
msg := fmt.Sprintf("%s: %s", tr("Error getting user input"), err)
153-
feedback.Fatal(msg, feedback.ErrGeneric)
165+
if len(uploadFieldsArgs) > 0 {
166+
// If the user has specified some fields via cmd-line, we don't ask for them
167+
for _, field := range userFieldRes.UserFields {
168+
if value, ok := uploadFieldsArgs[field.Name]; ok {
169+
fields[field.Name] = value
170+
} else {
171+
feedback.Fatal(tr("Missing required upload field: %s", field.Name), feedback.ErrBadArgument)
172+
}
173+
}
154174
} else {
155-
fields = f
175+
// Otherwise prompt the user for them
176+
feedback.Print(tr("Uploading to specified board using %s protocol requires the following info:", port.Protocol))
177+
if f, err := arguments.AskForUserFields(userFieldRes.UserFields); err != nil {
178+
msg := fmt.Sprintf("%s: %s", tr("Error getting user input"), err)
179+
feedback.Fatal(msg, feedback.ErrGeneric)
180+
} else {
181+
fields = f
182+
}
156183
}
157184
}
158185

0 commit comments

Comments
 (0)