ref: 3d1a6e109ce9b25fc2e9731098a82fb4c0abff68
parent: b6798ee8676c48f86b0bd8581ea244f4be4ef3fa
author: Bjørn Erik Pedersen <[email protected]>
date: Sun Mar 18 06:32:29 EDT 2018
hugolib: Add ConfigSourceDescriptor To prepare for config in themes See #4490
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -306,7 +306,7 @@
// Init file systems. This may be changed at a later point.
osFs := hugofs.Os
- config, err := hugolib.LoadConfig(osFs, source, cfgFile)
+ config, err := hugolib.LoadConfig(hugolib.ConfigSourceDescriptor{Fs: osFs, Src: source, Name: cfgFile})
if err != nil {
return nil, err
}
--- a/hugolib/case_insensitive_test.go
+++ b/hugolib/case_insensitive_test.go
@@ -149,7 +149,7 @@
caseMixingTestsWriteCommonSources(t, mm)
- cfg, err := LoadConfig(mm, "", "config.toml")
+ cfg, err := LoadConfig(ConfigSourceDescriptor{Fs: mm})
require.NoError(t, err)
fs := hugofs.NewFrom(mm, cfg)
@@ -260,7 +260,7 @@
caseMixingTestsWriteCommonSources(t, mm)
- cfg, err := LoadConfig(mm, "", "config.toml")
+ cfg, err := LoadConfigDefault(mm)
require.NoError(t, err)
fs := hugofs.NewFrom(mm, cfg)
--- a/hugolib/config.go
+++ b/hugolib/config.go
@@ -26,24 +26,43 @@
"github.com/spf13/viper"
)
+// ConfigSourceDescriptor describes where to find the config (e.g. config.toml etc.).
+type ConfigSourceDescriptor struct {
+ Fs afero.Fs
+ Src string
+ Name string
+}
+
+func (d ConfigSourceDescriptor) configFilenames() []string {
+ return strings.Split(d.Name, ",")
+}
+
+// LoadConfigDefault is a convenience method to load the default "config.toml" config.
+func LoadConfigDefault(fs afero.Fs) (*viper.Viper, error) {
+ return LoadConfig(ConfigSourceDescriptor{Fs: fs, Name: "config.toml"})
+}
+
// LoadConfig loads Hugo configuration into a new Viper and then adds
// a set of defaults.
-func LoadConfig(fs afero.Fs, relativeSourcePath, configFilename string) (*viper.Viper, error) {
+func LoadConfig(d ConfigSourceDescriptor) (*viper.Viper, error) {
+ fs := d.Fs
v := viper.New()
v.SetFs(fs)
- if relativeSourcePath == "" {
- relativeSourcePath = "."
+
+ if d.Name == "" {
+ d.Name = "config.toml"
}
- configFilenames := strings.Split(configFilename, ",")
+
+ if d.Src == "" {
+ d.Src = "."
+ }
+
+ configFilenames := d.configFilenames()
v.AutomaticEnv()
v.SetEnvPrefix("hugo")
v.SetConfigFile(configFilenames[0])
- // See https://github.com/spf13/viper/issues/73#issuecomment-126970794
- if relativeSourcePath == "" {
- v.AddConfigPath(".")
- } else {
- v.AddConfigPath(relativeSourcePath)
- }
+ v.AddConfigPath(d.Src)
+
err := v.ReadInConfig()
if err != nil {
if _, ok := err.(viper.ConfigParseError); ok {
@@ -62,8 +81,6 @@
}
}
- v.RegisterAlias("indexes", "taxonomies")
-
if err := loadDefaultSettingsFor(v); err != nil {
return v, err
}
@@ -190,6 +207,8 @@
if err != nil {
return err
}
+
+ v.RegisterAlias("indexes", "taxonomies")
v.SetDefault("cleanDestinationDir", false)
v.SetDefault("watch", false)
--- a/hugolib/config_test.go
+++ b/hugolib/config_test.go
@@ -34,7 +34,7 @@
writeToFs(t, mm, "hugo.toml", configContent)
- cfg, err := LoadConfig(mm, "", "hugo.toml")
+ cfg, err := LoadConfig(ConfigSourceDescriptor{Fs: mm, Name: "hugo.toml"})
require.NoError(t, err)
assert.Equal(t, "side", cfg.GetString("paginatePath"))
@@ -59,7 +59,7 @@
writeToFs(t, mm, "override.toml", configContentSub)
- cfg, err := LoadConfig(mm, "", "base.toml,override.toml")
+ cfg, err := LoadConfig(ConfigSourceDescriptor{Fs: mm, Name: "base.toml,override.toml"})
require.NoError(t, err)
assert.Equal(t, "top", cfg.GetString("paginatePath"))
--- a/hugolib/disableKinds_test.go
+++ b/hugolib/disableKinds_test.go
@@ -90,7 +90,7 @@
siteConfig := fmt.Sprintf(siteConfigTemplate, disabledStr)
writeToFs(t, mf, "config.toml", siteConfig)
- cfg, err := LoadConfig(mf, "", "config.toml")
+ cfg, err := LoadConfigDefault(mf)
require.NoError(t, err)
fs := hugofs.NewFrom(mf, cfg)
--- a/hugolib/testhelpers_test.go
+++ b/hugolib/testhelpers_test.go
@@ -229,7 +229,7 @@
s.writeFilePairs("i18n", s.i18nFilePairsAdded)
if s.Cfg == nil {
- cfg, err := LoadConfig(s.Fs.Source, "", "config."+s.configFormat)
+ cfg, err := LoadConfig(ConfigSourceDescriptor{Fs: s.Fs.Source, Name: "config." + s.configFormat})
if err != nil {
s.Fatalf("Failed to load config: %s", err)
}
@@ -460,7 +460,7 @@
writeToFs(t, afs, "config.toml", tomlConfig)
- cfg, err := LoadConfig(afs, "", "config.toml")
+ cfg, err := LoadConfigDefault(afs)
require.NoError(t, err)
fs := hugofs.NewFrom(afs, cfg)