From 29b8e17d29ad38621cf6c7c104309bcedf5c20c5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 17 Feb 2026 12:45:15 +0100 Subject: [PATCH] hugolib: Adjust hugo.Sites.Default Fixes #14531 --- hugolib/site_sites_test.go | 71 ++++++++++++++++++++++++++++++-------- resources/page/site.go | 17 ++++----- 2 files changed, 63 insertions(+), 25 deletions(-) diff --git a/hugolib/site_sites_test.go b/hugolib/site_sites_test.go index 9f1826319..cc5945715 100644 --- a/hugolib/site_sites_test.go +++ b/hugolib/site_sites_test.go @@ -21,6 +21,7 @@ func TestSiteIsDefault(t *testing.T) { disableKinds = ['rss','sitemap','taxonomy','term'] defaultContentLanguage = 'fr' defaultContentLanguageInSubdir = true +defaultContentVersion = "v2.0.0" defaultContentVersionInSubdir = true defaultContentRoleInSubdir = true [languages] @@ -57,28 +58,68 @@ title: Page 1 DE --- -- layouts/_default/single.html -- Current site is default: {{ .Site.IsDefault }} -{{ range hugo.Sites }} +{{ with hugo.Sites.Default }} +Default site: {{ .Language.Name }}-{{ .Role.Name }}-{{ .Version.Name }}: IsDefault={{ .IsDefault }} +{{ end }} +{{ range hugo.Sites -}} {{ .Language.Name }}-{{ .Role.Name }}-{{ .Version.Name }}: IsDefault={{ .IsDefault }} {{ end }} ` b := Test(t, files) - b.AssertFileContent("public/guest/v1.0.0/en/p1/index.html", - "Current site is default: false", - "en-guest-v1.0.0: IsDefault=false", - "en-member-v1.0.0: IsDefault=false", - "fr-guest-v1.0.0: IsDefault=true", - "fr-member-v1.0.0: IsDefault=false", - "de-guest-v1.0.0: IsDefault=false", - "de-member-v1.0.0: IsDefault=false", + b.AssertFileContent("public/guest/v2.0.0/en/p1/index.html", + ` +Current site is default: false +Default site: fr-guest-v2.0.0: IsDefault=true +en-guest-v1.0.0: IsDefault=false +en-member-v1.0.0: IsDefault=false +en-guest-v2.0.0: IsDefault=false +en-member-v2.0.0: IsDefault=false +fr-guest-v1.0.0: IsDefault=false +fr-member-v1.0.0: IsDefault=false +fr-guest-v2.0.0: IsDefault=true +fr-member-v2.0.0: IsDefault=false +de-guest-v1.0.0: IsDefault=false +de-member-v1.0.0: IsDefault=false +de-guest-v2.0.0: IsDefault=false +de-member-v2.0.0: IsDefault=false +`, ) - b.AssertFileContent("public/guest/v1.0.0/fr/p1/index.html", - "Current site is default: true", - "fr-guest-v1.0.0: IsDefault=true", + b.AssertFileContent("public/guest/v2.0.0/fr/p1/index.html", + ` +Current site is default: true +Default site: fr-guest-v2.0.0: IsDefault=true +en-guest-v1.0.0: IsDefault=false +en-member-v1.0.0: IsDefault=false +en-guest-v2.0.0: IsDefault=false +en-member-v2.0.0: IsDefault=false +fr-guest-v1.0.0: IsDefault=false +fr-member-v1.0.0: IsDefault=false +fr-guest-v2.0.0: IsDefault=true +fr-member-v2.0.0: IsDefault=false +de-guest-v1.0.0: IsDefault=false +de-member-v1.0.0: IsDefault=false +de-guest-v2.0.0: IsDefault=false +de-member-v2.0.0: IsDefault=false +`, ) - b.AssertFileContent("public/guest/v1.0.0/de/p1/index.html", - "Current site is default: false", - "fr-guest-v1.0.0: IsDefault=true", + b.AssertFileContent("public/guest/v2.0.0/de/p1/index.html", + ` +Current site is default: false +Default site: fr-guest-v2.0.0: IsDefault=true +en-guest-v1.0.0: IsDefault=false +en-member-v1.0.0: IsDefault=false +en-guest-v2.0.0: IsDefault=false +en-member-v2.0.0: IsDefault=false +fr-guest-v1.0.0: IsDefault=false +fr-member-v1.0.0: IsDefault=false +fr-guest-v2.0.0: IsDefault=true +fr-member-v2.0.0: IsDefault=false +de-guest-v1.0.0: IsDefault=false +de-member-v1.0.0: IsDefault=false +de-guest-v2.0.0: IsDefault=false +de-member-v2.0.0: IsDefault=false +`, ) } diff --git a/resources/page/site.go b/resources/page/site.go index a63e5eaa0..363c38cd1 100644 --- a/resources/page/site.go +++ b/resources/page/site.go @@ -14,6 +14,7 @@ package page import ( + "slices" "time" "github.com/gohugoio/hugo/common/hmaps" @@ -142,18 +143,14 @@ type SiteDimension interface { // Sites represents an ordered list of sites (languages). type Sites []Site -// Default is a convenience method to get the site corresponding to the default -// content language. +// Default is a convenience method to get the default site. func (s Sites) Default() Site { - if len(s) == 0 { - return nil + if idx := slices.IndexFunc(s, func(ss Site) bool { + return ss.IsDefault() + }); idx != -1 { + return s[idx] } - for _, site := range s { - if site.Language().IsDefault() { - return site - } - } - return s[0] + return nil } // Some additional interfaces implemented by siteWrapper that's not on Site. -- 2.39.5