Skip to content

Commit

Permalink
Fix it so disable a module does not disable transitive dependency req…
Browse files Browse the repository at this point in the history
…uired by others

The motivation behind the original implementation was probably to show disabled modules when running `hugo mod graph`.

Fixes gohugoio#11376
  • Loading branch information
bep committed Aug 23, 2023
1 parent cdf0b3b commit 782fd18
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 42 deletions.
2 changes: 1 addition & 1 deletion config/allconfig/configlanguage.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions config/allconfig/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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()...)
Expand Down
2 changes: 1 addition & 1 deletion hugolib/paths/paths.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 1 addition & 5 deletions modules/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() != "" {
Expand All @@ -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
Expand Down
37 changes: 14 additions & 23 deletions modules/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}
Expand All @@ -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
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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,
}
Expand All @@ -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 {
Expand All @@ -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
}
}
Expand Down Expand Up @@ -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
}
Expand Down
8 changes: 0 additions & 8 deletions modules/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -81,7 +78,6 @@ type moduleAdapter struct {
dir string
version string
vendor bool
disabled bool
projectMod bool
owner Module

Expand Down Expand Up @@ -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
}
Expand Down
15 changes: 15 additions & 0 deletions testscripts/commands/mod__disable.txt
Original file line number Diff line number Diff line change
@@ -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

5 changes: 3 additions & 2 deletions testscripts/commands/mod_vendor.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 782fd18

Please sign in to comment.