summaryrefslogtreecommitdiffstats
path: root/hugolib/config.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-06-16 19:11:01 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-06-18 12:54:30 +0200
commitbb2aa08709c812a5be29922a1a7f4d814e200cab (patch)
treea709117fe1a882b0179e41db0d72b103f53a4f6a /hugolib/config.go
parent9096842b0494166e401cc08a70b93ae2ee19a198 (diff)
Implement configuration in a directory for modules
Fixes #8654
Diffstat (limited to 'hugolib/config.go')
-rw-r--r--hugolib/config.go115
1 files changed, 11 insertions, 104 deletions
diff --git a/hugolib/config.go b/hugolib/config.go
index 091827660..cad845199 100644
--- a/hugolib/config.go
+++ b/hugolib/config.go
@@ -79,10 +79,16 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid
}
if d.AbsConfigDir != "" {
- dirnames, err := l.loadConfigFromConfigDir()
+ dcfg, dirnames, err := config.LoadConfigFromDir(l.Fs, d.AbsConfigDir, l.Environment)
if err == nil {
- configFiles = append(configFiles, dirnames...)
+ if len(dirnames) > 0 {
+ l.cfg.Set("", dcfg.Get(""))
+ configFiles = append(configFiles, dirnames...)
+ }
} else if err != ErrNoConfigFile {
+ if len(dirnames) > 0 {
+ return nil, nil, l.wrapFileError(err, dirnames[0])
+ }
return nil, nil, err
}
}
@@ -381,9 +387,9 @@ func (l configLoader) collectModules(modConfig modules.Config, v1 config.Provide
hook := func(m *modules.ModulesConfig) error {
for _, tc := range m.ActiveModules {
- if tc.ConfigFilename() != "" {
+ if len(tc.ConfigFilenames()) > 0 {
if tc.Watch() {
- configFilenames = append(configFilenames, tc.ConfigFilename())
+ configFilenames = append(configFilenames, tc.ConfigFilenames()...)
}
// Merge from theme config into v1 based on configured
@@ -406,6 +412,7 @@ func (l configLoader) collectModules(modConfig modules.Config, v1 config.Provide
HookBeforeFinalize: hook,
WorkingDir: workingDir,
ThemesDir: themesDir,
+ Environment: l.Environment,
CacheDir: filecacheConfigs.CacheDirModules(),
ModuleConfig: modConfig,
IgnoreVendor: ignoreVendor,
@@ -468,106 +475,6 @@ func (l configLoader) loadConfig(configName string) (string, error) {
return filename, nil
}
-func (l configLoader) loadConfigFromConfigDir() ([]string, error) {
- sourceFs := l.Fs
- configDir := l.AbsConfigDir
-
- if _, err := sourceFs.Stat(configDir); err != nil {
- // Config dir does not exist.
- return nil, nil
- }
-
- defaultConfigDir := filepath.Join(configDir, "_default")
- environmentConfigDir := filepath.Join(configDir, l.Environment)
-
- var configDirs []string
- // Merge from least to most specific.
- for _, dir := range []string{defaultConfigDir, environmentConfigDir} {
- if _, err := sourceFs.Stat(dir); err == nil {
- configDirs = append(configDirs, dir)
- }
- }
-
- if len(configDirs) == 0 {
- return nil, nil
- }
-
- // Keep track of these so we can watch them for changes.
- var dirnames []string
-
- for _, configDir := range configDirs {
- err := afero.Walk(sourceFs, configDir, func(path string, fi os.FileInfo, err error) error {
- if fi == nil || err != nil {
- return nil
- }
-
- if fi.IsDir() {
- dirnames = append(dirnames, path)
- return nil
- }
-
- if !config.IsValidConfigFilename(path) {
- return nil
- }
-
- name := cpaths.Filename(filepath.Base(path))
-
- item, err := metadecoders.Default.UnmarshalFileToMap(sourceFs, path)
- if err != nil {
- return l.wrapFileError(err, path)
- }
-
- var keyPath []string
-
- if name != "config" {
- // Can be params.jp, menus.en etc.
- name, lang := cpaths.FileAndExtNoDelimiter(name)
-
- keyPath = []string{name}
-
- if lang != "" {
- keyPath = []string{"languages", lang}
- switch name {
- case "menu", "menus":
- keyPath = append(keyPath, "menus")
- case "params":
- keyPath = append(keyPath, "params")
- }
- }
- }
-
- root := item
- if len(keyPath) > 0 {
- root = make(map[string]interface{})
- m := root
- for i, key := range keyPath {
- if i >= len(keyPath)-1 {
- m[key] = item
- } else {
- nm := make(map[string]interface{})
- m[key] = nm
- m = nm
- }
- }
- }
-
- // Migrate menu => menus etc.
- config.RenameKeys(root)
-
- // Set will overwrite keys with the same name, recursively.
- l.cfg.Set("", root)
-
- return nil
- })
- if err != nil {
- return nil, err
- }
-
- }
-
- return dirnames, nil
-}
-
func (l configLoader) loadLanguageSettings(oldLangs langs.Languages) error {
_, err := langs.LoadLanguageSettings(l.cfg, oldLangs)
return err