helper/variables: trim whitespace around the key in -var

Fixes #10716

This trims whitespace around the key in the `-var` flag.

This is a regression from 0.7.x.

The value is whitespace sensitive unless double-quoted. This is the same
behavior as 0.7.x. I considered rejecting whitespace around the '='
completely but I don't want to introduce BC and the behavior actually
seems quite obvious to me.
This commit is contained in:
Mitchell Hashimoto 2016-12-13 20:55:10 -08:00
parent 014b414839
commit b7f6f8eb2a
No known key found for this signature in database
GPG Key ID: 744E147AA52F5B0A
2 changed files with 31 additions and 0 deletions

View File

@ -21,11 +21,18 @@ func (v *Flag) Set(raw string) error {
}
key, input := raw[0:idx], raw[idx+1:]
if key == "" {
return fmt.Errorf("No key to left '=' in arg: %s", raw)
}
value, err := ParseInput(input)
if err != nil {
return err
}
// Trim the whitespace on the key
key = strings.TrimSpace(key)
*v = Merge(*v, map[string]interface{}{key: value})
return nil
}

View File

@ -19,6 +19,12 @@ func TestFlag(t *testing.T) {
Output map[string]interface{}
Error bool
}{
{
"=value",
nil,
true,
},
{
"key=value",
map[string]interface{}{"key": "value"},
@ -43,6 +49,24 @@ func TestFlag(t *testing.T) {
false,
},
{
"key =value",
map[string]interface{}{"key": "value"},
false,
},
{
"key = value",
map[string]interface{}{"key": " value"},
false,
},
{
`key = "value"`,
map[string]interface{}{"key": "value"},
false,
},
{
"map.key=foo",
map[string]interface{}{"map.key": "foo"},