summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-07-16 10:42:13 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-07-16 18:08:23 +0200
commitc406fd3a0e0efa17f69095ca6317ba1036fc8964 (patch)
tree1041f90b035a4918dec3d458eb551dcb93990694 /config
parent286821e360e13b3a174854914c9cedd437bdd25e (diff)
Fix setting config from env with complex (e.g. YAML) strings
So you can do ``` HUGO_OUTPUTS="home: [rss]" hugo ``` And similar. Fixes #11249
Diffstat (limited to 'config')
-rw-r--r--config/allconfig/alldecoders.go2
-rw-r--r--config/allconfig/load.go16
2 files changed, 13 insertions, 5 deletions
diff --git a/config/allconfig/alldecoders.go b/config/allconfig/alldecoders.go
index a40a02372..6b8a4568c 100644
--- a/config/allconfig/alldecoders.go
+++ b/config/allconfig/alldecoders.go
@@ -150,7 +150,7 @@ var allDecoderSetups = map[string]decodeWeight{
key: "outputs",
decode: func(d decodeWeight, p decodeConfig) error {
defaults := createDefaultOutputFormats(p.c.OutputFormats.Config)
- m := p.p.GetStringMap("outputs")
+ m := maps.CleanConfigStringMap(p.p.GetStringMap("outputs"))
p.c.Outputs = make(map[string][]string)
for k, v := range m {
s := types.ToStringSlicePreserveString(v)
diff --git a/config/allconfig/load.go b/config/allconfig/load.go
index b9bb38aaf..8551039a0 100644
--- a/config/allconfig/load.go
+++ b/config/allconfig/load.go
@@ -293,11 +293,19 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error {
} else {
l.cfg.Set(env.Key, val)
}
- } else if nestedKey != "" {
- owner[nestedKey] = env.Value
} else {
- // The container does not exist yet.
- l.cfg.Set(strings.ReplaceAll(env.Key, delim, "."), env.Value)
+ if nestedKey != "" {
+ owner[nestedKey] = env.Value
+ } else {
+ var val any = env.Value
+ if _, ok := allDecoderSetups[env.Key]; ok {
+ // A map.
+ val, err = metadecoders.Default.UnmarshalStringTo(env.Value, map[string]interface{}{})
+ }
+ if err == nil {
+ l.cfg.Set(strings.ReplaceAll(env.Key, delim, "."), val)
+ }
+ }
}
}