mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
Fix path resolution in hugo new
With theme and project with content directories and command on the form `hugo new posts/test.md`. Fixes #9129
This commit is contained in:
parent
c09f5c5fd3
commit
2b01c85d14
3 changed files with 26 additions and 5 deletions
|
@ -35,7 +35,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO(bep) clean this up. Export the test site builder in Hugolib or something.
|
// TODO(bep) clean this up. Export the test site builder in Hugolib or something.
|
||||||
func TestNewContent(t *testing.T) {
|
func TestNewContentFromFile(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
name string
|
name string
|
||||||
kind string
|
kind string
|
||||||
|
|
|
@ -57,4 +57,22 @@ Hello World.
|
||||||
b.Assert(buf.String(), qt.Contains, `title: "Mypage"`)
|
b.Assert(buf.String(), qt.Contains, `title: "Mypage"`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Issue #9129
|
||||||
|
c.Run("Content in both project and theme", func(c *qt.C) {
|
||||||
|
b := newTestSitesBuilder(c)
|
||||||
|
b.WithConfigFile("toml", `
|
||||||
|
theme = 'ipsum'
|
||||||
|
`)
|
||||||
|
|
||||||
|
themeDir := filepath.Join("themes", "ipsum")
|
||||||
|
b.WithSourceFile("content/posts/foo.txt", `Hello.`)
|
||||||
|
b.WithSourceFile(filepath.Join(themeDir, "content/posts/foo.txt"), `Hello.`)
|
||||||
|
b.CreateSites()
|
||||||
|
cf := NewContentFactory(b.H)
|
||||||
|
abs, err := cf.CreateContentPlaceHolder(filepath.FromSlash("posts/test.md"))
|
||||||
|
b.Assert(err, qt.IsNil)
|
||||||
|
b.Assert(abs, qt.Equals, filepath.FromSlash("content/posts/test.md"))
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,11 +157,14 @@ func (b *BaseFs) AbsProjectContentDir(filename string) (string, string) {
|
||||||
if !isAbs {
|
if !isAbs {
|
||||||
// A filename on the form "posts/mypage.md", put it inside
|
// A filename on the form "posts/mypage.md", put it inside
|
||||||
// the first content folder, usually <workDir>/content.
|
// the first content folder, usually <workDir>/content.
|
||||||
// The Dirs are ordered with the most important last, so pick that.
|
// Pick the last project dir (which is probably the most important one).
|
||||||
contentDirs := b.SourceFilesystems.Content.Dirs
|
contentDirs := b.SourceFilesystems.Content.Dirs
|
||||||
firstContentDir := contentDirs[len(contentDirs)-1].Meta().Filename
|
for i := len(contentDirs) - 1; i >= 0; i-- {
|
||||||
return filename, filepath.Join(firstContentDir, filename)
|
meta := contentDirs[i].Meta()
|
||||||
|
if meta.Module == "project" {
|
||||||
|
return filename, filepath.Join(meta.Filename, filename)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return "", ""
|
return "", ""
|
||||||
|
|
Loading…
Reference in a new issue