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
This commit is contained in:
Bjørn Erik Pedersen
2025-02-10 18:50:56 +01:00
parent e6feb9e0be
commit 9b5f786df8
9 changed files with 57 additions and 13 deletions

View File

@@ -448,7 +448,7 @@ func (r *rootCommand) PreRun(cd, runner *simplecobra.Commandeer) error {
return err return err
} }
// Set up the global logger early to allow info deprecations during config load. // 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) r.changesFromBuild = make(chan []identity.Identity, 10)

View File

@@ -414,6 +414,15 @@ func Deprecate(item, alternative string, version string) {
DeprecateLevel(item, alternative, version, level) 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. // DeprecateLevel informs about a deprecation logging at the given level.
func DeprecateLevel(item, alternative, version string, level logg.Level) { func DeprecateLevel(item, alternative, version string, level logg.Level) {
var msg string var msg string

View File

@@ -21,7 +21,15 @@ import (
"github.com/bep/logg" "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() logMu.Lock()
defer logMu.Unlock() defer logMu.Unlock()
var logHookLast func(e *logg.Entry) error var logHookLast func(e *logg.Entry) error
@@ -50,5 +58,5 @@ func Log() Logger {
var log Logger var log Logger
func init() { func init() {
InitGlobalLogger(logg.LevelWarn, false) initGlobalLogger(logg.LevelWarn, false)
} }

View File

@@ -91,7 +91,7 @@ func LoadConfig(d ConfigSourceDescriptor) (*Configs, error) {
return nil, fmt.Errorf("failed to init config: %w", err) 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 return configs, nil
} }

View File

@@ -36,10 +36,6 @@ respectDoNotTrack = true
[privacy.instagram] [privacy.instagram]
disable = true disable = true
simple = true simple = true
[privacy.twitter]
disable = true
enableDNT = true
simple = true
[privacy.x] [privacy.x]
disable = true disable = true
enableDNT = true enableDNT = true
@@ -63,8 +59,8 @@ simple = true
got := []bool{ got := []bool{
pc.Disqus.Disable, pc.GoogleAnalytics.Disable, pc.Disqus.Disable, pc.GoogleAnalytics.Disable,
pc.GoogleAnalytics.RespectDoNotTrack, pc.Instagram.Disable, pc.GoogleAnalytics.RespectDoNotTrack, pc.Instagram.Disable,
pc.Instagram.Simple, pc.Twitter.Disable, pc.Twitter.EnableDNT, pc.Instagram.Simple,
pc.Twitter.Simple, pc.Vimeo.Disable, pc.Vimeo.EnableDNT, pc.Vimeo.Simple, pc.Vimeo.Disable, pc.Vimeo.EnableDNT, pc.Vimeo.Simple,
pc.YouTube.PrivacyEnhanced, pc.YouTube.Disable, pc.X.Disable, pc.X.EnableDNT, pc.YouTube.PrivacyEnhanced, pc.YouTube.Disable, pc.X.Disable, pc.X.EnableDNT,
pc.X.Simple, pc.X.Simple,
} }

View File

@@ -21,6 +21,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/bep/logg"
"github.com/gobuffalo/flect" "github.com/gobuffalo/flect"
"github.com/gohugoio/hugo/langs" "github.com/gohugoio/hugo/langs"
"github.com/gohugoio/hugo/markup/converter" "github.com/gohugoio/hugo/markup/converter"
@@ -32,6 +33,7 @@ import (
"github.com/gohugoio/hugo/common/constants" "github.com/gohugoio/hugo/common/constants"
"github.com/gohugoio/hugo/common/hashing" "github.com/gohugoio/hugo/common/hashing"
"github.com/gohugoio/hugo/common/hugo"
"github.com/gohugoio/hugo/common/loggers" "github.com/gohugoio/hugo/common/loggers"
"github.com/gohugoio/hugo/common/maps" "github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/common/paths" "github.com/gohugoio/hugo/common/paths"
@@ -486,6 +488,11 @@ params:
continue continue
} }
if loki == "path" || loki == "kind" || loki == "lang" {
// See issue 12484.
hugo.DeprecateLevelMin(loki+" in front matter", "", "v0.144.0", logg.LevelWarn)
}
switch loki { switch loki {
case "title": case "title":
pcfg.Title = cast.ToString(v) pcfg.Title = cast.ToString(v)

View File

@@ -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",
)
}

View File

@@ -260,8 +260,6 @@ disable = false
respectDoNotTrack = true respectDoNotTrack = true
[privacy.instagram] [privacy.instagram]
simple = true simple = true
[privacy.twitter]
enableDNT = true
[privacy.x] [privacy.x]
enableDNT = true enableDNT = true
[privacy.vimeo] [privacy.vimeo]

View File

@@ -22,7 +22,7 @@ import (
) )
func TestCommentShortcode(t *testing.T) { func TestCommentShortcode(t *testing.T) {
t.Parallel() // This cannot be parallel as it depends on output from the global logger.
files := ` files := `
-- hugo.toml -- -- hugo.toml --