gohugoio / hugo

The world’s fastest framework for building websites.
https://gohugo.io
Apache License 2.0
74.63k stars 7.45k forks source link

PublishDate does not roll-up to section, taxonomy, or term pages #12438

Closed schu closed 2 months ago

schu commented 4 months ago

What version of Hugo are you using (hugo version)?

hugo v0.125.4+extended darwin/arm64 BuildDate=2024-04-25T13:27:26Z VendorInfo=brew

Does this issue reproduce with the latest release?

Yes.

Description

After upgrading to v0.125 I see changes like the following for categories/index.xml and tags/index.xml files:

-      <pubDate>Sat, 27 Oct 2018 08:30:00 +0000</pubDate>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>

For subindex files like categories/foo/index.xml the pubDate is set to the expected value, i.e. the generated output is identical to versions < v0.125.

From looking at the changelog and commit f0a26cf58e9bfbe55c091d51a4133bc22cad5d1f it's not clear to me what needs to be changed in order to retain the previous (default) selection of values for pubDate? Am I missing something?

Also, with above hugo version {{ hugo.Version }} doesn't seem to be set, resulting in the following output for the generator tag:

-    <generator>Hugo -- gohugo.io</generator>
+    <generator>Hugo</generator>
jmooring commented 4 months ago

@schu

The version string was added to the generator tag in v0.125.0 to address #11692, and was removed in v0.125.3 to address https://github.com/gohugoio/hugo/pull/12300#issuecomment-2068869567. We should have closed #11692 as "won't fix".

I'll look into the zero pubdate problem.

jmooring commented 4 months ago

The Date and Lastmod roll-up to section, taxonomy, and term pages. The PublishDate does not "roll-up".

I think the PublishDate should roll-up to the latest date before now(). If we rolled-up dates after now(), that would cause the section, taxonomy, or term page to not be published even if there's other descendant content.

Applicable to:

This isn't something new (i.e., same behavior in v0.122.0).

The test case below does not test for what should happen with publish dates greater than now() as described above.

Failing test ```go func TestFoo(t *testing.T) { t.Parallel() 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] --- ` // Test without publishDate in front matter. b := hugolib.Test(t, files) b.AssertFileContent("public/s1/index.html", ` Date: 2024-04-03 PublishDate: 2024-04-03 Lastmod: 2024-04-04 `) 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 = hugolib.Test(t, files) b.AssertFileContent("public/s1/index.html", ` Date: 2024-04-03 PublishDate: 2024-04-03 Lastmod: 2024-04-03 `) b.AssertFileContent("public/tags/index.html", ` Date: 2024-04-03 PublishDate: 2024-04-03 Lastmod: 2024-04-03 `) b.AssertFileContent("public/tags/t1/index.html", ` Date: 2024-04-03 PublishDate: 2024-04-03 Lastmod: 2024-04-03 `) } ```


bep commented 4 months ago

I think the PublishDate should roll-up to the latest date before now().

Yea, that sounds reasonable.

schu commented 3 months ago

Is there a workaround that I could apply to get back the old behavior?

Or is there a chance to revert to the old behavior until a working fix is found?

jmooring commented 3 months ago

Override the embedded RSS template, and change this line:

https://github.com/gohugoio/hugo/blob/3d40aba512931031921463dafc172c0d124437b8/tpl/tplimpl/embedded/templates/_default/rss.xml#L64

To:

<pubDate>{{ (or .PublishDate .Date).Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> 

If the page has a publication date, use that, else use the date.

schu commented 3 months ago

Override the embedded RSS template [...]

Thanks, that worked.

For other readers: download the default rss.xml template to layouts/_default/rss.xml and change the pubDate line as shown above.

github-actions[bot] commented 1 month ago

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.