mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Improve error when we cannot determine content directory in "hugo new"
See #9166
This commit is contained in:
parent
08552a7a4c
commit
b8155452ac
3 changed files with 20 additions and 13 deletions
|
@ -60,7 +60,11 @@ func NewContent(h *hugolib.HugoSites, kind, targetPath string) error {
|
||||||
cf := hugolib.NewContentFactory(h)
|
cf := hugolib.NewContentFactory(h)
|
||||||
|
|
||||||
if kind == "" {
|
if kind == "" {
|
||||||
kind = cf.SectionFromFilename(targetPath)
|
var err error
|
||||||
|
kind, err = cf.SectionFromFilename(targetPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
b := &contentBuilder{
|
b := &contentBuilder{
|
||||||
|
|
|
@ -93,25 +93,28 @@ func (f ContentFactory) AppplyArchetypeTemplate(w io.Writer, p page.Page, archet
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f ContentFactory) SectionFromFilename(filename string) string {
|
func (f ContentFactory) SectionFromFilename(filename string) (string, error) {
|
||||||
filename = filepath.Clean(filename)
|
filename = filepath.Clean(filename)
|
||||||
rel, _ := f.h.AbsProjectContentDir(filename)
|
rel, _, err := f.h.AbsProjectContentDir(filename)
|
||||||
if rel == "" {
|
if err != nil {
|
||||||
return ""
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
parts := strings.Split(helpers.ToSlashTrimLeading(rel), "/")
|
parts := strings.Split(helpers.ToSlashTrimLeading(rel), "/")
|
||||||
if len(parts) < 2 {
|
if len(parts) < 2 {
|
||||||
return ""
|
return "", nil
|
||||||
}
|
}
|
||||||
return parts[0]
|
return parts[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateContentPlaceHolder creates a content placeholder file inside the
|
// CreateContentPlaceHolder creates a content placeholder file inside the
|
||||||
// best matching content directory.
|
// best matching content directory.
|
||||||
func (f ContentFactory) CreateContentPlaceHolder(filename string) (string, error) {
|
func (f ContentFactory) CreateContentPlaceHolder(filename string) (string, error) {
|
||||||
filename = filepath.Clean(filename)
|
filename = filepath.Clean(filename)
|
||||||
_, abs := f.h.AbsProjectContentDir(filename)
|
_, abs, err := f.h.AbsProjectContentDir(filename)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
// This will be overwritten later, just write a placholder to get
|
// This will be overwritten later, just write a placholder to get
|
||||||
// the paths correct.
|
// the paths correct.
|
||||||
|
|
|
@ -132,7 +132,7 @@ func (b *BaseFs) RelContentDir(filename string) string {
|
||||||
|
|
||||||
// AbsProjectContentDir tries to construct a filename below the most
|
// AbsProjectContentDir tries to construct a filename below the most
|
||||||
// relevant content directory.
|
// relevant content directory.
|
||||||
func (b *BaseFs) AbsProjectContentDir(filename string) (string, string) {
|
func (b *BaseFs) AbsProjectContentDir(filename string) (string, string, error) {
|
||||||
isAbs := filepath.IsAbs(filename)
|
isAbs := filepath.IsAbs(filename)
|
||||||
for _, dir := range b.SourceFilesystems.Content.Dirs {
|
for _, dir := range b.SourceFilesystems.Content.Dirs {
|
||||||
meta := dir.Meta()
|
meta := dir.Meta()
|
||||||
|
@ -141,14 +141,14 @@ func (b *BaseFs) AbsProjectContentDir(filename string) (string, string) {
|
||||||
}
|
}
|
||||||
if isAbs {
|
if isAbs {
|
||||||
if strings.HasPrefix(filename, meta.Filename) {
|
if strings.HasPrefix(filename, meta.Filename) {
|
||||||
return strings.TrimPrefix(filename, meta.Filename), filename
|
return strings.TrimPrefix(filename, meta.Filename), filename, nil
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
contentDir := strings.TrimPrefix(strings.TrimPrefix(meta.Filename, meta.BaseDir), filePathSeparator)
|
contentDir := strings.TrimPrefix(strings.TrimPrefix(meta.Filename, meta.BaseDir), filePathSeparator)
|
||||||
if strings.HasPrefix(filename, contentDir) {
|
if strings.HasPrefix(filename, contentDir) {
|
||||||
relFilename := strings.TrimPrefix(filename, contentDir)
|
relFilename := strings.TrimPrefix(filename, contentDir)
|
||||||
absFilename := filepath.Join(meta.Filename, relFilename)
|
absFilename := filepath.Join(meta.Filename, relFilename)
|
||||||
return relFilename, absFilename
|
return relFilename, absFilename, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,12 +162,12 @@ func (b *BaseFs) AbsProjectContentDir(filename string) (string, string) {
|
||||||
for i := len(contentDirs) - 1; i >= 0; i-- {
|
for i := len(contentDirs) - 1; i >= 0; i-- {
|
||||||
meta := contentDirs[i].Meta()
|
meta := contentDirs[i].Meta()
|
||||||
if meta.Module == "project" {
|
if meta.Module == "project" {
|
||||||
return filename, filepath.Join(meta.Filename, filename)
|
return filename, filepath.Join(meta.Filename, filename), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return "", ""
|
return "", "", errors.Errorf("could not determine content directory for %q", filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResolveJSConfigFile resolves the JS-related config file to a absolute
|
// ResolveJSConfigFile resolves the JS-related config file to a absolute
|
||||||
|
|
Loading…
Reference in a new issue