aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2019-05-31 09:40:58 +0200
committerBjørn Erik Pedersen <[email protected]>2019-06-09 16:55:08 +0200
commit3e6cb2cb77e16be5b6ddd4ae55d5fc6bfba2d226 (patch)
tree849651cfad7c4aed5c37691bc516845b6734bd94
parent8d898ad6672e0ccb62c5a29b6fccab24d980f104 (diff)
downloadhugo-3e6cb2cb77e16be5b6ddd4ae55d5fc6bfba2d226.tar.gz
hugo-3e6cb2cb77e16be5b6ddd4ae55d5fc6bfba2d226.zip
hugolib: Fix bundle path when slug is set
Fixes #4870
-rw-r--r--hugolib/page__paths.go16
-rw-r--r--hugolib/pagebundler_test.go39
-rw-r--r--hugolib/testhelpers_test.go4
-rw-r--r--resources/page/page_paths.go2
4 files changed, 54 insertions, 7 deletions
diff --git a/hugolib/page__paths.go b/hugolib/page__paths.go
index adbdb4668..a9152f44a 100644
--- a/hugolib/page__paths.go
+++ b/hugolib/page__paths.go
@@ -15,6 +15,9 @@ package hugolib
import (
"net/url"
+ "strings"
+
+ "github.com/gohugoio/hugo/helpers"
"github.com/gohugoio/hugo/resources/page"
)
@@ -95,8 +98,9 @@ func (l pagePaths) OutputFormats() page.OutputFormats {
func createTargetPathDescriptor(s *Site, p page.Page, pm *pageMeta) (page.TargetPathDescriptor, error) {
var (
- dir string
- baseName string
+ dir string
+ baseName string
+ contentBaseName string
)
d := s.Deps
@@ -104,6 +108,14 @@ func createTargetPathDescriptor(s *Site, p page.Page, pm *pageMeta) (page.Target
if !p.File().IsZero() {
dir = p.File().Dir()
baseName = p.File().TranslationBaseName()
+ contentBaseName = p.File().ContentBaseName()
+ }
+
+ if baseName != contentBaseName {
+ // See https://github.com/gohugoio/hugo/issues/4870
+ // A leaf bundle
+ dir = strings.TrimSuffix(dir, contentBaseName+helpers.FilePathSeparator)
+ baseName = contentBaseName
}
alwaysInSubDir := p.Kind() == kindSitemap
diff --git a/hugolib/pagebundler_test.go b/hugolib/pagebundler_test.go
index 64c1529d8..79e0a107d 100644
--- a/hugolib/pagebundler_test.go
+++ b/hugolib/pagebundler_test.go
@@ -460,7 +460,7 @@ HEADLESS {{< myShort >}}
assert.Equal(1, len(s.headlessPages))
regular := s.getPage(page.KindPage, "a/index")
- assert.Equal("/a/s1/", regular.RelPermalink())
+ assert.Equal("/s1/", regular.RelPermalink())
headless := s.getPage(page.KindPage, "b/index")
assert.NotNil(headless)
@@ -481,12 +481,12 @@ HEADLESS {{< myShort >}}
th := testHelper{s.Cfg, s.Fs, t}
- th.assertFileContent(filepath.FromSlash(workDir+"/public/a/s1/index.html"), "TheContent")
- th.assertFileContent(filepath.FromSlash(workDir+"/public/a/s1/l1.png"), "PNG")
+ th.assertFileContent(filepath.FromSlash(workDir+"/public/s1/index.html"), "TheContent")
+ th.assertFileContent(filepath.FromSlash(workDir+"/public/s1/l1.png"), "PNG")
- th.assertFileNotExist(workDir + "/public/b/s2/index.html")
+ th.assertFileNotExist(workDir + "/public/s2/index.html")
// But the bundled resources needs to be published
- th.assertFileContent(filepath.FromSlash(workDir+"/public/b/s2/l1.png"), "PNG")
+ th.assertFileContent(filepath.FromSlash(workDir+"/public/s2/l1.png"), "PNG")
}
@@ -942,3 +942,32 @@ date: 2017-01-15
b.AssertFileContent("public/mybundle/data.json", "My changed data")
}
+
+// https://github.com/gohugoio/hugo/issues/4870
+func TestBundleSlug(t *testing.T) {
+ t.Parallel()
+ assert := require.New(t)
+
+ const pageTemplate = `---
+title: Title
+slug: %s
+---
+`
+
+ b := newTestSitesBuilder(t)
+
+ b.WithTemplatesAdded("index.html", `{{ range .Site.RegularPages }}|{{ .RelPermalink }}{{ end }}|`)
+ b.WithSimpleConfigFile().
+ WithContent("about/services1/misc.md", fmt.Sprintf(pageTemplate, "this-is-the-slug")).
+ WithContent("about/services2/misc/index.md", fmt.Sprintf(pageTemplate, "this-is-another-slug"))
+
+ b.CreateSites().Build(BuildCfg{})
+
+ b.AssertHome(
+ "|/about/services1/this-is-the-slug/|/",
+ "|/about/services2/this-is-another-slug/|")
+
+ assert.True(b.CheckExists("public/about/services1/this-is-the-slug/index.html"))
+ assert.True(b.CheckExists("public/about/services2/this-is-another-slug/index.html"))
+
+}
diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go
index fe0f824f2..8c72e10d0 100644
--- a/hugolib/testhelpers_test.go
+++ b/hugolib/testhelpers_test.go
@@ -549,6 +549,10 @@ func (s *sitesBuilder) AssertFileContentFn(filename string, f func(s string) boo
}
}
+func (s *sitesBuilder) AssertHome(matches ...string) {
+ s.AssertFileContent("public/index.html", matches...)
+}
+
func (s *sitesBuilder) AssertFileContent(filename string, matches ...string) {
content := s.FileContent(filename)
for _, match := range matches {
diff --git a/resources/page/page_paths.go b/resources/page/page_paths.go
index fd231e72b..247c4dfcb 100644
--- a/resources/page/page_paths.go
+++ b/resources/page/page_paths.go
@@ -221,6 +221,8 @@ func CreateTargetPaths(d TargetPathDescriptor) (tp TargetPaths) {
link = pagePath
+ // TODO(bep) this should not happen after the fix in https://github.com/gohugoio/hugo/issues/4870
+ // but we may need some more testing before we can remove it.
if baseNameSameAsType {
link = strings.TrimSuffix(link, d.BaseName)
}