aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--hugolib/content_map_page.go4
-rw-r--r--hugolib/dates_test.go83
-rw-r--r--resources/page/pagemeta/page_frontmatter.go6
3 files changed, 90 insertions, 3 deletions
diff --git a/hugolib/content_map_page.go b/hugolib/content_map_page.go
index 0a9063e23..e3b29f186 100644
--- a/hugolib/content_map_page.go
+++ b/hugolib/content_map_page.go
@@ -1428,7 +1428,7 @@ func (sa *sitePagesAssembler) applyAggregates() error {
}
if wasZeroDates {
- pageBundle.m.pageConfig.Dates.UpdateDateAndLastmodIfAfter(sp.m.pageConfig.Dates)
+ pageBundle.m.pageConfig.Dates.UpdateDateAndLastmodAndPublishDateIfAfter(sp.m.pageConfig.Dates)
}
if pageBundle.IsHome() {
@@ -1565,7 +1565,7 @@ func (sa *sitePagesAssembler) applyAggregatesToTaxonomiesAndTerms() error {
return
}
- p.m.pageConfig.Dates.UpdateDateAndLastmodIfAfter(sp.m.pageConfig.Dates)
+ p.m.pageConfig.Dates.UpdateDateAndLastmodAndPublishDateIfAfter(sp.m.pageConfig.Dates)
})
}
diff --git a/hugolib/dates_test.go b/hugolib/dates_test.go
index 784fc101c..1a88cfd7d 100644
--- a/hugolib/dates_test.go
+++ b/hugolib/dates_test.go
@@ -266,3 +266,86 @@ Home's Date should be equal mydata date: true
Full time: 6:00:00 am UTC
`)
}
+
+func TestPublisDateRollupIssue12438(t *testing.T) {
+ t.Parallel()
+
+ // To future Hugo maintainers, this test will start to fail in 2099.
+ files := `
+-- hugo.toml --
+disableKinds = ['home','rss','sitemap']
+[taxonomies]
+tag = 'tags'
+-- layouts/_default/list.html --
+Date: {{ .Date.Format "2006-01-02" }}
+PublishDate: {{ .PublishDate.Format "2006-01-02" }}
+Lastmod: {{ .Lastmod.Format "2006-01-02" }}
+-- layouts/_default/single.html --
+{{ .Title }}
+-- content/s1/p1.md --
+---
+title: p1
+date: 2024-03-01
+lastmod: 2024-03-02
+tags: [t1]
+---
+-- content/s1/p2.md --
+---
+title: p2
+date: 2024-04-03
+lastmod: 2024-04-04
+tags: [t1]
+---
+-- content/s1/p3.md --
+---
+title: p3
+lastmod: 2099-05-06
+tags: [t1]
+---
+
+`
+
+ // Test without publishDate in front matter.
+ b := Test(t, files)
+
+ b.AssertFileContent("public/s1/index.html", `
+ Date: 2099-05-06
+ PublishDate: 2024-04-03
+ Lastmod: 2099-05-06
+ `)
+
+ b.AssertFileContent("public/tags/index.html", `
+ Date: 2024-04-03
+ PublishDate: 2024-04-03
+ Lastmod: 2024-04-04
+ `)
+
+ b.AssertFileContent("public/tags/t1/index.html", `
+ Date: 2024-04-03
+ PublishDate: 2024-04-03
+ Lastmod: 2024-04-04
+ `)
+
+ // Test with publishDate in front matter.
+ files = strings.ReplaceAll(files, "lastmod", "publishDate")
+
+ b = Test(t, files)
+
+ b.AssertFileContent("public/s1/index.html", `
+ Date: 2099-05-06
+ PublishDate: 2024-04-04
+ Lastmod: 2099-05-06
+ `)
+
+ b.AssertFileContent("public/tags/index.html", `
+ Date: 2024-04-03
+ PublishDate: 2024-04-04
+ Lastmod: 2024-04-03
+ `)
+
+ b.AssertFileContent("public/tags/t1/index.html", `
+ Date: 2024-04-03
+ PublishDate: 2024-04-04
+ Lastmod: 2024-04-03
+ `)
+}
diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go
index c901ab57b..0e0650934 100644
--- a/resources/page/pagemeta/page_frontmatter.go
+++ b/resources/page/pagemeta/page_frontmatter.go
@@ -57,13 +57,17 @@ func (d Dates) IsDateOrLastModAfter(in Dates) bool {
return d.Date.After(in.Date) || d.Lastmod.After(in.Lastmod)
}
-func (d *Dates) UpdateDateAndLastmodIfAfter(in Dates) {
+func (d *Dates) UpdateDateAndLastmodAndPublishDateIfAfter(in Dates) {
if in.Date.After(d.Date) {
d.Date = in.Date
}
if in.Lastmod.After(d.Lastmod) {
d.Lastmod = in.Lastmod
}
+
+ if in.PublishDate.After(d.PublishDate) && in.PublishDate.Before(htime.Now()) {
+ d.PublishDate = in.PublishDate
+ }
}
func (d Dates) IsAllDatesZero() bool {