summaryrefslogtreecommitdiffstats
path: root/hugolib/config.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-07-31 08:21:17 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-07-31 12:10:05 +0200
commit4b6c5eba306e6e69f3dd07a6c102bfc8040b38c9 (patch)
treecf12d586dc4fc0937900b96b81e10a852eeeba6f /hugolib/config.go
parentedf9f0a354e5eaa556f8faed70b5243b7273b35c (diff)
Move the mount duplicate filter to the modules package
Also simplify the mount validation logic. There are plenty of ways a user can create mount configs that behaves oddly.
Diffstat (limited to 'hugolib/config.go')
-rw-r--r--hugolib/config.go80
1 files changed, 48 insertions, 32 deletions
diff --git a/hugolib/config.go b/hugolib/config.go
index b7ac46171..07a8d4100 100644
--- a/hugolib/config.go
+++ b/hugolib/config.go
@@ -207,17 +207,25 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid
return v, configFiles, err
}
- mods, modulesConfigFiles, err := l.collectModules(modulesConfig, v)
- if err != nil {
- return v, configFiles, err
- }
+ // Need to run these after the modules are loaded, but before
+ // they are finalized.
+ collectHook := func(m *modules.ModulesConfig) error {
+ if err := loadLanguageSettings(v, nil); err != nil {
+ return err
+ }
- if err := loadLanguageSettings(v, nil); err != nil {
- return v, configFiles, err
+ mods := m.ActiveModules
+
+ // Apply default project mounts.
+ if err := modules.ApplyProjectConfigDefaults(v, mods[len(mods)-1]); err != nil {
+ return err
+ }
+
+ return nil
}
- // Apply default project mounts.
- if err := modules.ApplyProjectConfigDefaults(v, mods[len(mods)-1]); err != nil {
+ _, modulesConfigFiles, err := l.collectModules(modulesConfig, v, collectHook)
+ if err != nil {
return v, configFiles, err
}
@@ -406,7 +414,7 @@ func (l configLoader) loadModulesConfig(v1 *viper.Viper) (modules.Config, error)
return modConfig, nil
}
-func (l configLoader) collectModules(modConfig modules.Config, v1 *viper.Viper) (modules.Modules, []string, error) {
+func (l configLoader) collectModules(modConfig modules.Config, v1 *viper.Viper, hookBeforeFinalize func(m *modules.ModulesConfig) error) (modules.Modules, []string, error) {
workingDir := l.WorkingDir
if workingDir == "" {
workingDir = v1.GetString("workingDir")
@@ -420,16 +428,40 @@ func (l configLoader) collectModules(modConfig modules.Config, v1 *viper.Viper)
if err != nil {
return nil, nil, err
}
+
v1.Set("filecacheConfigs", filecacheConfigs)
+ var configFilenames []string
+
+ hook := func(m *modules.ModulesConfig) error {
+ for _, tc := range m.ActiveModules {
+ if tc.ConfigFilename() != "" {
+ if tc.Watch() {
+ configFilenames = append(configFilenames, tc.ConfigFilename())
+ }
+ if err := l.applyThemeConfig(v1, tc); err != nil {
+ return err
+ }
+ }
+ }
+
+ if hookBeforeFinalize != nil {
+ return hookBeforeFinalize(m)
+ }
+
+ return nil
+
+ }
+
modulesClient := modules.NewClient(modules.ClientConfig{
- Fs: l.Fs,
- Logger: l.Logger,
- WorkingDir: workingDir,
- ThemesDir: themesDir,
- CacheDir: filecacheConfigs.CacheDirModules(),
- ModuleConfig: modConfig,
- IgnoreVendor: ignoreVendor,
+ Fs: l.Fs,
+ Logger: l.Logger,
+ HookBeforeFinalize: hook,
+ WorkingDir: workingDir,
+ ThemesDir: themesDir,
+ CacheDir: filecacheConfigs.CacheDirModules(),
+ ModuleConfig: modConfig,
+ IgnoreVendor: ignoreVendor,
})
v1.Set("modulesClient", modulesClient)
@@ -442,22 +474,6 @@ func (l configLoader) collectModules(modConfig modules.Config, v1 *viper.Viper)
// Avoid recreating these later.
v1.Set("allModules", moduleConfig.ActiveModules)
- if len(moduleConfig.ActiveModules) == 0 {
- return nil, nil, nil
- }
-
- var configFilenames []string
- for _, tc := range moduleConfig.ActiveModules {
- if tc.ConfigFilename() != "" {
- if tc.Watch() {
- configFilenames = append(configFilenames, tc.ConfigFilename())
- }
- if err := l.applyThemeConfig(v1, tc); err != nil {
- return nil, nil, err
- }
- }
- }
-
if moduleConfig.GoModulesFilename != "" {
// We want to watch this for changes and trigger rebuild on version
// changes etc.