mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Add support for multiple config files via --config a.toml,b.toml,c.toml
This commit is contained in:
parent
c8257f8b72
commit
0f9f73cce5
2 changed files with 38 additions and 2 deletions
|
@ -19,6 +19,8 @@ import (
|
||||||
"github.com/gohugoio/hugo/helpers"
|
"github.com/gohugoio/hugo/helpers"
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
"io"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// LoadConfig loads Hugo configuration into a new Viper and then adds
|
// 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 == "" {
|
if relativeSourcePath == "" {
|
||||||
relativeSourcePath = "."
|
relativeSourcePath = "."
|
||||||
}
|
}
|
||||||
|
configFilenames := strings.Split(configFilename, ",")
|
||||||
v.AutomaticEnv()
|
v.AutomaticEnv()
|
||||||
v.SetEnvPrefix("hugo")
|
v.SetEnvPrefix("hugo")
|
||||||
v.SetConfigFile(configFilename)
|
v.SetConfigFile(configFilenames[0])
|
||||||
// See https://github.com/spf13/viper/issues/73#issuecomment-126970794
|
// See https://github.com/spf13/viper/issues/73#issuecomment-126970794
|
||||||
if relativeSourcePath == "" {
|
if relativeSourcePath == "" {
|
||||||
v.AddConfigPath(".")
|
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)
|
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")
|
v.RegisterAlias("indexes", "taxonomies")
|
||||||
|
|
||||||
|
|
|
@ -41,3 +41,27 @@ func TestLoadConfig(t *testing.T) {
|
||||||
// default
|
// default
|
||||||
assert.Equal(t, "layouts", cfg.GetString("layoutDir"))
|
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"))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue