diff options
author | Bjørn Erik Pedersen <[email protected]> | 2019-05-31 09:40:58 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2019-06-09 16:55:08 +0200 |
commit | 3e6cb2cb77e16be5b6ddd4ae55d5fc6bfba2d226 (patch) | |
tree | 849651cfad7c4aed5c37691bc516845b6734bd94 | |
parent | 8d898ad6672e0ccb62c5a29b6fccab24d980f104 (diff) | |
download | hugo-3e6cb2cb77e16be5b6ddd4ae55d5fc6bfba2d226.tar.gz hugo-3e6cb2cb77e16be5b6ddd4ae55d5fc6bfba2d226.zip |
hugolib: Fix bundle path when slug is set
Fixes #4870
-rw-r--r-- | hugolib/page__paths.go | 16 | ||||
-rw-r--r-- | hugolib/pagebundler_test.go | 39 | ||||
-rw-r--r-- | hugolib/testhelpers_test.go | 4 | ||||
-rw-r--r-- | resources/page/page_paths.go | 2 |
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) } |