modules: Add ignoreImports to module imports config

Fixes #7646
This commit is contained in:
Bjørn Erik Pedersen 2020-09-09 19:08:03 +02:00
parent 9a1e6d15a3
commit 20af9a0781
4 changed files with 70 additions and 25 deletions

View file

@ -39,11 +39,11 @@ import (
) )
// https://github.com/gohugoio/hugo/issues/6730 // https://github.com/gohugoio/hugo/issues/6730
func TestHugoModulesTargetInSubFolder(t *testing.T) { func TestHugoModulesVariants(t *testing.T) {
if !isCI() { if !isCI() {
// TODO(bep) investigate why this fails when running in LiteIDE (it works from the shell).
t.Skip("skip (relative) long running modules test when running locally") t.Skip("skip (relative) long running modules test when running locally")
} }
config := ` config := `
baseURL="https://example.org" baseURL="https://example.org"
workingDir = %q workingDir = %q
@ -51,45 +51,88 @@ workingDir = %q
[module] [module]
[[module.imports]] [[module.imports]]
path="github.com/gohugoio/hugoTestModule2" path="github.com/gohugoio/hugoTestModule2"
[[module.imports.mounts]] %s
source = "templates/hooks"
target = "layouts/_default/_markup"
` `
b := newTestSitesBuilder(t) createConfig := func(workingDir, moduleOpts string) string {
workingDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-modules-target-in-subfolder-test") return fmt.Sprintf(config, workingDir, moduleOpts)
b.Assert(err, qt.IsNil) }
defer clean()
b.Fs = hugofs.NewDefault(viper.New()) newTestBuilder := func(t testing.TB, moduleOpts string) (*sitesBuilder, func()) {
b.WithWorkingDir(workingDir).WithConfigFile("toml", fmt.Sprintf(config, workingDir)) b := newTestSitesBuilder(t)
b.WithTemplates("_default/single.html", `{{ .Content }}`) workingDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-modules-variants")
b.WithContent("p1.md", `--- b.Assert(err, qt.IsNil)
b.Fs = hugofs.NewDefault(viper.New())
b.WithWorkingDir(workingDir).WithConfigFile("toml", createConfig(workingDir, moduleOpts))
b.WithTemplates(
"index.html", `
Param from module: {{ site.Params.Hugo }}|
{{ $js := resources.Get "jslibs/alpinejs/alpine.js" }}
JS imported in module: {{ with $js }}{{ .RelPermalink }}{{ end }}|
`,
"_default/single.html", `{{ .Content }}`)
b.WithContent("p1.md", `---
title: "Page" title: "Page"
--- ---
[A link](https://bep.is) [A link](https://bep.is)
`) `)
b.WithSourceFile("go.mod", ` b.WithSourceFile("go.mod", `
module github.com/gohugoio/tests/testHugoModules module github.com/gohugoio/tests/testHugoModules
`) `)
b.WithSourceFile("go.sum", ` b.WithSourceFile("go.sum", `
github.com/gohugoio/hugoTestModule2 v0.0.0-20200131160637-9657d7697877 h1:WLM2bQCKIWo04T6NsIWsX/Vtirhf0TnpY66xyqGlgVY= github.com/gohugoio/hugoTestModule2 v0.0.0-20200131160637-9657d7697877 h1:WLM2bQCKIWo04T6NsIWsX/Vtirhf0TnpY66xyqGlgVY=
github.com/gohugoio/hugoTestModule2 v0.0.0-20200131160637-9657d7697877/go.mod h1:CBFZS3khIAXKxReMwq0le8sEl/D8hcXmixlOHVv+Gd0= github.com/gohugoio/hugoTestModule2 v0.0.0-20200131160637-9657d7697877/go.mod h1:CBFZS3khIAXKxReMwq0le8sEl/D8hcXmixlOHVv+Gd0=
`) `)
b.Build(BuildCfg{}) return b, clean
b.AssertFileContent("public/p1/index.html", `<p>Page|https://bep.is|Title: |Text: A link|END</p>`) }
t.Run("Target in subfolder", func(t *testing.T) {
b, clean := newTestBuilder(t, "ignoreImports=true")
defer clean()
b.Build(BuildCfg{})
b.AssertFileContent("public/p1/index.html", `<p>Page|https://bep.is|Title: |Text: A link|END</p>`)
})
t.Run("Ignore config", func(t *testing.T) {
b, clean := newTestBuilder(t, "ignoreConfig=true")
defer clean()
b.Build(BuildCfg{})
b.AssertFileContent("public/index.html", `
Param from module: |
JS imported in module: |
`)
})
t.Run("Ignore imports", func(t *testing.T) {
b, clean := newTestBuilder(t, "ignoreImports=true")
defer clean()
b.Build(BuildCfg{})
b.AssertFileContent("public/index.html", `
Param from module: Rocks|
JS imported in module: |
`)
})
} }
// TODO(bep) this fails when testmodBuilder is also building ... // TODO(bep) this fails when testmodBuilder is also building ...
func TestHugoModules(t *testing.T) { func TestHugoModulesMatrix(t *testing.T) {
if !isCI() { if !isCI() {
t.Skip("skip (relative) long running modules test when running locally") t.Skip("skip (relative) long running modules test when running locally")
} }

View file

@ -219,7 +219,7 @@ func (c *Client) Vendor() error {
// This is the project. // This is the project.
continue continue
} }
// We respect the --ignoreVendor flag even for the vendor command.
if !t.IsGoMod() && !t.Vendor() { if !t.IsGoMod() && !t.Vendor() {
// We currently do not vendor components living in the // We currently do not vendor components living in the
// theme directory, see https://github.com/gohugoio/hugo/issues/5993 // theme directory, see https://github.com/gohugoio/hugo/issues/5993

View file

@ -339,7 +339,7 @@ func (c *collector) addAndRecurse(owner *moduleAdapter, disabled bool) error {
if err != nil { if err != nil {
return err return err
} }
if tc == nil { if tc == nil || moduleImport.IgnoreImports {
continue continue
} }
if err := c.addAndRecurse(tc, disabled); err != nil { if err := c.addAndRecurse(tc, disabled); err != nil {

View file

@ -301,10 +301,12 @@ func (v HugoVersion) IsValid() bool {
} }
type Import struct { type Import struct {
Path string // Module path Path string // Module path
IgnoreConfig bool // Ignore any config.toml found. IgnoreConfig bool // Ignore any config in config.toml (will still folow imports).
Disable bool // Turn off this module. IgnoreImports bool // Do not follow any configured imports.
Mounts []Mount NoVendor bool // Never vendor this import (only allowed in main project).
Disable bool // Turn off this module.
Mounts []Mount
} }
type Mount struct { type Mount struct {