]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix it so publishDate rolls up to section, taxonomy, or term pages
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 1 Jul 2024 13:49:26 +0000 (15:49 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 1 Jul 2024 19:48:12 +0000 (21:48 +0200)
Fixes #12438

hugolib/content_map_page.go
hugolib/dates_test.go
resources/page/pagemeta/page_frontmatter.go

index 0a9063e2303c2e4febaafa3ed12ab4181a709a1e..e3b29f186b3c7d51972b71d8ec72681e524b59c6 100644 (file)
@@ -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)
                                        })
                                }
 
index 784fc101c615ece552b481f6483db8643b172531..1a88cfd7da8bd1da65cadeadacf7e3512f721c78 100644 (file)
@@ -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
+       `)
+}
index c901ab57b5f68d62e36dccc39662c572efca72bf..0e0650934b33dc38f0ec0d26d1b16f996ff15d46 100644 (file)
@@ -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 {