Skip to content

Commit d14954f

Browse files
committed
Honor NoTrimSpace field for flags from env
This commits addresses the following comment: #1649 (comment) String slice flag values from environment now follows the same rules as parsed values.
1 parent 12b6187 commit d14954f

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

flag_string_slice.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,10 @@ func (f *StringSliceFlag) Apply(set *flag.FlagSet) error {
157157

158158
if val, source, found := flagFromEnvOrFile(f.EnvVars, f.FilePath); found {
159159
for _, s := range f.separator.flagSplitMultiValues(val) {
160-
if err := setValue.Set(strings.TrimSpace(s)); err != nil {
160+
if !f.NoTrimSpace {
161+
s = strings.TrimSpace(s)
162+
}
163+
if err := setValue.Set(s); err != nil {
161164
return fmt.Errorf("could not parse %q as string value from %s for flag %s: %s", val, source, f.Name, err)
162165
}
163166
}

flag_test.go

+7
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@ func TestFlagsFromEnv(t *testing.T) {
144144
s.hasBeenSet = false
145145
return *s
146146
}
147+
newSetStringSliceNoTrimSpace := func(defaults ...string) StringSlice {
148+
s := newSetStringSlice(defaults...)
149+
s.noTrimSpace = true
150+
return s
151+
}
147152

148153
var flagTests = []struct {
149154
input string
@@ -198,6 +203,8 @@ func TestFlagsFromEnv(t *testing.T) {
198203
{"path", "path", &PathFlag{Name: "path", EnvVars: []string{"PATH"}}, ""},
199204

200205
{"foo,bar", newSetStringSlice("foo", "bar"), &StringSliceFlag{Name: "names", EnvVars: []string{"NAMES"}}, ""},
206+
{" space ", newSetStringSliceNoTrimSpace(" space "), &StringSliceFlag{Name: "names", NoTrimSpace: true, EnvVars: []string{"NAMES"}}, ""},
207+
{" no space ", newSetStringSlice("no space"), &StringSliceFlag{Name: "names", EnvVars: []string{"NAMES"}}, ""},
201208

202209
{"1", uint(1), &UintFlag{Name: "seconds", EnvVars: []string{"SECONDS"}}, ""},
203210
{"08", uint(8), &UintFlag{Name: "seconds", EnvVars: []string{"SECONDS"}, Base: 10}, ""},

0 commit comments

Comments
 (0)