Skip to content

Commit bc98e7a

Browse files
committed
config: Fix env override of slices
Fixes #13707
1 parent c745a3e commit bc98e7a

File tree

2 files changed

+55
-22
lines changed

2 files changed

+55
-22
lines changed

‎config/allconfig/allconfig_integration_test.go‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,3 +357,25 @@ All.
357357

358358
b.Assert(b.H.Conf.DefaultContentLanguage(), qt.Equals, "sv")
359359
}
360+
361+
func TestDefaultConfigEnvDisableLanguagesIssue13707(t *testing.T) {
362+
t.Parallel()
363+
364+
files := `
365+
-- hugo.toml --
366+
disableLanguages = []
367+
[languages]
368+
[languages.en]
369+
weight = 1
370+
[languages.nn]
371+
weight = 2
372+
[languages.sv]
373+
weight = 3
374+
`
375+
376+
b := hugolib.Test(t, files, hugolib.TestOptWithConfig(func(conf *hugolib.IntegrationTestConfig) {
377+
conf.Environ = []string{`HUGO_DISABLELANGUAGES=sv nn`}
378+
}))
379+
380+
b.Assert(len(b.H.Sites), qt.Equals, 1)
381+
}

‎config/allconfig/load.go‎

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -233,40 +233,51 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error {
233233

234234
if existing != nil {
235235
val, err := metadecoders.Default.UnmarshalStringTo(env.Value, existing)
236-
if err != nil {
236+
if err == nil {
237+
val = l.envValToVal(env.Key, val)
238+
if owner != nil {
239+
owner[nestedKey] = val
240+
} else {
241+
l.cfg.Set(env.Key, val)
242+
}
237243
continue
238244
}
245+
}
239246

240-
if owner != nil {
241-
owner[nestedKey] = val
242-
} else {
243-
l.cfg.Set(env.Key, val)
244-
}
247+
if owner != nil && nestedKey != "" {
248+
owner[nestedKey] = env.Value
245249
} else {
246-
if nestedKey != "" {
247-
owner[nestedKey] = env.Value
248-
} else {
249-
var val any
250-
key := strings.ReplaceAll(env.Key, delim, ".")
251-
_, ok := allDecoderSetups[key]
252-
if ok {
253-
// A map.
254-
if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]any{}); err == nil {
255-
val = v
256-
}
250+
var val any
251+
key := strings.ReplaceAll(env.Key, delim, ".")
252+
_, ok := allDecoderSetups[key]
253+
if ok {
254+
// A map.
255+
if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]any{}); err == nil {
256+
val = v
257257
}
258-
if val == nil {
259-
// A string.
260-
val = l.envStringToVal(key, env.Value)
261-
}
262-
l.cfg.Set(key, val)
263258
}
259+
260+
if val == nil {
261+
// A string.
262+
val = l.envStringToVal(key, env.Value)
263+
}
264+
l.cfg.Set(key, val)
264265
}
266+
265267
}
266268

267269
return nil
268270
}
269271

272+
func (l *configLoader) envValToVal(k string, v any) any {
273+
switch v := v.(type) {
274+
case string:
275+
return l.envStringToVal(k, v)
276+
default:
277+
return v
278+
}
279+
}
280+
270281
func (l *configLoader) envStringToVal(k, v string) any {
271282
switch k {
272283
case "disablekinds", "disablelanguages":

0 commit comments

Comments
 (0)