modules: Make the module.workspace=off as default (note)

Also, resolve any workspace file relative to the workingDir.

Fixes #10553
This commit is contained in:
Bjørn Erik Pedersen 2022-12-19 15:40:47 +01:00
parent 3afaca7584
commit 0d4b17d4c0
4 changed files with 25 additions and 4 deletions

View file

@ -206,6 +206,7 @@ func TestMultiSitesBuild(t *testing.T) {
{multiSiteYAMLConfigTemplate, "yml"}, {multiSiteYAMLConfigTemplate, "yml"},
{multiSiteJSONConfigTemplate, "json"}, {multiSiteJSONConfigTemplate, "json"},
} { } {
config := config
t.Run(config.suffix, func(t *testing.T) { t.Run(config.suffix, func(t *testing.T) {
t.Parallel() t.Parallel()
doTestMultiSitesBuild(t, config.content, config.suffix) doTestMultiSitesBuild(t, config.content, config.suffix)

View file

@ -63,6 +63,7 @@ func TestPermalink(t *testing.T) {
} }
for i, test := range tests { for i, test := range tests {
i := i
test := test test := test
t.Run(fmt.Sprintf("%s-%d", test.file, i), func(t *testing.T) { t.Run(fmt.Sprintf("%s-%d", test.file, i), func(t *testing.T) {
t.Parallel() t.Parallel()

View file

@ -26,6 +26,8 @@ import (
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
) )
const WorkspaceDisabled = "off"
var DefaultModuleConfig = Config{ var DefaultModuleConfig = Config{
// Default to direct, which means "git clone" and similar. We // Default to direct, which means "git clone" and similar. We
@ -41,6 +43,9 @@ var DefaultModuleConfig = Config{
// treated as private. // treated as private.
Private: "*.*", Private: "*.*",
// Default is no workspace resolution.
Workspace: WorkspaceDisabled,
// A list of replacement directives mapping a module path to a directory // A list of replacement directives mapping a module path to a directory
// or a theme component in the themes folder. // or a theme component in the themes folder.
// Note that this will turn the component into a traditional theme component // Note that this will turn the component into a traditional theme component
@ -247,6 +252,16 @@ func decodeConfig(cfg config.Provider, pathReplacements map[string]string) (Conf
c.Mounts[i] = mnt c.Mounts[i] = mnt
} }
if c.Workspace == "" {
c.Workspace = WorkspaceDisabled
}
if c.Workspace != WorkspaceDisabled {
c.Workspace = filepath.Clean(c.Workspace)
if !filepath.IsAbs(c.Workspace) {
workingDir := cfg.GetString("workingDir")
c.Workspace = filepath.Join(workingDir, c.Workspace)
}
}
} }
if themeSet { if themeSet {
@ -294,8 +309,9 @@ type Config struct {
// Configures GOPRIVATE. // Configures GOPRIVATE.
Private string Private string
// Set the workspace file to use, e.g. hugo.work. // Defaults to "off".
// Enables Go "Workspace" mode. // Set to a work file, e.g. hugo.work, to enable Go "Workspace" mode.
// Can be relative to the working directory or absolute.
// Requires Go 1.18+ // Requires Go 1.18+
// See https://tip.golang.org/doc/go1.18 // See https://tip.golang.org/doc/go1.18
Workspace string Workspace string

View file

@ -44,13 +44,13 @@ func TestDecodeConfig(t *testing.T) {
c.Run("Basic", func(c *qt.C) { c.Run("Basic", func(c *qt.C) {
tomlConfig := ` tomlConfig := `
workingDir = "/src/project"
[module] [module]
workspace = "hugo.work"
[module.hugoVersion] [module.hugoVersion]
min = "0.54.2" min = "0.54.2"
max = "0.199.0" max = "0.199.0"
extended = true extended = true
[[module.mounts]] [[module.mounts]]
source="src/project/blog" source="src/project/blog"
target="content/blog" target="content/blog"
@ -83,6 +83,8 @@ lang="en"
c.Assert(hv.IsValid(), qt.Equals, true) c.Assert(hv.IsValid(), qt.Equals, true)
} }
c.Assert(mcfg.Workspace, qt.Equals, "/src/project/hugo.work")
c.Assert(len(mcfg.Mounts), qt.Equals, 1) c.Assert(len(mcfg.Mounts), qt.Equals, 1)
c.Assert(len(mcfg.Imports), qt.Equals, 1) c.Assert(len(mcfg.Imports), qt.Equals, 1)
imp := mcfg.Imports[0] imp := mcfg.Imports[0]
@ -90,6 +92,7 @@ lang="en"
c.Assert(imp.Mounts[1].Source, qt.Equals, "src/markdown/blog") c.Assert(imp.Mounts[1].Source, qt.Equals, "src/markdown/blog")
c.Assert(imp.Mounts[1].Target, qt.Equals, "content/blog") c.Assert(imp.Mounts[1].Target, qt.Equals, "content/blog")
c.Assert(imp.Mounts[1].Lang, qt.Equals, "en") c.Assert(imp.Mounts[1].Lang, qt.Equals, "en")
}) })
c.Run("Replacements", func(c *qt.C) { c.Run("Replacements", func(c *qt.C) {