Skip to content

Commit

Permalink
Fix it so publishDate rolls up to section, taxonomy, or term pages
Browse files Browse the repository at this point in the history
Fixes #12438
  • Loading branch information
bep committed Jul 1, 2024
1 parent 932ab4c commit 7b6dafc
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 3 deletions.
4 changes: 2 additions & 2 deletions hugolib/content_map_page.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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)
})
}

Expand Down
83 changes: 83 additions & 0 deletions hugolib/dates_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
`)
}
6 changes: 5 additions & 1 deletion resources/page/pagemeta/page_frontmatter.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 7b6dafc

Please sign in to comment.