mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-30 02:43:32 -05:00
Support non-md files as archetype files
It now properly uses the extension of the target file to determine archetype file. Fixes #3597 Fixes #3618
This commit is contained in:
parent
0f40e1fadf
commit
19f2e72913
3 changed files with 23 additions and 8 deletions
|
@ -30,10 +30,11 @@ import (
|
||||||
func NewContent(
|
func NewContent(
|
||||||
ps *helpers.PathSpec,
|
ps *helpers.PathSpec,
|
||||||
siteFactory func(filename string, siteUsed bool) (*hugolib.Site, error), kind, targetPath string) error {
|
siteFactory func(filename string, siteUsed bool) (*hugolib.Site, error), kind, targetPath string) error {
|
||||||
|
ext := helpers.Ext(targetPath)
|
||||||
|
|
||||||
jww.INFO.Println("attempting to create ", targetPath, "of", kind)
|
jww.INFO.Printf("attempting to create %q of %q of ext %q", targetPath, kind, ext)
|
||||||
|
|
||||||
archetypeFilename := findArchetype(ps, kind)
|
archetypeFilename := findArchetype(ps, kind, ext)
|
||||||
|
|
||||||
f, err := ps.Fs.Source.Open(archetypeFilename)
|
f, err := ps.Fs.Source.Open(archetypeFilename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -84,7 +85,7 @@ func NewContent(
|
||||||
// FindArchetype takes a given kind/archetype of content and returns an output
|
// FindArchetype takes a given kind/archetype of content and returns an output
|
||||||
// path for that archetype. If no archetype is found, an empty string is
|
// path for that archetype. If no archetype is found, an empty string is
|
||||||
// returned.
|
// returned.
|
||||||
func findArchetype(ps *helpers.PathSpec, kind string) (outpath string) {
|
func findArchetype(ps *helpers.PathSpec, kind, ext string) (outpath string) {
|
||||||
search := []string{ps.AbsPathify(ps.Cfg.GetString("archetypeDir"))}
|
search := []string{ps.AbsPathify(ps.Cfg.GetString("archetypeDir"))}
|
||||||
|
|
||||||
if ps.Cfg.GetString("theme") != "" {
|
if ps.Cfg.GetString("theme") != "" {
|
||||||
|
@ -100,13 +101,16 @@ func findArchetype(ps *helpers.PathSpec, kind string) (outpath string) {
|
||||||
// If the new content isn't in a subdirectory, kind == "".
|
// If the new content isn't in a subdirectory, kind == "".
|
||||||
// Therefore it should be excluded otherwise `is a directory`
|
// Therefore it should be excluded otherwise `is a directory`
|
||||||
// error will occur. github.com/gohugoio/hugo/issues/411
|
// error will occur. github.com/gohugoio/hugo/issues/411
|
||||||
var pathsToCheck []string
|
var pathsToCheck = []string{"default"}
|
||||||
|
|
||||||
if kind == "" {
|
if ext != "" {
|
||||||
pathsToCheck = []string{"default.md", "default"}
|
if kind != "" {
|
||||||
} else {
|
pathsToCheck = append([]string{kind + ext, "default" + ext}, pathsToCheck...)
|
||||||
pathsToCheck = []string{kind + ".md", kind, "default.md", "default"}
|
} else {
|
||||||
|
pathsToCheck = append([]string{"default" + ext}, pathsToCheck...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, p := range pathsToCheck {
|
for _, p := range pathsToCheck {
|
||||||
curpath := filepath.Join(x, p)
|
curpath := filepath.Join(x, p)
|
||||||
jww.DEBUG.Println("checking", curpath, "for archetypes")
|
jww.DEBUG.Println("checking", curpath, "for archetypes")
|
||||||
|
|
|
@ -44,6 +44,7 @@ func TestNewContent(t *testing.T) {
|
||||||
expected []string
|
expected []string
|
||||||
}{
|
}{
|
||||||
{"post", "post/sample-1.md", []string{`title = "Post Arch title"`, `test = "test1"`, "date = \"2015-01-12T19:20:04-07:00\""}},
|
{"post", "post/sample-1.md", []string{`title = "Post Arch title"`, `test = "test1"`, "date = \"2015-01-12T19:20:04-07:00\""}},
|
||||||
|
{"post", "post/org-1.org", []string{`#+title: ORG-1`}},
|
||||||
{"emptydate", "post/sample-ed.md", []string{`title = "Empty Date Arch title"`, `test = "test1"`}},
|
{"emptydate", "post/sample-ed.md", []string{`title = "Empty Date Arch title"`, `test = "test1"`}},
|
||||||
{"stump", "stump/sample-2.md", []string{`title = "Sample 2"`}}, // no archetype file
|
{"stump", "stump/sample-2.md", []string{`title = "Sample 2"`}}, // no archetype file
|
||||||
{"", "sample-3.md", []string{`title = "Sample 3"`}}, // no archetype
|
{"", "sample-3.md", []string{`title = "Sample 3"`}}, // no archetype
|
||||||
|
@ -111,6 +112,10 @@ func initFs(fs *hugofs.Fs) error {
|
||||||
path: filepath.Join("archetypes", "post.md"),
|
path: filepath.Join("archetypes", "post.md"),
|
||||||
content: "+++\ndate = \"2015-01-12T19:20:04-07:00\"\ntitle = \"Post Arch title\"\ntest = \"test1\"\n+++\n",
|
content: "+++\ndate = \"2015-01-12T19:20:04-07:00\"\ntitle = \"Post Arch title\"\ntest = \"test1\"\n+++\n",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: filepath.Join("archetypes", "post.org"),
|
||||||
|
content: "#+title: {{ .BaseFileName | upper }}",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: filepath.Join("archetypes", "product.md"),
|
path: filepath.Join("archetypes", "product.md"),
|
||||||
content: `+++
|
content: `+++
|
||||||
|
|
|
@ -287,6 +287,12 @@ func GetDottedRelativePath(inPath string) string {
|
||||||
return dottedPath
|
return dottedPath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ext takes a path and returns the extension, including the delmiter, i.e. ".md".
|
||||||
|
func Ext(in string) string {
|
||||||
|
_, ext := fileAndExt(in, fpb)
|
||||||
|
return ext
|
||||||
|
}
|
||||||
|
|
||||||
// Filename takes a path, strips out the extension,
|
// Filename takes a path, strips out the extension,
|
||||||
// and returns the name of the file.
|
// and returns the name of the file.
|
||||||
func Filename(in string) (name string) {
|
func Filename(in string) (name string) {
|
||||||
|
|
Loading…
Reference in a new issue