summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authorJohan Gielstra <jgielstra@users.noreply.github.com>2017-08-09 13:13:02 -0500
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-08-09 20:13:02 +0200
commit0f9f73cce5c3f1f05be20bcf1d23b2332623d7f9 (patch)
treed269c649a44e3e6b801d4fb80c1345493ff2af99 /hugolib
parentc8257f8b726478ca70dc8984cdcc17b31e4bdc0c (diff)
Add support for multiple config files via --config a.toml,b.toml,c.toml
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/config.go16
-rw-r--r--hugolib/config_test.go24
2 files changed, 38 insertions, 2 deletions
diff --git a/hugolib/config.go b/hugolib/config.go
index 8f3625331..dcc56486a 100644
--- a/hugolib/config.go
+++ b/hugolib/config.go
@@ -19,6 +19,8 @@ import (
"github.com/gohugoio/hugo/helpers"
"github.com/spf13/afero"
"github.com/spf13/viper"
+ "io"
+ "strings"
)
// LoadConfig loads Hugo configuration into a new Viper and then adds
@@ -29,10 +31,10 @@ func LoadConfig(fs afero.Fs, relativeSourcePath, configFilename string) (*viper.
if relativeSourcePath == "" {
relativeSourcePath = "."
}
-
+ configFilenames := strings.Split(configFilename, ",")
v.AutomaticEnv()
v.SetEnvPrefix("hugo")
- v.SetConfigFile(configFilename)
+ v.SetConfigFile(configFilenames[0])
// See https://github.com/spf13/viper/issues/73#issuecomment-126970794
if relativeSourcePath == "" {
v.AddConfigPath(".")
@@ -46,6 +48,16 @@ func LoadConfig(fs afero.Fs, relativeSourcePath, configFilename string) (*viper.
}
return nil, fmt.Errorf("Unable to locate Config file. Perhaps you need to create a new site.\n Run `hugo help new` for details. (%s)\n", err)
}
+ for _, configFile := range configFilenames[1:] {
+ var r io.Reader
+ var err error
+ if r, err = fs.Open(configFile); err != nil {
+ return nil, fmt.Errorf("Unable to open Config file.\n (%s)\n", err)
+ }
+ if err = v.MergeConfig(r); err != nil {
+ return nil, fmt.Errorf("Unable to parse/merge Config file (%s).\n (%s)\n", configFile, err)
+ }
+ }
v.RegisterAlias("indexes", "taxonomies")
diff --git a/hugolib/config_test.go b/hugolib/config_test.go
index 780e5c33d..874416b9d 100644
--- a/hugolib/config_test.go
+++ b/hugolib/config_test.go
@@ -41,3 +41,27 @@ func TestLoadConfig(t *testing.T) {
// default
assert.Equal(t, "layouts", cfg.GetString("layoutDir"))
}
+func TestLoadMultiConfig(t *testing.T) {
+ t.Parallel()
+
+ // Add a random config variable for testing.
+ // side = page in Norwegian.
+ configContentBase := `
+ DontChange = "same"
+ PaginatePath = "side"
+ `
+ configContentSub := `
+ PaginatePath = "top"
+ `
+ mm := afero.NewMemMapFs()
+
+ writeToFs(t, mm, "base.toml", configContentBase)
+
+ writeToFs(t, mm, "override.toml", configContentSub)
+
+ cfg, err := LoadConfig(mm, "", "base.toml,override.toml")
+ require.NoError(t, err)
+
+ assert.Equal(t, "top", cfg.GetString("paginatePath"))
+ assert.Equal(t, "same", cfg.GetString("DontChange"))
+}