51
51
52
52
// NewCommand created a new `upload` command
53
53
func NewCommand () * cobra.Command {
54
+ var uploadFields []string
55
+ var parsedUploadFields map [string ]string
54
56
uploadCommand := & cobra.Command {
55
57
Use : "upload" ,
56
58
Short : tr ("Upload Arduino sketches." ),
@@ -59,8 +61,20 @@ func NewCommand() *cobra.Command {
59
61
Args : cobra .MaximumNArgs (1 ),
60
62
PreRun : func (cmd * cobra.Command , args []string ) {
61
63
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 )
62
77
},
63
- Run : runUploadCommand ,
64
78
}
65
79
66
80
fqbnArg .AddToCommand (uploadCommand )
@@ -73,10 +87,11 @@ func NewCommand() *cobra.Command {
73
87
programmer .AddToCommand (uploadCommand )
74
88
uploadCommand .Flags ().BoolVar (& dryRun , "dry-run" , false , tr ("Do not perform the actual upload, just log out actions" ))
75
89
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)" )
76
91
return uploadCommand
77
92
}
78
93
79
- func runUploadCommand (command * cobra. Command , args [ ]string ) {
94
+ func runUploadCommand (args [] string , uploadFieldsArgs map [ string ]string ) {
80
95
logrus .Info ("Executing `arduino-cli upload`" )
81
96
82
97
path := ""
@@ -147,12 +162,24 @@ func runUploadCommand(command *cobra.Command, args []string) {
147
162
148
163
fields := map [string ]string {}
149
164
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
+ }
154
174
} 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
+ }
156
183
}
157
184
}
158
185
0 commit comments