Fix IsAncestor/IsDescendant for taxonomies
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 23 May 2020 13:04:00 +0000 (15:04 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 24 May 2020 10:35:45 +0000 (12:35 +0200)
Fixes #7305

hugolib/page__tree.go
hugolib/taxonomy_test.go

index 5b53dc4cd1c9e6a84340ac75be35257858308ba6..d2ef00e7614798dfb33f28d6ad4b65bd55762915 100644 (file)
@@ -50,10 +50,6 @@ func (pt pageTree) IsAncestor(other interface{}) (bool, error) {
                return ref1.n.p.IsHome(), nil
        }
 
-       if !ref1.isSection() {
-               return false, nil
-       }
-
        if ref1.key == ref2.key {
                return true, nil
        }
@@ -101,10 +97,6 @@ func (pt pageTree) IsDescendant(other interface{}) (bool, error) {
                return ref2.n.p.IsHome(), nil
        }
 
-       if !ref2.isSection() {
-               return false, nil
-       }
-
        if ref1.key == ref2.key {
                return true, nil
        }
index 1f43318fa58d78dc115a19778885767d8f73b6a6..97058dd19124358dd7b3d4e4e662393b64a95088 100644 (file)
@@ -655,3 +655,55 @@ Category Paginator /categories/birds/|/categories/cats/|/categories/dogs/|/categ
        b.AssertFileContent("public/categories/index.xml", `<link>http://example.com/categories/funny/</link>`)
 
 }
+
+func TestTaxonomiesDirectoryOverlaps(t *testing.T) {
+       t.Parallel()
+
+       b := newTestSitesBuilder(t).WithContent(
+               "abc/_index.md", "---\ntitle: \"abc\"\nabcdefgs: [abc]\n---",
+               "abc/p1.md", "---\ntitle: \"abc-p\"\n---",
+               "abcdefgh/_index.md", "---\ntitle: \"abcdefgh\"\n---",
+               "abcdefgh/p1.md", "---\ntitle: \"abcdefgh-p\"\n---",
+               "abcdefghijk/index.md", "---\ntitle: \"abcdefghijk\"\n---",
+       )
+
+       b.WithConfigFile("toml", `
+baseURL = "https://example.org"
+
+[taxonomies]
+  abcdef = "abcdefs"
+  abcdefg = "abcdefgs"
+  abcdefghi = "abcdefghis"
+`)
+
+       b.WithTemplatesAdded("index.html", `
+{{ range site.Pages }}Page: {{ template "print-page" . }}
+{{ end }}
+{{ $abc := site.GetPage "abcdefgs/abc" }}
+{{ $abcdefgs := site.GetPage "abcdefgs" }}
+abc: {{ template "print-page" $abc }}|IsAncestor: {{ $abc.IsAncestor $abcdefgs }}|IsDescendant: {{ $abc.IsDescendant $abcdefgs }}
+abcdefgs: {{ template "print-page" $abcdefgs }}|IsAncestor: {{ $abcdefgs.IsAncestor $abc }}|IsDescendant: {{ $abcdefgs.IsDescendant $abc }}
+
+{{ define "print-page" }}{{ .RelPermalink }}|{{ .Title }}|{{.Kind }}|Parent: {{ with .Parent }}{{ .RelPermalink }}{{ end }}|CurrentSection: {{ .CurrentSection.RelPermalink}}|FirstSection: {{ .FirstSection.RelPermalink }}{{ end }}
+
+`)
+
+       b.Build(BuildCfg{})
+
+       b.AssertFileContent("public/index.html", `
+    Page: /||home|Parent: |CurrentSection: /|
+    Page: /abc/|abc|section|Parent: /|CurrentSection: /abc/|
+    Page: /abc/p1/|abc-p|page|Parent: /abc/|CurrentSection: /abc/|
+    Page: /abcdefgh/|abcdefgh|section|Parent: /|CurrentSection: /abcdefgh/|
+    Page: /abcdefgh/p1/|abcdefgh-p|page|Parent: /abcdefgh/|CurrentSection: /abcdefgh/|
+    Page: /abcdefghijk/|abcdefghijk|page|Parent: /|CurrentSection: /|
+    Page: /abcdefghis/|Abcdefghis|taxonomyTerm|Parent: /|CurrentSection: /|
+    Page: /abcdefgs/|Abcdefgs|taxonomyTerm|Parent: /|CurrentSection: /|
+    Page: /abcdefs/|Abcdefs|taxonomyTerm|Parent: /|CurrentSection: /|
+    abc: /abcdefgs/abc/|abc|taxonomy|Parent: /abcdefgs/|CurrentSection: /abcdefgs/|
+    abcdefgs: /abcdefgs/|Abcdefgs|taxonomyTerm|Parent: /|CurrentSection: /|
+    abc: /abcdefgs/abc/|abc|taxonomy|Parent: /abcdefgs/|CurrentSection: /abcdefgs/|FirstSection: /|IsAncestor: false|IsDescendant: true
+    abcdefgs: /abcdefgs/|Abcdefgs|taxonomyTerm|Parent: /|CurrentSection: /|FirstSection: /|IsAncestor: true|IsDescendant: false
+`)
+
+}