Skip to content

Commit

Permalink
hugolib: Restore 0.48 slash handling in taxonomies
Browse files Browse the repository at this point in the history
  • Loading branch information
bep committed Dec 30, 2018
1 parent 1a5a9d5 commit ae23b11
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 60 deletions.
4 changes: 2 additions & 2 deletions hugolib/hugo_sites_build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"), "List", "Bonjour")
b.AssertFileContent("public/en/tags/tag1/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")

// Check sitemaps
// Sitemaps behaves different: In a multilanguage setup there will always be a index file and
Expand Down
6 changes: 2 additions & 4 deletions hugolib/permalinks.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ type PermalinkOverrides map[string]pathPattern
// to be used to replace that tag.
var knownPermalinkAttributes map[string]pageToPermaAttribute

var attributeRegexp *regexp.Regexp
var attributeRegexp = regexp.MustCompile(`:\w+`)

// validate determines if a PathPattern is well-formed
func (pp pathPattern) validate() bool {
Expand Down Expand Up @@ -187,8 +187,7 @@ func pageToPermalinkSlugElseTitle(p *Page, a string) (string, error) {
}

func pageToPermalinkSection(p *Page, _ string) (string, error) {
// Page contains Node contains URLPath which has Section
return p.s.PathSpec.URLize(p.Section()), nil
return p.Section(), nil
}

func pageToPermalinkSections(p *Page, _ string) (string, error) {
Expand All @@ -211,5 +210,4 @@ func init() {
"filename": pageToPermalinkFilename,
}

attributeRegexp = regexp.MustCompile(`:\w+`)
}
3 changes: 2 additions & 1 deletion hugolib/permalinks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
package hugolib

import (
"path/filepath"
"strings"
"testing"
)
Expand Down Expand Up @@ -62,7 +63,7 @@ func TestPermalinkValidation(t *testing.T) {
func TestPermalinkExpansion(t *testing.T) {
t.Parallel()
s := newTestSite(t)
page, err := s.newPageFrom(strings.NewReader(simplePageJSON), "blue/test-page.md")
page, err := s.newPageFrom(strings.NewReader(simplePageJSON), filepath.FromSlash("blue/test-page.md"))

if err != nil {
t.Fatalf("failed before we began, could not parse simplePageJSON: %s", err)
Expand Down
15 changes: 11 additions & 4 deletions hugolib/site.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"mime"
"net/url"
"os"
"path"
"path/filepath"
"sort"
"strconv"
Expand Down Expand Up @@ -1587,16 +1588,22 @@ func (s *Site) resetBuildState() {
}

func (s *Site) kindFromSections(sections []string) string {
if len(sections) == 0 {
if len(sections) == 0 || len(s.Taxonomies) == 0 {
return KindSection
}

if _, isTaxonomy := s.Taxonomies[sections[0]]; isTaxonomy {
if len(sections) == 1 {
sectionPath := path.Join(sections...)

for k, _ := range s.Taxonomies {
if k == sectionPath {
return KindTaxonomyTerm
}
return KindTaxonomy

if strings.HasPrefix(sectionPath, k) {
return KindTaxonomy
}
}

return KindSection
}

Expand Down
122 changes: 77 additions & 45 deletions hugolib/taxonomy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,8 @@ category = "categories"
other = "others"
empty = "empties"
permalinked = "permalinkeds"
subcats = "subcats"
[permalinks]
permalinkeds = "/perma/:slug/"
subcats = "/subcats/:slug/"
`

pageTemplate := `---
Expand All @@ -92,8 +90,6 @@ others:
%s
permalinkeds:
%s
subcats:
%s
---
# Doc
`
Expand All @@ -105,16 +101,23 @@ subcats:

fs := th.Fs

writeSource(t, fs, "content/p1.md", fmt.Sprintf(pageTemplate, "t1/c1", "- Tag1", "- cat1\n- \"cAt/dOg\"", "- o1", "- pl1", ""))
writeSource(t, fs, "content/p2.md", fmt.Sprintf(pageTemplate, "t2/c1", "- tag2", "- cat1", "- o1", "- pl1", ""))
writeSource(t, fs, "content/p3.md", fmt.Sprintf(pageTemplate, "t2/c12", "- tag2", "- cat2", "- o1", "- pl1", ""))
writeSource(t, fs, "content/p4.md", fmt.Sprintf(pageTemplate, "Hello World", "", "", "- \"Hello Hugo world\"", "- pl1", ""))
writeSource(t, fs, "content/p5.md", fmt.Sprintf(pageTemplate, "Sub/categories", "", "", "", "", "- \"sc0/sp1\""))
if preserveTaxonomyNames {
writeSource(t, fs, "content/p1.md", fmt.Sprintf(pageTemplate, "t1/c1", "- tag1", "- cat1", "- o1", "- pl1"))
} else {
// Check lower-casing of tags
writeSource(t, fs, "content/p1.md", fmt.Sprintf(pageTemplate, "t1/c1", "- Tag1", "- cAt1", "- o1", "- pl1"))

}
writeSource(t, fs, "content/p2.md", fmt.Sprintf(pageTemplate, "t2/c1", "- tag2", "- cat1", "- o1", "- pl1"))
writeSource(t, fs, "content/p3.md", fmt.Sprintf(pageTemplate, "t2/c12", "- tag2", "- cat2", "- o1", "- pl1"))
writeSource(t, fs, "content/p4.md", fmt.Sprintf(pageTemplate, "Hello World", "", "", "- \"Hello Hugo world\"", "- pl1"))

writeNewContentFile(t, fs.Source, "Category Terms", "2017-01-01", "content/categories/_index.md", 10)
writeNewContentFile(t, fs.Source, "Tag1 List", "2017-01-01", "content/tags/Tag1/_index.md", 10)

require.NoError(t, h.Build(BuildCfg{}))
err := h.Build(BuildCfg{})

require.NoError(t, err)

// So what we have now is:
// 1. categories with terms content page, but no content page for the only c1 category
Expand All @@ -132,11 +135,10 @@ subcats:
// 1.
if preserveTaxonomyNames {
th.assertFileContent(pathFunc("public/categories/cat1/index.html"), "List", "cat1")
th.assertFileContent(pathFunc("public/categories/cat-dog/index.html"), "List", "cAt/dOg")
} else {
th.assertFileContent(pathFunc("public/categories/cat1/index.html"), "List", "Cat1")
th.assertFileContent(pathFunc("public/categories/cat-dog/index.html"), "List", "Cat/Dog")
}

th.assertFileContent(pathFunc("public/categories/index.html"), "Terms List", "Category Terms")

// 2.
Expand Down Expand Up @@ -172,57 +174,41 @@ subcats:
// of KindTaxonomy pages in its Pages slice.
taxonomyTermPageCounts := map[string]int{
"tags": 2,
"categories": 3,
"categories": 2,
"others": 2,
"empties": 0,
"permalinkeds": 1,
"subcats": 1,
}

for taxonomy, count := range taxonomyTermPageCounts {
term := s.getPage(KindTaxonomyTerm, taxonomy)
require.NotNil(t, term)
require.Len(t, term.Pages, count, taxonomy)
require.Len(t, term.Pages, count)

for _, page := range term.Pages {
require.Equal(t, KindTaxonomy, page.Kind)
}
}

fixTerm := func(s string) string {
if preserveTaxonomyNames {
return s
}
return strings.ToLower(s)
}

fixURL := func(s string) string {
if uglyURLs {
return strings.TrimRight(s, "/") + ".html"
}
return s
}

cat1 := s.getPage(KindTaxonomy, "categories", "cat1")
require.NotNil(t, cat1)
require.Equal(t, fixURL("/blog/categories/cat1/"), cat1.RelPermalink())

catdog := s.getPage(KindTaxonomy, "categories", fixTerm("cAt/dOg"))
require.NotNil(t, catdog)
require.Equal(t, fixURL("/blog/categories/cat-dog/"), catdog.RelPermalink())
if uglyURLs {
require.Equal(t, "/blog/categories/cat1.html", cat1.RelPermalink())
} else {
require.Equal(t, "/blog/categories/cat1/", cat1.RelPermalink())
}

pl1 := s.getPage(KindTaxonomy, "permalinkeds", "pl1")
require.NotNil(t, pl1)
require.Equal(t, fixURL("/blog/perma/pl1/"), pl1.RelPermalink())

permalinkeds := s.getPage(KindTaxonomyTerm, "permalinkeds")
require.NotNil(t, pl1)
require.NotNil(t, permalinkeds)
require.Equal(t, fixURL("/blog/permalinkeds/"), permalinkeds.RelPermalink())

// Issue #5223
sp1 := s.getPage(KindTaxonomy, "subcats", "sc0/sp1")
require.NotNil(t, sp1)
require.Equal(t, fixURL("/blog/subcats/sc0/sp1/"), sp1.RelPermalink())
if uglyURLs {
require.Equal(t, "/blog/perma/pl1.html", pl1.RelPermalink())
require.Equal(t, "/blog/permalinkeds.html", permalinkeds.RelPermalink())
} else {
require.Equal(t, "/blog/perma/pl1/", pl1.RelPermalink())
require.Equal(t, "/blog/permalinkeds/", permalinkeds.RelPermalink())
}

// Issue #3070 preserveTaxonomyNames
if preserveTaxonomyNames {
Expand All @@ -241,20 +227,25 @@ subcats:
}

// https://github.com/gohugoio/hugo/issues/5513
func TestTaxonomyPathSeparation(t *testing.T) {
// https://github.com/gohugoio/hugo/issues/5571
func TestTaxonomiesPathSeparation(t *testing.T) {
t.Parallel()

config := `
baseURL = "https://example.com"
[taxonomies]
"news/tag" = "news/tags"
"news/category" = "news/categories"
"t1/t2/t3" = "t1/t2/t3s"
"s1/s2/s3" = "s1/s2/s3s"
`

pageContent := `
+++
title = "foo"
"news/categories" = ["a", "b", "c"]
"news/categories" = ["a", "b", "c", "d/e", "f/g/h"]
"t1/t2/t3s" = ["t4/t5", "t4/t5/t6"]
"s1/s2/s3s" = ["i0", "i12", "i32"]
+++
Content.
`
Expand All @@ -268,9 +259,50 @@ title: "This is B"
---
`)

b.WithContent("news/categories/f/g/h/_index.md", `
---
title: "This is H"
---
`)

b.WithContent("t1/t2/t3s/t4/t5/_index.md", `
---
title: "This is T5"
---
`)

b.WithContent("s1/s2/s3s/_index.md", `
---
title: "This is S3s"
---
`)

for i := 0; i < 50; i++ {
if i == 12 {
continue
}
b.WithContent(fmt.Sprintf("s1/s2/s3s/i%d/_index.md", i), fmt.Sprintf(`
---
title: "This is S3s%d"
---
`, i))

}

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/|")
b.AssertFileContent("public/news/categories/d/e/index.html", "Taxonomy List Page 1|D/E|Hello|https://example.com/news/categories/d/e/|")
b.AssertFileContent("public/news/categories/f/g/h/index.html", "Taxonomy List Page 1|This is H|Hello|https://example.com/news/categories/f/g/h/|")
b.AssertFileContent("public/t1/t2/t3s/t4/t5/index.html", "Taxonomy List Page 1|This is T5|Hello|https://example.com/t1/t2/t3s/t4/t5/|")
b.AssertFileContent("public/t1/t2/t3s/t4/t5/t6/index.html", "Taxonomy List Page 1|T4/T5/T6|Hello|https://example.com/t1/t2/t3s/t4/t5/t6/|")
b.AssertFileContent("public/t1/t2/t3s/index.html", "Taxonomy Term Page 1|T1/T2/T3s|Hello|https://example.com/t1/t2/t3s/|")
b.AssertFileContent("public/s1/s2/s3s/index.html", "Taxonomy Term Page 1|This is S3s|Hello|https://example.com/s1/s2/s3s/|")
for i := 0; i < 50; i++ {
if i != 12 {
b.AssertFileContent(fmt.Sprintf("public/s1/s2/s3s/i%d/index.html", i), fmt.Sprintf("Taxonomy List Page 1|This is S3s%d|Hello|https://example.com/s1/s2/s3s/i%d/|", i, i))
}
}
}
9 changes: 5 additions & 4 deletions hugolib/testhelpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -407,9 +407,7 @@ date: "2018-02-28"
---
# doc1
*some "content"*
{{< shortcode >}}
{{< lingo >}}
`

Expand All @@ -420,12 +418,15 @@ 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", "{{ $p := .Paginator }}List Page {{ $p.PageNumber }}: {{ .Title }}|{{ i18n \"hello\" }}|{{ .Permalink }}|Pager: {{ template \"_internal/pagination.html\" . }}",
"_default/list.html", "List Page " + listTemplateCommon,
"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
Expand Down

0 comments on commit ae23b11

Please sign in to comment.