diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-09-19 10:53:39 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-09-19 12:26:04 +0200 |
commit | e363964f2fcbeabe4264eaa9d7f803c9989ad096 (patch) | |
tree | 1218d3e5f33015b5d671482fdd3a27c9c76c92fa /commands | |
parent | c260cb28a9fe3d391530ecd9011ce6ed927f57f8 (diff) | |
download | hugo-e363964f2fcbeabe4264eaa9d7f803c9989ad096.tar.gz hugo-e363964f2fcbeabe4264eaa9d7f803c9989ad096.zip |
commands: Ignore "module does not exist" errors in hugo mod init
Closes #11458
Diffstat (limited to 'commands')
-rw-r--r-- | commands/commandeer.go | 59 | ||||
-rw-r--r-- | commands/config.go | 4 | ||||
-rw-r--r-- | commands/hugobuilder.go | 4 | ||||
-rw-r--r-- | commands/mod.go | 18 | ||||
-rw-r--r-- | commands/new.go | 4 |
5 files changed, 53 insertions, 36 deletions
diff --git a/commands/commandeer.go b/commands/commandeer.go index f18a95bb9..e8cde2114 100644 --- a/commands/commandeer.go +++ b/commands/commandeer.go @@ -88,6 +88,11 @@ type commonConfig struct { fs *hugofs.Fs } +type configKey struct { + counter int32 + ignoreModulesDoesNotExists bool +} + // This is the root command. type rootCommand struct { Printf func(format string, v ...interface{}) @@ -101,8 +106,8 @@ type rootCommand struct { // Some, but not all commands need access to these. // Some needs more than one, so keep them in a small cache. - commonConfigs *lazycache.Cache[int32, *commonConfig] - hugoSites *lazycache.Cache[int32, *hugolib.HugoSites] + commonConfigs *lazycache.Cache[configKey, *commonConfig] + hugoSites *lazycache.Cache[configKey, *hugolib.HugoSites] // changesFromBuild received from Hugo in watch mode. changesFromBuild chan []identity.Identity @@ -160,17 +165,18 @@ func (r *rootCommand) Commands() []simplecobra.Commander { return r.commands } -func (r *rootCommand) ConfigFromConfig(key int32, oldConf *commonConfig) (*commonConfig, error) { - cc, _, err := r.commonConfigs.GetOrCreate(key, func(key int32) (*commonConfig, error) { +func (r *rootCommand) ConfigFromConfig(key configKey, oldConf *commonConfig) (*commonConfig, error) { + cc, _, err := r.commonConfigs.GetOrCreate(key, func(key configKey) (*commonConfig, error) { fs := oldConf.fs configs, err := allconfig.LoadConfig( allconfig.ConfigSourceDescriptor{ - Flags: oldConf.cfg, - Fs: fs.Source, - Filename: r.cfgFile, - ConfigDir: r.cfgDir, - Logger: r.logger, - Environment: r.environment, + Flags: oldConf.cfg, + Fs: fs.Source, + Filename: r.cfgFile, + ConfigDir: r.cfgDir, + Logger: r.logger, + Environment: r.environment, + IgnoreModuleDoesNotExist: key.ignoreModulesDoesNotExists, }, ) if err != nil { @@ -193,11 +199,11 @@ func (r *rootCommand) ConfigFromConfig(key int32, oldConf *commonConfig) (*commo return cc, err } -func (r *rootCommand) ConfigFromProvider(key int32, cfg config.Provider) (*commonConfig, error) { +func (r *rootCommand) ConfigFromProvider(key configKey, cfg config.Provider) (*commonConfig, error) { if cfg == nil { panic("cfg must be set") } - cc, _, err := r.commonConfigs.GetOrCreate(key, func(key int32) (*commonConfig, error) { + cc, _, err := r.commonConfigs.GetOrCreate(key, func(key configKey) (*commonConfig, error) { var dir string if r.source != "" { dir, _ = filepath.Abs(r.source) @@ -220,12 +226,13 @@ func (r *rootCommand) ConfigFromProvider(key int32, cfg config.Provider) (*commo // Load the config first to allow publishDir to be configured in config file. configs, err := allconfig.LoadConfig( allconfig.ConfigSourceDescriptor{ - Flags: cfg, - Fs: hugofs.Os, - Filename: r.cfgFile, - ConfigDir: r.cfgDir, - Environment: r.environment, - Logger: r.logger, + Flags: cfg, + Fs: hugofs.Os, + Filename: r.cfgFile, + ConfigDir: r.cfgDir, + Environment: r.environment, + Logger: r.logger, + IgnoreModuleDoesNotExist: key.ignoreModulesDoesNotExists, }, ) if err != nil { @@ -307,7 +314,8 @@ func (r *rootCommand) ConfigFromProvider(key int32, cfg config.Provider) (*commo } func (r *rootCommand) HugFromConfig(conf *commonConfig) (*hugolib.HugoSites, error) { - h, _, err := r.hugoSites.GetOrCreate(r.configVersionID.Load(), func(key int32) (*hugolib.HugoSites, error) { + k := configKey{counter: r.configVersionID.Load()} + h, _, err := r.hugoSites.GetOrCreate(k, func(key configKey) (*hugolib.HugoSites, error) { depsCfg := r.newDepsConfig(conf) return hugolib.NewHugoSites(depsCfg) }) @@ -315,7 +323,12 @@ func (r *rootCommand) HugFromConfig(conf *commonConfig) (*hugolib.HugoSites, err } func (r *rootCommand) Hugo(cfg config.Provider) (*hugolib.HugoSites, error) { - h, _, err := r.hugoSites.GetOrCreate(r.configVersionID.Load(), func(key int32) (*hugolib.HugoSites, error) { + return r.getOrCreateHugo(cfg, false) +} + +func (r *rootCommand) getOrCreateHugo(cfg config.Provider, ignoreModuleDoesNotExist bool) (*hugolib.HugoSites, error) { + k := configKey{counter: r.configVersionID.Load(), ignoreModulesDoesNotExists: ignoreModuleDoesNotExist} + h, _, err := r.hugoSites.GetOrCreate(k, func(key configKey) (*hugolib.HugoSites, error) { conf, err := r.ConfigFromProvider(key, cfg) if err != nil { return nil, err @@ -418,11 +431,11 @@ func (r *rootCommand) PreRun(cd, runner *simplecobra.Commandeer) error { r.changesFromBuild = make(chan []identity.Identity, 10) - r.commonConfigs = lazycache.New(lazycache.Options[int32, *commonConfig]{MaxEntries: 5}) + r.commonConfigs = lazycache.New(lazycache.Options[configKey, *commonConfig]{MaxEntries: 5}) // We don't want to keep stale HugoSites in memory longer than needed. - r.hugoSites = lazycache.New(lazycache.Options[int32, *hugolib.HugoSites]{ + r.hugoSites = lazycache.New(lazycache.Options[configKey, *hugolib.HugoSites]{ MaxEntries: 1, - OnEvict: func(key int32, value *hugolib.HugoSites) { + OnEvict: func(key configKey, value *hugolib.HugoSites) { value.Close() runtime.GC() }, diff --git a/commands/config.go b/commands/config.go index adf6bbe2b..c3d08ae22 100644 --- a/commands/config.go +++ b/commands/config.go @@ -58,7 +58,7 @@ func (c *configCommand) Name() string { } func (c *configCommand) Run(ctx context.Context, cd *simplecobra.Commandeer, args []string) error { - conf, err := c.r.ConfigFromProvider(c.r.configVersionID.Load(), flagsToCfg(cd, nil)) + conf, err := c.r.ConfigFromProvider(configKey{counter: c.r.configVersionID.Load()}, flagsToCfg(cd, nil)) if err != nil { return err } @@ -209,7 +209,7 @@ func (c *configMountsCommand) Name() string { func (c *configMountsCommand) Run(ctx context.Context, cd *simplecobra.Commandeer, args []string) error { r := c.configCmd.r - conf, err := r.ConfigFromProvider(r.configVersionID.Load(), flagsToCfg(cd, nil)) + conf, err := r.ConfigFromProvider(configKey{counter: c.r.configVersionID.Load()}, flagsToCfg(cd, nil)) if err != nil { return err } diff --git a/commands/hugobuilder.go b/commands/hugobuilder.go index d15d47326..42bf68a37 100644 --- a/commands/hugobuilder.go +++ b/commands/hugobuilder.go @@ -1047,7 +1047,7 @@ func (c *hugoBuilder) loadConfig(cd *simplecobra.Commandeer, running bool) error "fastRenderMode": c.fastRenderMode, }) - conf, err := c.r.ConfigFromProvider(c.r.configVersionID.Load(), flagsToCfg(cd, cfg)) + conf, err := c.r.ConfigFromProvider(configKey{counter: c.r.configVersionID.Load()}, flagsToCfg(cd, cfg)) if err != nil { return err } @@ -1116,7 +1116,7 @@ func (c *hugoBuilder) reloadConfig() error { if err := c.withConfE(func(conf *commonConfig) error { oldConf := conf - newConf, err := c.r.ConfigFromConfig(c.r.configVersionID.Load(), conf) + newConf, err := c.r.ConfigFromConfig(configKey{counter: c.r.configVersionID.Load()}, conf) if err != nil { return err } diff --git a/commands/mod.go b/commands/mod.go index 0fa83e5c0..a9c8c459d 100644 --- a/commands/mod.go +++ b/commands/mod.go @@ -94,7 +94,7 @@ so this may/will change in future versions of Hugo. applyLocalFlagsBuildConfig(cmd, r) }, run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { - h, err := r.Hugo(flagsToCfg(cd, nil)) + h, err := r.getOrCreateHugo(flagsToCfg(cd, nil), true) if err != nil { return err } @@ -102,7 +102,11 @@ so this may/will change in future versions of Hugo. if len(args) >= 1 { initPath = args[0] } - return h.Configs.ModulesClient.Init(initPath) + c := h.Configs.ModulesClient + if err := c.Init(initPath); err != nil { + return err + } + return nil }, }, &simpleCommand{ @@ -115,7 +119,7 @@ so this may/will change in future versions of Hugo. cmd.Flags().BoolVarP(&clean, "clean", "", false, "delete module cache for dependencies that fail verification") }, run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { - conf, err := r.ConfigFromProvider(r.configVersionID.Load(), flagsToCfg(cd, nil)) + conf, err := r.ConfigFromProvider(configKey{counter: r.configVersionID.Load()}, flagsToCfg(cd, nil)) if err != nil { return err } @@ -135,7 +139,7 @@ Note that for vendored modules, that is the version listed and not the one from cmd.Flags().BoolVarP(&clean, "clean", "", false, "delete module cache for dependencies that fail verification") }, run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { - conf, err := r.ConfigFromProvider(r.configVersionID.Load(), flagsToCfg(cd, nil)) + conf, err := r.ConfigFromProvider(configKey{counter: r.configVersionID.Load()}, flagsToCfg(cd, nil)) if err != nil { return err } @@ -271,7 +275,7 @@ Run "go help get" for more information. All flags available for "go get" is also cfg := config.New() cfg.Set("workingDir", dir) - conf, err := r.ConfigFromProvider(r.configVersionID.Add(1), flagsToCfg(cd, cfg)) + conf, err := r.ConfigFromProvider(configKey{counter: r.configVersionID.Add(1)}, flagsToCfg(cd, cfg)) if err != nil { return err } @@ -284,7 +288,7 @@ Run "go help get" for more information. All flags available for "go get" is also }) return nil } else { - conf, err := r.ConfigFromProvider(r.configVersionID.Load(), flagsToCfg(cd, nil)) + conf, err := r.ConfigFromProvider(configKey{counter: r.configVersionID.Load()}, flagsToCfg(cd, nil)) if err != nil { return err } @@ -313,7 +317,7 @@ func (c *modCommands) Name() string { } func (c *modCommands) Run(ctx context.Context, cd *simplecobra.Commandeer, args []string) error { - _, err := c.r.ConfigFromProvider(c.r.configVersionID.Load(), nil) + _, err := c.r.ConfigFromProvider(configKey{counter: c.r.configVersionID.Load()}, nil) if err != nil { return err } diff --git a/commands/new.go b/commands/new.go index 4bad0059f..f6bb09e00 100644 --- a/commands/new.go +++ b/commands/new.go @@ -93,7 +93,7 @@ Use ` + "`hugo new [contentPath]`" + ` to create new content.`, cfg.Set("workingDir", createpath) cfg.Set("publishDir", "public") - conf, err := r.ConfigFromProvider(r.configVersionID.Load(), flagsToCfg(cd, cfg)) + conf, err := r.ConfigFromProvider(configKey{counter: r.configVersionID.Load()}, flagsToCfg(cd, cfg)) if err != nil { return err } @@ -136,7 +136,7 @@ according to your needs.`, cfg := config.New() cfg.Set("publishDir", "public") - conf, err := r.ConfigFromProvider(r.configVersionID.Load(), flagsToCfg(cd, cfg)) + conf, err := r.ConfigFromProvider(configKey{counter: r.configVersionID.Load()}, flagsToCfg(cd, cfg)) if err != nil { return err } |