Skip to content
Permalink
Browse files

hugolib: Fix bundle path when slug is set

Fixes #4870
  • Loading branch information...
bep committed May 31, 2019
1 parent 8d898ad commit 3e6cb2cb77e16be5b6ddd4ae55d5fc6bfba2d226
Showing with 54 additions and 7 deletions.
  1. +14 −2 hugolib/page__paths.go
  2. +34 −5 hugolib/pagebundler_test.go
  3. +4 −0 hugolib/testhelpers_test.go
  4. +2 −0 resources/page/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,15 +98,24 @@ 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

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
@@ -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"))

}
@@ -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 {
@@ -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)
}

0 comments on commit 3e6cb2c

Please sign in to comment.
You can’t perform that action at this time.