diff --git a/hugolib/config.go b/hugolib/config.go index 65b269ab6..694f34615 100644 --- a/hugolib/config.go +++ b/hugolib/config.go @@ -78,10 +78,6 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid } } - if err := l.applyConfigDefaults(); err != nil { - return l.cfg, configFiles, err - } - if d.AbsConfigDir != "" { dcfg, dirnames, err := config.LoadConfigFromDir(l.Fs, d.AbsConfigDir, l.Environment) if err == nil { @@ -97,6 +93,10 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid } } + if err := l.applyConfigDefaults(); err != nil { + return l.cfg, configFiles, err + } + l.cfg.SetDefaultMergeStrategy() // We create languages based on the settings, so we need to make sure that diff --git a/hugolib/config_test.go b/hugolib/config_test.go index 6de274717..575931975 100644 --- a/hugolib/config_test.go +++ b/hugolib/config_test.go @@ -20,6 +20,8 @@ import ( "strings" "testing" + "github.com/gohugoio/hugo/config" + "github.com/gohugoio/hugo/media" "github.com/google/go-cmp/cmp" @@ -29,24 +31,49 @@ import ( ) func TestLoadConfig(t *testing.T) { - t.Parallel() c := qt.New(t) - // Add a random config variable for testing. - // side = page in Norwegian. - configContent := ` - PaginatePath = "side" - ` + loadConfig := func(c *qt.C, configContent string, fromDir bool) config.Provider { + mm := afero.NewMemMapFs() + filename := "config.toml" + descriptor := ConfigSourceDescriptor{Fs: mm} + if fromDir { + filename = filepath.Join("config", "_default", filename) + descriptor.AbsConfigDir = "config" + } + writeToFs(t, mm, filename, configContent) + cfg, _, err := LoadConfig(descriptor) + c.Assert(err, qt.IsNil) + return cfg + } - mm := afero.NewMemMapFs() + c.Run("Basic", func(c *qt.C) { + c.Parallel() + // Add a random config variable for testing. + // side = page in Norwegian. + cfg := loadConfig(c, `PaginatePath = "side"`, false) + c.Assert(cfg.GetString("paginatePath"), qt.Equals, "side") + }) - writeToFs(t, mm, "hugo.toml", configContent) + // Issue #8763 + for _, fromDir := range []bool{false, true} { + testName := "Taxonomy overrides" + if fromDir { + testName += " from dir" + } + c.Run(testName, func(c *qt.C) { + c.Parallel() + cfg := loadConfig(c, `[taxonomies] +appellation = "appellations" +vigneron = "vignerons"`, fromDir) - cfg, _, err := LoadConfig(ConfigSourceDescriptor{Fs: mm, Filename: "hugo.toml"}) - c.Assert(err, qt.IsNil) - - c.Assert(cfg.GetString("paginatePath"), qt.Equals, "side") + c.Assert(cfg.Get("taxonomies"), qt.DeepEquals, maps.Params{ + "appellation": "appellations", + "vigneron": "vignerons", + }) + }) + } } func TestLoadMultiConfig(t *testing.T) {