diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index a211956df..e44390e4b 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -16,7 +16,6 @@ package hugolib import ( "errors" "io" - "path" "path/filepath" "sort" "strings" @@ -521,15 +520,6 @@ func (h *HugoSites) assignMissingTranslations() error { func (h *HugoSites) createMissingPages() error { var newPages Pages - singularPlural := func(p *Page) (string, string) { - slen := len(p.sections) - singular := p.sections[slen-1] - singular = p.s.PathSpec.MakePathSanitized(singular) - plural := path.Join((p.sections[:slen-1])...) - - return singular, plural - } - for _, s := range h.Sites { if s.isEnabled(KindHome) { // home pages @@ -554,7 +544,6 @@ func (h *HugoSites) createMissingPages() error { if len(taxonomies) > 0 { taxonomyPages := s.findPagesByKind(KindTaxonomy) taxonomyTermsPages := s.findPagesByKind(KindTaxonomyTerm) - for _, plural := range taxonomies { if s.isEnabled(KindTaxonomyTerm) { foundTaxonomyTermsPage := false @@ -581,10 +570,11 @@ func (h *HugoSites) createMissingPages() error { key = s.PathSpec.MakeSegment(key) } for _, p := range taxonomyPages { - - singularKey, pluralKey := singularPlural(p) - - if pluralKey == plural && singularKey == key { + // Some people may have /authors/MaxMustermann etc. as paths. + // p.sections contains the raw values from the file system. + // See https://github.com/gohugoio/hugo/issues/4238 + singularKey := s.PathSpec.MakePathSanitized(p.sections[1]) + if p.sections[0] == plural && singularKey == key { foundTaxonomyPage = true break } diff --git a/hugolib/hugo_sites_build_test.go b/hugolib/hugo_sites_build_test.go index f772ce192..91ae8434d 100644 --- a/hugolib/hugo_sites_build_test.go +++ b/hugolib/hugo_sites_build_test.go @@ -100,8 +100,8 @@ func doTestMultiSitesMainLangInRoot(t *testing.T, defaultInSubDir bool) { // Check list pages b.AssertFileContent(pathMod("public/fr/sect/index.html"), "List", "Bonjour") b.AssertFileContent("public/en/sect/index.html", "List", "Hello") - b.AssertFileContent(pathMod("public/fr/plaques/frtag1/index.html"), "Taxonomy List", "Bonjour") - b.AssertFileContent("public/en/tags/tag1/index.html", "Taxonomy List", "Hello") + b.AssertFileContent(pathMod("public/fr/plaques/frtag1/index.html"), "List", "Bonjour") + b.AssertFileContent("public/en/tags/tag1/index.html", "List", "Hello") // Check sitemaps // Sitemaps behaves different: In a multilanguage setup there will always be a index file and diff --git a/hugolib/page.go b/hugolib/page.go index e5da74641..15ed631c1 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -1774,8 +1774,8 @@ func (p *Page) prepareData(s *Site) error { case KindHome: pages = s.RegularPages case KindTaxonomy: - plural := path.Join(p.sections[:len(p.sections)-1]...) - term := p.sections[len(p.sections)-1] + plural := p.sections[0] + term := p.sections[1] if s.Info.preserveTaxonomyNames { if v, ok := s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, term)]; ok { @@ -1792,7 +1792,7 @@ func (p *Page) prepareData(s *Site) error { p.data["Term"] = term pages = taxonomy.Pages() case KindTaxonomyTerm: - plural := path.Join(p.sections...) + plural := p.sections[0] singular := s.taxonomiesPluralSingular[plural] p.data["Singular"] = singular diff --git a/hugolib/site.go b/hugolib/site.go index c6d203d8a..1b3a317a1 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -22,7 +22,6 @@ import ( "mime" "net/url" "os" - "path" "path/filepath" "sort" "strconv" @@ -1587,28 +1586,11 @@ func (s *Site) resetBuildState() { } } -func (s *Site) singularPluralAll(sections []string) (string, string, string) { - slen := len(sections) - singular := sections[slen-1] - plural := path.Join((sections[:slen-1])...) - all := path.Join(sections...) - - return singular, plural, all -} - func (s *Site) kindFromSections(sections []string) string { if len(sections) == 0 { return KindSection } - _, plural, all := s.singularPluralAll(sections) - - if _, ok := s.Taxonomies[all]; ok { - return KindTaxonomyTerm - } else if _, ok := s.Taxonomies[plural]; ok { - return KindTaxonomy - } - if _, isTaxonomy := s.Taxonomies[sections[0]]; isTaxonomy { if len(sections) == 1 { return KindTaxonomyTerm @@ -1864,10 +1846,8 @@ func (s *Site) newHomePage() *Page { } func (s *Site) newTaxonomyPage(plural, key string) *Page { - sections := strings.Split(plural, "/") - sections = append(sections, key) - p := s.newNodePage(KindTaxonomy, sections...) + p := s.newNodePage(KindTaxonomy, plural, key) if s.Info.preserveTaxonomyNames { p.title = key @@ -1891,7 +1871,7 @@ func (s *Site) newSectionPage(name string) *Page { } func (s *Site) newTaxonomyTermsPage(plural string) *Page { - p := s.newNodePage(KindTaxonomyTerm, strings.Split(plural, "/")...) + p := s.newNodePage(KindTaxonomyTerm, plural) p.title = s.titleFunc(plural) return p } diff --git a/hugolib/taxonomy_test.go b/hugolib/taxonomy_test.go index 6304e4f2d..ec55dc428 100644 --- a/hugolib/taxonomy_test.go +++ b/hugolib/taxonomy_test.go @@ -243,44 +243,3 @@ subcats: th.assertFileContent(pathFunc("public/empties/index.html"), "Terms List", "Empties") } - -// https://github.com/gohugoio/hugo/issues/5513 -func TestTaxonomyPathSeparation(t *testing.T) { - t.Parallel() - - config := ` -baseURL = "https://example.com" - -[taxonomies] -"news/tag" = "news/tags" -"news/category" = "news/categories" -` - - pageContent := ` -+++ -title = "foo" -"news/categories" = ["a", "b", "c"] -+++ - -Content. - - -` - - b := newTestSitesBuilder(t) - b.WithConfigFile("toml", config) - b.WithContent("page.md", pageContent) - b.WithContent("news/categories/b/_index.md", ` ---- -title: "This is B" ---- - -`) - - b.CreateSites().Build(BuildCfg{}) - - b.AssertFileContent("public/news/categories/index.html", "Taxonomy Term Page 1|News/Categories|Hello|https://example.com/news/categories/|") - b.AssertFileContent("public/news/categories/a/index.html", "Taxonomy List Page 1|A|Hello|https://example.com/news/categories/a/|") - b.AssertFileContent("public/news/categories/b/index.html", "Taxonomy List Page 1|This is B|Hello|https://example.com/news/categories/b/|") - -} diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go index 78f4cba63..a60ca2905 100644 --- a/hugolib/testhelpers_test.go +++ b/hugolib/testhelpers_test.go @@ -420,15 +420,12 @@ date: "2018-02-28" "content/sect/doc1.nn.md", contentTemplate, } - listTemplateCommon = "{{ $p := .Paginator }}{{ $p.PageNumber }}|{{ .Title }}|{{ i18n \"hello\" }}|{{ .Permalink }}|Pager: {{ template \"_internal/pagination.html\" . }}" - defaultTemplates = []string{ "_default/single.html", "Single: {{ .Title }}|{{ i18n \"hello\" }}|{{.Lang}}|{{ .Content }}", - "_default/list.html", "List Page " + listTemplateCommon, + "_default/list.html", "{{ $p := .Paginator }}List Page {{ $p.PageNumber }}: {{ .Title }}|{{ i18n \"hello\" }}|{{ .Permalink }}|Pager: {{ template \"_internal/pagination.html\" . }}", "index.html", "{{ $p := .Paginator }}Default Home Page {{ $p.PageNumber }}: {{ .Title }}|{{ .IsHome }}|{{ i18n \"hello\" }}|{{ .Permalink }}|{{ .Site.Data.hugo.slogan }}|String Resource: {{ ( \"Hugo Pipes\" | resources.FromString \"text/pipes.txt\").RelPermalink }}", "index.fr.html", "{{ $p := .Paginator }}French Home Page {{ $p.PageNumber }}: {{ .Title }}|{{ .IsHome }}|{{ i18n \"hello\" }}|{{ .Permalink }}|{{ .Site.Data.hugo.slogan }}|String Resource: {{ ( \"Hugo Pipes\" | resources.FromString \"text/pipes.txt\").RelPermalink }}", - "_default/terms.html", "Taxonomy Term Page " + listTemplateCommon, - "_default/taxonomy.html", "Taxonomy List Page " + listTemplateCommon, + // Shortcodes "shortcodes/shortcode.html", "Shortcode: {{ i18n \"hello\" }}", // A shortcode in multiple languages