Deprecate kind, lang, and path from front matter - hugo - [fork] hugo port for 9front
HTML git clone git@git.drkhsh.at/hugo.git
DIR Log
DIR Files
DIR Refs
DIR Submodules
DIR README
DIR LICENSE
---
DIR commit 9b5f786df8fde5e5bd6311f210b95c85ff21eeea
DIR parent e6feb9e0be52c542c354f737fca9863eccb7102c
HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Mon, 10 Feb 2025 18:50:56 +0100
Deprecate kind, lang, and path from front matter
These were added to the page meta object when we implemented "pages from data", but were not meant to be used in front matter.
That is not supported, so we might as well add validation.
Fixes #12484
Diffstat:
M commands/commandeer.go | 2 +-
M common/hugo/hugo.go | 9 +++++++++
M common/loggers/loggerglobal.go | 12 ++++++++++--
M config/allconfig/load.go | 2 +-
M config/privacy/privacyConfig_test.… | 8 ++------
M hugolib/page__meta.go | 7 +++++++
M hugolib/page_test.go | 26 ++++++++++++++++++++++++++
M hugolib/testhelpers_test.go | 2 --
M tpl/tplimpl/shortcodes_integration… | 2 +-
9 files changed, 57 insertions(+), 13 deletions(-)
---
DIR diff --git a/commands/commandeer.go b/commands/commandeer.go
@@ -448,7 +448,7 @@ func (r *rootCommand) PreRun(cd, runner *simplecobra.Commandeer) error {
return err
}
// Set up the global logger early to allow info deprecations during config load.
- loggers.InitGlobalLogger(r.logger.Level(), false)
+ loggers.SetGlobalLogger(r.logger)
r.changesFromBuild = make(chan []identity.Identity, 10)
DIR diff --git a/common/hugo/hugo.go b/common/hugo/hugo.go
@@ -414,6 +414,15 @@ func Deprecate(item, alternative string, version string) {
DeprecateLevel(item, alternative, version, level)
}
+// DeprecateLevelMin informs about a deprecation starting at the given version, but with a minimum log level.
+func DeprecateLevelMin(item, alternative string, version string, minLevel logg.Level) {
+ level := deprecationLogLevelFromVersion(version)
+ if level < minLevel {
+ level = minLevel
+ }
+ DeprecateLevel(item, alternative, version, level)
+}
+
// DeprecateLevel informs about a deprecation logging at the given level.
func DeprecateLevel(item, alternative, version string, level logg.Level) {
var msg string
DIR diff --git a/common/loggers/loggerglobal.go b/common/loggers/loggerglobal.go
@@ -21,7 +21,15 @@ import (
"github.com/bep/logg"
)
-func InitGlobalLogger(level logg.Level, panicOnWarnings bool) {
+// SetGlobalLogger sets the global logger.
+// This is used in a few places in Hugo, e.g. deprecated functions.
+func SetGlobalLogger(logger Logger) {
+ logMu.Lock()
+ defer logMu.Unlock()
+ log = logger
+}
+
+func initGlobalLogger(level logg.Level, panicOnWarnings bool) {
logMu.Lock()
defer logMu.Unlock()
var logHookLast func(e *logg.Entry) error
@@ -50,5 +58,5 @@ func Log() Logger {
var log Logger
func init() {
- InitGlobalLogger(logg.LevelWarn, false)
+ initGlobalLogger(logg.LevelWarn, false)
}
DIR diff --git a/config/allconfig/load.go b/config/allconfig/load.go
@@ -91,7 +91,7 @@ func LoadConfig(d ConfigSourceDescriptor) (*Configs, error) {
return nil, fmt.Errorf("failed to init config: %w", err)
}
- loggers.InitGlobalLogger(d.Logger.Level(), configs.Base.PanicOnWarning)
+ loggers.SetGlobalLogger(d.Logger)
return configs, nil
}
DIR diff --git a/config/privacy/privacyConfig_test.go b/config/privacy/privacyConfig_test.go
@@ -36,10 +36,6 @@ respectDoNotTrack = true
[privacy.instagram]
disable = true
simple = true
-[privacy.twitter]
-disable = true
-enableDNT = true
-simple = true
[privacy.x]
disable = true
enableDNT = true
@@ -63,8 +59,8 @@ simple = true
got := []bool{
pc.Disqus.Disable, pc.GoogleAnalytics.Disable,
pc.GoogleAnalytics.RespectDoNotTrack, pc.Instagram.Disable,
- pc.Instagram.Simple, pc.Twitter.Disable, pc.Twitter.EnableDNT,
- pc.Twitter.Simple, pc.Vimeo.Disable, pc.Vimeo.EnableDNT, pc.Vimeo.Simple,
+ pc.Instagram.Simple,
+ pc.Vimeo.Disable, pc.Vimeo.EnableDNT, pc.Vimeo.Simple,
pc.YouTube.PrivacyEnhanced, pc.YouTube.Disable, pc.X.Disable, pc.X.EnableDNT,
pc.X.Simple,
}
DIR diff --git a/hugolib/page__meta.go b/hugolib/page__meta.go
@@ -21,6 +21,7 @@ import (
"strings"
"time"
+ "github.com/bep/logg"
"github.com/gobuffalo/flect"
"github.com/gohugoio/hugo/langs"
"github.com/gohugoio/hugo/markup/converter"
@@ -32,6 +33,7 @@ import (
"github.com/gohugoio/hugo/common/constants"
"github.com/gohugoio/hugo/common/hashing"
+ "github.com/gohugoio/hugo/common/hugo"
"github.com/gohugoio/hugo/common/loggers"
"github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/common/paths"
@@ -486,6 +488,11 @@ params:
continue
}
+ if loki == "path" || loki == "kind" || loki == "lang" {
+ // See issue 12484.
+ hugo.DeprecateLevelMin(loki+" in front matter", "", "v0.144.0", logg.LevelWarn)
+ }
+
switch loki {
case "title":
pcfg.Title = cast.ToString(v)
DIR diff --git a/hugolib/page_test.go b/hugolib/page_test.go
@@ -1942,3 +1942,29 @@ Hugo: h-Home|
`,
)
}
+
+// See #12484
+func TestPageFrontMatterDeprecatePathKindLang(t *testing.T) {
+ // This cannot be parallel as it depends on output from the global logger.
+
+ files := `
+-- hugo.toml --
+disableKinds = ["taxonomy", "term", "home", "section"]
+-- content/p1.md --
+---
+title: "p1"
+kind: "page"
+lang: "en"
+path: "mypath"
+---
+-- layouts/_default/single.html --
+Title: {{ .Title }}
+`
+ b := Test(t, files, TestOptWarn())
+ b.AssertFileContent("public/mypath/index.html", "p1")
+ b.AssertLogContains(
+ "deprecated: kind in front matter was deprecated",
+ "deprecated: lang in front matter was deprecated",
+ "deprecated: path in front matter was deprecated",
+ )
+}
DIR diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go
@@ -260,8 +260,6 @@ disable = false
respectDoNotTrack = true
[privacy.instagram]
simple = true
-[privacy.twitter]
-enableDNT = true
[privacy.x]
enableDNT = true
[privacy.vimeo]
DIR diff --git a/tpl/tplimpl/shortcodes_integration_test.go b/tpl/tplimpl/shortcodes_integration_test.go
@@ -22,7 +22,7 @@ import (
)
func TestCommentShortcode(t *testing.T) {
- t.Parallel()
+ // This cannot be parallel as it depends on output from the global logger.
files := `
-- hugo.toml --