diff options
Diffstat (limited to 'commands/commandeer.go')
-rw-r--r-- | commands/commandeer.go | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/commands/commandeer.go b/commands/commandeer.go index b2a995ae6..349838a7e 100644 --- a/commands/commandeer.go +++ b/commands/commandeer.go @@ -61,6 +61,11 @@ type commandeer struct { logger loggers.Logger serverConfig *config.Server + // Loading state + mustHaveConfigFile bool + failOnInitErr bool + running bool + // Currently only set when in "fast render mode". But it seems to // be fast enough that we could maybe just add it for all server modes. changeDetector *fileChangeDetector @@ -153,7 +158,7 @@ func (c *commandeer) initFs(fs *hugofs.Fs) error { return nil } -func newCommandeer(mustHaveConfigFile, running bool, h *hugoBuilderCommon, f flagsToConfigHandler, cfgInit func(c *commandeer) error, subCmdVs ...*cobra.Command) (*commandeer, error) { +func newCommandeer(mustHaveConfigFile, failOnInitErr, running bool, h *hugoBuilderCommon, f flagsToConfigHandler, cfgInit func(c *commandeer) error, subCmdVs ...*cobra.Command) (*commandeer, error) { var rebuildDebouncer func(f func()) if running { // The time value used is tested with mass content replacements in a fairly big Hugo site. @@ -175,11 +180,17 @@ func newCommandeer(mustHaveConfigFile, running bool, h *hugoBuilderCommon, f fla visitedURLs: types.NewEvictingStringQueue(10), debounce: rebuildDebouncer, fullRebuildSem: semaphore.NewWeighted(1), + + // Init state + mustHaveConfigFile: mustHaveConfigFile, + failOnInitErr: failOnInitErr, + running: running, + // This will be replaced later, but we need something to log to before the configuration is read. logger: loggers.NewLogger(jww.LevelWarn, jww.LevelError, out, ioutil.Discard, running), } - return c, c.loadConfig(mustHaveConfigFile, running) + return c, c.loadConfig() } type fileChangeDetector struct { @@ -244,7 +255,7 @@ func (f *fileChangeDetector) PrepareNew() { f.current = make(map[string]string) } -func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error { +func (c *commandeer) loadConfig() error { if c.DepsCfg == nil { c.DepsCfg = &deps.DepsCfg{} } @@ -256,7 +267,7 @@ func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error { cfg := c.DepsCfg c.configured = false - cfg.Running = running + cfg.Running = c.running var dir string if c.h.source != "" { @@ -270,7 +281,7 @@ func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error { sourceFs = c.DepsCfg.Fs.Source } - environment := c.h.getEnvironment(running) + environment := c.h.getEnvironment(c.running) doWithConfig := func(cfg config.Provider) error { if c.ftch != nil { @@ -312,10 +323,10 @@ func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error { // We should improve the error handling here, // but with hugo mod init and similar there is a chicken and egg situation // with modules already configured in config.toml, so ignore those errors. - if mustHaveConfigFile || !moduleNotFoundRe.MatchString(err.Error()) { + if c.mustHaveConfigFile || !moduleNotFoundRe.MatchString(err.Error()) { return err } - } else if mustHaveConfigFile && len(configFiles) == 0 { + } else if c.mustHaveConfigFile && len(configFiles) == 0 { return hugolib.ErrNoConfigFile } @@ -327,7 +338,7 @@ func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error { } // Set some commonly used flags - c.doLiveReload = running && !c.Cfg.GetBool("disableLiveReload") + c.doLiveReload = c.running && !c.Cfg.GetBool("disableLiveReload") c.fastRenderMode = c.doLiveReload && !c.Cfg.GetBool("disableFastRender") c.showErrorInBrowser = c.doLiveReload && !c.Cfg.GetBool("disableBrowserError") @@ -339,7 +350,7 @@ func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error { } } - logger, err := c.createLogger(config, running) + logger, err := c.createLogger(config) if err != nil { return err } @@ -399,7 +410,11 @@ func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error { var h *hugolib.HugoSites - h, err = hugolib.NewHugoSites(*c.DepsCfg) + var createErr error + h, createErr = hugolib.NewHugoSites(*c.DepsCfg) + if h == nil || c.failOnInitErr { + err = createErr + } c.hugoSites = h close(c.created) }) |