@@ -78,15 +78,15 @@ func ParseInstructionWithLinter(node *parser.Node, lintWarn linter.LintWarnFunc)
7878 req := newParseRequestFromNode (node )
7979 switch strings .ToLower (node .Value ) {
8080 case command .Env :
81- return parseEnv (req )
81+ return parseEnv (req , lintWarn )
8282 case command .Maintainer :
8383 if lintWarn != nil {
8484 msg := linter .RuleMaintainerDeprecated .Format ()
8585 linter .RuleMaintainerDeprecated .Run (lintWarn , node .Location (), msg )
8686 }
8787 return parseMaintainer (req )
8888 case command .Label :
89- return parseLabel (req )
89+ return parseLabel (req , lintWarn )
9090 case command .Add :
9191 return parseAdd (req )
9292 case command .Copy :
@@ -195,31 +195,34 @@ func Parse(ast *parser.Node, lint linter.LintWarnFunc) (stages []Stage, metaArgs
195195 return stages , metaArgs , nil
196196}
197197
198- func parseKvps (args []string , cmdName string ) (KeyValuePairs , error ) {
198+ func parseKvps (args []string , cmdName string , location []parser. Range , lint linter. LintWarnFunc ) (KeyValuePairs , error ) {
199199 if len (args ) == 0 {
200200 return nil , errAtLeastOneArgument (cmdName )
201201 }
202- if len (args )% 2 != 0 {
202+ if len (args )% 3 != 0 {
203203 // should never get here, but just in case
204204 return nil , errTooManyArguments (cmdName )
205205 }
206206 var res KeyValuePairs
207- for j := 0 ; j < len (args ); j += 2 {
207+ for j := 0 ; j < len (args ); j += 3 {
208208 if len (args [j ]) == 0 {
209209 return nil , errBlankCommandNames (cmdName )
210210 }
211- name := args [j ]
212- value := args [j + 1 ]
211+ name , value , sep := args [j ], args [j + 1 ], args [j + 2 ]
212+ if sep == "" {
213+ msg := linter .RuleLegacyKeyValueFormat .Format (cmdName )
214+ linter .RuleLegacyKeyValueFormat .Run (lint , location , msg )
215+ }
213216 res = append (res , KeyValuePair {Key : name , Value : value })
214217 }
215218 return res , nil
216219}
217220
218- func parseEnv (req parseRequest ) (* EnvCommand , error ) {
221+ func parseEnv (req parseRequest , lint linter. LintWarnFunc ) (* EnvCommand , error ) {
219222 if err := req .flags .Parse (); err != nil {
220223 return nil , err
221224 }
222- envs , err := parseKvps (req .args , "ENV" )
225+ envs , err := parseKvps (req .args , "ENV" , req . location , lint )
223226 if err != nil {
224227 return nil , err
225228 }
@@ -243,12 +246,12 @@ func parseMaintainer(req parseRequest) (*MaintainerCommand, error) {
243246 }, nil
244247}
245248
246- func parseLabel (req parseRequest ) (* LabelCommand , error ) {
249+ func parseLabel (req parseRequest , lint linter. LintWarnFunc ) (* LabelCommand , error ) {
247250 if err := req .flags .Parse (); err != nil {
248251 return nil , err
249252 }
250253
251- labels , err := parseKvps (req .args , "LABEL" )
254+ labels , err := parseKvps (req .args , "LABEL" , req . location , lint )
252255 if err != nil {
253256 return nil , err
254257 }
0 commit comments