summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-05-20 15:04:22 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-05-20 17:45:56 +0200
commit7c7baa618325cb3d2b1ef48bdc1f97aae25f62e9 (patch)
treef80cd6e57e2f9dcb07ceae3e7c022f41d4076bfe
parent4f085e80da9a415725db3def70e5ce847cf06741 (diff)
Add hugo.WorkingDir
Fixes #10969
-rw-r--r--commands/hugobuilder.go4
-rw-r--r--common/hugo/hugo.go21
-rw-r--r--common/hugo/hugo_test.go19
-rw-r--r--config/allconfig/configlanguage.go4
-rw-r--r--config/configProvider.go1
-rw-r--r--hugolib/config_test.go23
-rw-r--r--hugolib/site_new.go2
-rw-r--r--langs/i18n/i18n_test.go2
-rw-r--r--resources/page/page_matcher_test.go17
-rw-r--r--resources/page/site.go4
-rw-r--r--tpl/cast/docshelper.go3
11 files changed, 86 insertions, 14 deletions
diff --git a/commands/hugobuilder.go b/commands/hugobuilder.go
index 20a3228f9..20e800aca 100644
--- a/commands/hugobuilder.go
+++ b/commands/hugobuilder.go
@@ -990,7 +990,9 @@ func (c *hugoBuilder) loadConfig(cd *simplecobra.Commandeer, running bool) error
cfg := config.New()
cfg.Set("renderToDisk", (c.s == nil && !c.r.renderToMemory) || (c.s != nil && c.s.renderToDisk))
watch := c.r.buildWatch || (c.s != nil && c.s.serverWatch)
- cfg.Set("environment", c.r.environment)
+ if c.r.environment != "" {
+ cfg.Set("environment", c.r.environment)
+ }
cfg.Set("internal", maps.Params{
"running": running,
diff --git a/common/hugo/hugo.go b/common/hugo/hugo.go
index 6402d7b88..4769852a0 100644
--- a/common/hugo/hugo.go
+++ b/common/hugo/hugo.go
@@ -60,6 +60,7 @@ type HugoInfo struct {
// version of go that the Hugo binary was built with
GoVersion string
+ conf ConfigProvider
deps []*Dependency
}
@@ -81,15 +82,26 @@ func (i HugoInfo) IsExtended() bool {
return IsExtended
}
+// WorkingDir returns the project working directory.
+func (i HugoInfo) WorkingDir() string {
+ return i.conf.WorkingDir()
+}
+
// Deps gets a list of dependencies for this Hugo build.
func (i HugoInfo) Deps() []*Dependency {
return i.deps
}
+// ConfigProvider represents the config options that are relevant for HugoInfo.
+type ConfigProvider interface {
+ Environment() string
+ WorkingDir() string
+}
+
// NewInfo creates a new Hugo Info object.
-func NewInfo(environment string, deps []*Dependency) HugoInfo {
- if environment == "" {
- environment = EnvironmentProduction
+func NewInfo(conf ConfigProvider, deps []*Dependency) HugoInfo {
+ if conf.Environment() == "" {
+ panic("environment not set")
}
var (
commitHash string
@@ -107,7 +119,8 @@ func NewInfo(environment string, deps []*Dependency) HugoInfo {
return HugoInfo{
CommitHash: commitHash,
BuildDate: buildDate,
- Environment: environment,
+ Environment: conf.Environment(),
+ conf: conf,
deps: deps,
GoVersion: goVersion,
}
diff --git a/common/hugo/hugo_test.go b/common/hugo/hugo_test.go
index f2ad0f5c1..b0279f111 100644
--- a/common/hugo/hugo_test.go
+++ b/common/hugo/hugo_test.go
@@ -23,10 +23,12 @@ import (
func TestHugoInfo(t *testing.T) {
c := qt.New(t)
- hugoInfo := NewInfo("", nil)
+ conf := testConfig{environment: "production", workingDir: "/mywork"}
+ hugoInfo := NewInfo(conf, nil)
c.Assert(hugoInfo.Version(), qt.Equals, CurrentVersion.Version())
c.Assert(fmt.Sprintf("%T", VersionString("")), qt.Equals, fmt.Sprintf("%T", hugoInfo.Version()))
+ c.Assert(hugoInfo.WorkingDir(), qt.Equals, "/mywork")
bi := getBuildInfo()
if bi != nil {
@@ -39,6 +41,19 @@ func TestHugoInfo(t *testing.T) {
c.Assert(hugoInfo.IsProduction(), qt.Equals, true)
c.Assert(hugoInfo.IsExtended(), qt.Equals, IsExtended)
- devHugoInfo := NewInfo("development", nil)
+ devHugoInfo := NewInfo(testConfig{environment: "development"}, nil)
c.Assert(devHugoInfo.IsProduction(), qt.Equals, false)
}
+
+type testConfig struct {
+ environment string
+ workingDir string
+}
+
+func (c testConfig) Environment() string {
+ return c.environment
+}
+
+func (c testConfig) WorkingDir() string {
+ return c.workingDir
+}
diff --git a/config/allconfig/configlanguage.go b/config/allconfig/configlanguage.go
index b28d54769..95c5c7edf 100644
--- a/config/allconfig/configlanguage.go
+++ b/config/allconfig/configlanguage.go
@@ -101,6 +101,10 @@ func (c ConfigLanguage) DirsBase() config.CommonDirs {
return c.m.Base.CommonDirs
}
+func (c ConfigLanguage) WorkingDir() string {
+ return c.m.Base.WorkingDir
+}
+
func (c ConfigLanguage) Quiet() bool {
return c.m.Base.Internal.Quiet
}
diff --git a/config/configProvider.go b/config/configProvider.go
index ac00c7476..8ed0728bd 100644
--- a/config/configProvider.go
+++ b/config/configProvider.go
@@ -64,6 +64,7 @@ type AllProvider interface {
Timeout() time.Duration
StaticDirs() []string
IgnoredErrors() map[string]bool
+ WorkingDir() string
}
// Provider provides the configuration settings for Hugo.
diff --git a/hugolib/config_test.go b/hugolib/config_test.go
index 24275025c..4af9b7998 100644
--- a/hugolib/config_test.go
+++ b/hugolib/config_test.go
@@ -898,6 +898,29 @@ mainSections: []
}
+func TestConfigHugoWorkingDir(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- hugo.toml --
+-- layouts/index.html --
+WorkingDir: {{ hugo.WorkingDir }}|
+
+`
+ b := NewIntegrationTestBuilder(
+ IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ WorkingDir: "myworkingdir",
+ },
+ ).Build()
+
+ b.AssertFileContent("public/index.html", `
+WorkingDir: myworkingdir|
+`)
+
+}
+
func TestConfigMergeLanguageDeepEmptyLefSide(t *testing.T) {
t.Parallel()
diff --git a/hugolib/site_new.go b/hugolib/site_new.go
index b0b34e457..1262cc3ae 100644
--- a/hugolib/site_new.go
+++ b/hugolib/site_new.go
@@ -261,7 +261,7 @@ func newHugoSitesNew(cfg deps.DepsCfg, d *deps.Deps, sites []*Site) (*HugoSites,
dependencies = append(dependencies, depFromMod(m))
}
- h.hugoInfo = hugo.NewInfo(h.Configs.Base.Environment, dependencies)
+ h.hugoInfo = hugo.NewInfo(h.Configs.GetFirstLanguageConfig(), dependencies)
var prototype *deps.Deps
for i, s := range sites {
diff --git a/langs/i18n/i18n_test.go b/langs/i18n/i18n_test.go
index 491ae3373..1ac6144dd 100644
--- a/langs/i18n/i18n_test.go
+++ b/langs/i18n/i18n_test.go
@@ -480,7 +480,7 @@ func prepareDeps(afs afero.Fs, cfg config.Provider) (*deps.Deps, *TranslationPro
translationProvider := NewTranslationProvider()
d.TemplateProvider = tplimpl.DefaultTemplateProvider
d.TranslationProvider = translationProvider
- d.Site = page.NewDummyHugoSite(cfg)
+ d.Site = page.NewDummyHugoSite(d.Conf)
if err := d.Compile(nil); err != nil {
panic(err)
}
diff --git a/resources/page/page_matcher_test.go b/resources/page/page_matcher_test.go
index 990312ed1..da47843db 100644
--- a/resources/page/page_matcher_test.go
+++ b/resources/page/page_matcher_test.go
@@ -25,8 +25,8 @@ import (
func TestPageMatcher(t *testing.T) {
c := qt.New(t)
- developmentTestSite := testSite{h: hugo.NewInfo("development", nil)}
- productionTestSite := testSite{h: hugo.NewInfo("production", nil)}
+ developmentTestSite := testSite{h: hugo.NewInfo(testConfig{environment: "development"}, nil)}
+ productionTestSite := testSite{h: hugo.NewInfo(testConfig{environment: "production"}, nil)}
p1, p2, p3 :=
&testPage{path: "/p1", kind: "section", lang: "en", site: developmentTestSite},
@@ -156,3 +156,16 @@ func TestDecodeCascadeConfig(t *testing.T) {
c.Assert(got, qt.IsNotNil)
}
+
+type testConfig struct {
+ environment string
+ workingDir string
+}
+
+func (c testConfig) Environment() string {
+ return c.environment
+}
+
+func (c testConfig) WorkingDir() string {
+ return c.workingDir
+}
diff --git a/resources/page/site.go b/resources/page/site.go
index 16e070160..da97dfe6e 100644
--- a/resources/page/site.go
+++ b/resources/page/site.go
@@ -444,9 +444,9 @@ func (s testSite) Param(key any) (any, error) {
}
// NewDummyHugoSite creates a new minimal test site.
-func NewDummyHugoSite(cfg config.Provider) Site {
+func NewDummyHugoSite(conf config.AllProvider) Site {
return testSite{
- h: hugo.NewInfo(hugo.EnvironmentProduction, nil),
+ h: hugo.NewInfo(conf, nil),
l: &langs.Language{
Lang: "en",
},
diff --git a/tpl/cast/docshelper.go b/tpl/cast/docshelper.go
index 2ed28e3c5..981c51551 100644
--- a/tpl/cast/docshelper.go
+++ b/tpl/cast/docshelper.go
@@ -29,7 +29,8 @@ func init() {
if err := d.Init(); err != nil {
panic(err)
}
- d.Site = page.NewDummyHugoSite(newTestConfig())
+ conf := testconfig.GetTestConfig(nil, newTestConfig())
+ d.Site = page.NewDummyHugoSite(conf)
var namespaces internal.TemplateFuncsNamespaces