Fail on invalid defaultContentLanguage - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 9cdca1f9582597c3998e44cd16509ead362a90df
 (DIR) parent 6462eecfbd7abc14fa62b33bb079ba424de7d765
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Tue, 30 May 2023 11:53:38 +0200
       
       Fail on invalid defaultContentLanguage
       
       Fixes #11044
       
       Diffstat:
         M config/allconfig/alldecoders.go     |      21 ++++++++++++++++++++-
         M hugolib/config_test.go              |      28 ++++++++++++++++++++++++++++
       
       2 files changed, 48 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/config/allconfig/alldecoders.go b/config/allconfig/alldecoders.go
       @@ -60,7 +60,14 @@ var allDecoderSetups = map[string]decodeWeight{
                        key:    "",
                        weight: -100, // Always first.
                        decode: func(d decodeWeight, p decodeConfig) error {
       -                        return mapstructure.WeakDecode(p.p.Get(""), &p.c.RootConfig)
       +                        if err := mapstructure.WeakDecode(p.p.Get(""), &p.c.RootConfig); err != nil {
       +                                return err
       +                        }
       +
       +                        // This need to match with Lang which is always lower case.
       +                        p.c.RootConfig.DefaultContentLanguage = strings.ToLower(p.c.RootConfig.DefaultContentLanguage)
       +
       +                        return nil
                        },
                },
                "imaging": {
       @@ -263,6 +270,18 @@ var allDecoderSetups = map[string]decodeWeight{
                                        return err
                                }
        
       +                        // Validate defaultContentLanguage.
       +                        var found bool
       +                        for lang := range p.c.Languages {
       +                                if lang == p.c.DefaultContentLanguage {
       +                                        found = true
       +                                        break
       +                                }
       +                        }
       +                        if !found {
       +                                return fmt.Errorf("config value %q for defaultContentLanguage does not match any language definition", p.c.DefaultContentLanguage)
       +                        }
       +
                                return nil
                        },
                },
 (DIR) diff --git a/hugolib/config_test.go b/hugolib/config_test.go
       @@ -1122,4 +1122,32 @@ Foo: {{ site.Params.foo }}|
                        b.Assert(err.Error(), qt.Contains, "no languages")
                })
        
       +        // Issue 11044
       +        t.Run("invalid defaultContentLanguage", func(t *testing.T) {
       +
       +                files := `
       +-- hugo.toml --
       +baseURL = "https://example.org"
       +defaultContentLanguage = "sv"
       +
       +[languages]
       +[languages.en]
       +languageCode = "en"
       +languageName = "English"
       +weight = 1
       +
       +        
       +                
       +        `
       +                b, err := NewIntegrationTestBuilder(
       +                        IntegrationTestConfig{
       +                                T:           t,
       +                                TxtarString: files,
       +                        },
       +                ).BuildE()
       +
       +                b.Assert(err, qt.IsNotNil)
       +                b.Assert(err.Error(), qt.Contains, "defaultContentLanguage does not match any language definition")
       +        })
       +
        }