diff options
author | Bjørn Erik Pedersen <[email protected]> | 2023-08-23 12:39:24 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2023-08-23 18:05:18 +0200 |
commit | dcf425c846dcd6fbb0c05e87342077ab870eb7e1 (patch) | |
tree | 603f96feb9bb7a7503d86a4788dc5a6918ba4045 | |
parent | 9a8c84d6000fab3ec6847a330c45bfe24b76265d (diff) | |
download | hugo-dcf425c846dcd6fbb0c05e87342077ab870eb7e1.tar.gz hugo-dcf425c846dcd6fbb0c05e87342077ab870eb7e1.zip |
Fix it so disable a module does not disable transitive dependency required by others
The motivation behind the original implementation was probably to show disabled modules when running `hugo mod graph`.
Fixes #11376
-rw-r--r-- | config/allconfig/configlanguage.go | 2 | ||||
-rw-r--r-- | config/allconfig/load.go | 4 | ||||
-rw-r--r-- | hugolib/paths/paths.go | 2 | ||||
-rw-r--r-- | modules/client.go | 6 | ||||
-rw-r--r-- | modules/collect.go | 37 | ||||
-rw-r--r-- | modules/module.go | 8 | ||||
-rw-r--r-- | testscripts/commands/mod__disable.txt | 15 | ||||
-rw-r--r-- | testscripts/commands/mod_vendor.txt | 5 |
8 files changed, 37 insertions, 42 deletions
diff --git a/config/allconfig/configlanguage.go b/config/allconfig/configlanguage.go index 534276c25..27ba00d82 100644 --- a/config/allconfig/configlanguage.go +++ b/config/allconfig/configlanguage.go @@ -140,7 +140,7 @@ func (c ConfigLanguage) GetConfigSection(s string) any { return c.config.Permalinks case "minify": return c.config.Minify - case "activeModules": + case "allModules": return c.m.Modules case "deployment": return c.config.Deployment diff --git a/config/allconfig/load.go b/config/allconfig/load.go index b997c2896..3af6147da 100644 --- a/config/allconfig/load.go +++ b/config/allconfig/load.go @@ -84,7 +84,7 @@ func LoadConfig(d ConfigSourceDescriptor) (*Configs, error) { return nil, fmt.Errorf("failed to create config: %w", err) } - configs.Modules = moduleConfig.ActiveModules + configs.Modules = moduleConfig.AllModules configs.ModulesClient = modulesClient if err := configs.Init(); err != nil { @@ -471,7 +471,7 @@ func (l *configLoader) loadModules(configs *Configs) (modules.ModulesConfig, *mo ex := hexec.New(conf.Security) hook := func(m *modules.ModulesConfig) error { - for _, tc := range m.ActiveModules { + for _, tc := range m.AllModules { if len(tc.ConfigFilenames()) > 0 { if tc.Watch() { l.ModulesConfigFiles = append(l.ModulesConfigFiles, tc.ConfigFilenames()...) diff --git a/hugolib/paths/paths.go b/hugolib/paths/paths.go index 817670dbd..83d5921e0 100644 --- a/hugolib/paths/paths.go +++ b/hugolib/paths/paths.go @@ -83,7 +83,7 @@ func New(fs *hugofs.Fs, cfg config.AllProvider) (*Paths, error) { } func (p *Paths) AllModules() modules.Modules { - return p.Cfg.GetConfigSection("activeModules").(modules.Modules) + return p.Cfg.GetConfigSection("allModules").(modules.Modules) } // GetBasePath returns any path element in baseURL if needed. diff --git a/modules/client.go b/modules/client.go index 7108c9bef..b41ca142a 100644 --- a/modules/client.go +++ b/modules/client.go @@ -153,10 +153,6 @@ func (c *Client) Graph(w io.Writer) error { continue } - prefix := "" - if module.Disabled() { - prefix = "DISABLED " - } dep := pathVersion(module.Owner()) + " " + pathVersion(module) if replace := module.Replace(); replace != nil { if replace.Version() != "" { @@ -166,7 +162,7 @@ func (c *Client) Graph(w io.Writer) error { dep += " => " + replace.Dir() } } - fmt.Fprintln(w, prefix+dep) + fmt.Fprintln(w, dep) } return nil diff --git a/modules/collect.go b/modules/collect.go index e47563ab7..5b5418bcd 100644 --- a/modules/collect.go +++ b/modules/collect.go @@ -109,11 +109,8 @@ func (h *Client) collect(tidy bool) (ModulesConfig, *collector) { } type ModulesConfig struct { - // All modules, including any disabled. - AllModules Modules - // All active modules. - ActiveModules Modules + AllModules Modules // Set if this is a Go modules enabled project. GoModulesFilename string @@ -123,7 +120,7 @@ type ModulesConfig struct { } func (m ModulesConfig) HasConfigFile() bool { - for _, mod := range m.ActiveModules { + for _, mod := range m.AllModules { if len(mod.ConfigFilenames()) > 0 { return true } @@ -133,18 +130,12 @@ func (m ModulesConfig) HasConfigFile() bool { } func (m *ModulesConfig) setActiveMods(logger loggers.Logger) error { - var activeMods Modules for _, mod := range m.AllModules { if !mod.Config().HugoVersion.IsValid() { logger.Warnf(`Module %q is not compatible with this Hugo version; run "hugo mod graph" for more information.`, mod.Path()) } - if !mod.Disabled() { - activeMods = append(activeMods, mod) - } } - m.ActiveModules = activeMods - return nil } @@ -228,7 +219,7 @@ func (c *collector) getVendoredDir(path string) (vendoredModule, bool) { return v, found } -func (c *collector) add(owner *moduleAdapter, moduleImport Import, disabled bool) (*moduleAdapter, error) { +func (c *collector) add(owner *moduleAdapter, moduleImport Import) (*moduleAdapter, error) { var ( mod *goModule @@ -316,11 +307,10 @@ func (c *collector) add(owner *moduleAdapter, moduleImport Import, disabled bool } ma := &moduleAdapter{ - dir: moduleDir, - vendor: vendored, - disabled: disabled, - gomod: mod, - version: version, + dir: moduleDir, + vendor: vendored, + gomod: mod, + version: version, // This may be the owner of the _vendor dir owner: realOwner, } @@ -343,7 +333,7 @@ func (c *collector) add(owner *moduleAdapter, moduleImport Import, disabled bool return ma, nil } -func (c *collector) addAndRecurse(owner *moduleAdapter, disabled bool) error { +func (c *collector) addAndRecurse(owner *moduleAdapter) error { moduleConfig := owner.Config() if owner.projectMod { if err := c.applyMounts(Import{}, owner); err != nil { @@ -352,17 +342,18 @@ func (c *collector) addAndRecurse(owner *moduleAdapter, disabled bool) error { } for _, moduleImport := range moduleConfig.Imports { - disabled := disabled || moduleImport.Disable - + if moduleImport.Disable { + continue + } if !c.isSeen(moduleImport.Path) { - tc, err := c.add(owner, moduleImport, disabled) + tc, err := c.add(owner, moduleImport) if err != nil { return err } if tc == nil || moduleImport.IgnoreImports { continue } - if err := c.addAndRecurse(tc, disabled); err != nil { + if err := c.addAndRecurse(tc); err != nil { return err } } @@ -531,7 +522,7 @@ func (c *collector) collect() { projectMod := createProjectModule(c.gomods.GetMain(), c.ccfg.WorkingDir, c.moduleConfig) - if err := c.addAndRecurse(projectMod, false); err != nil { + if err := c.addAndRecurse(projectMod); err != nil { c.err = err return } diff --git a/modules/module.go b/modules/module.go index 42bd94e7b..da963de58 100644 --- a/modules/module.go +++ b/modules/module.go @@ -40,9 +40,6 @@ type Module interface { // Directory holding files for this module. Dir() string - // This module is disabled. - Disabled() bool - // Returns whether this is a Go Module. IsGoMod() bool @@ -81,7 +78,6 @@ type moduleAdapter struct { dir string version string vendor bool - disabled bool projectMod bool owner Module @@ -115,10 +111,6 @@ func (m *moduleAdapter) Dir() string { return m.gomod.Dir } -func (m *moduleAdapter) Disabled() bool { - return m.disabled -} - func (m *moduleAdapter) IsGoMod() bool { return m.gomod != nil } diff --git a/testscripts/commands/mod__disable.txt b/testscripts/commands/mod__disable.txt new file mode 100644 index 000000000..f2d65dd0c --- /dev/null +++ b/testscripts/commands/mod__disable.txt @@ -0,0 +1,15 @@ +hugo mod graph +stdout 'withhugotoml.*commonmod' + +-- hugo.toml -- +title = "Hugo Modules Test" +[module] +[[module.imports]] +path="github.com/gohugoio/hugo-mod-integrationtests/withconfigtoml" +disable = true +[[module.imports]] +path="github.com/gohugoio/hugo-mod-integrationtests/withhugotoml" +-- go.mod -- +module foo +go 1.19 + diff --git a/testscripts/commands/mod_vendor.txt b/testscripts/commands/mod_vendor.txt index 8a77776b3..5ca10aa75 100644 --- a/testscripts/commands/mod_vendor.txt +++ b/testscripts/commands/mod_vendor.txt @@ -20,5 +20,6 @@ go 1.19 module github.com/gohugoio/testmod -- golden/vendor.txt -- -# github.com/gohugoio/hugo-mod-integrationtests/withconfigtoml v1.0.0 -# github.com/gohugoio/hugo-mod-integrationtests/withhugotoml v1.0.0 +# github.com/gohugoio/hugo-mod-integrationtests/withconfigtoml v1.1.0 +# github.com/gohugoio/hugo-mod-integrationtests/commonmod v0.0.0-20230823103305-919cefe8a425 +# github.com/gohugoio/hugo-mod-integrationtests/withhugotoml v1.1.0 |