5151
5252// NewCommand created a new `upload` command
5353func 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