diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2021-11-15 10:25:30 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2021-11-15 11:21:39 +0100 |
commit | b8155452ac699473b6b2a34f53988dee01b4da34 (patch) | |
tree | 07f88f6bdac3f09d009dc818ab9a2b95facb03aa /hugolib | |
parent | 08552a7a4cd1fe64efdd2f1b95142fa4295cb298 (diff) |
Improve error when we cannot determine content directory in "hugo new"
See #9166
Diffstat (limited to 'hugolib')
-rw-r--r-- | hugolib/content_factory.go | 17 | ||||
-rw-r--r-- | hugolib/filesystems/basefs.go | 10 |
2 files changed, 15 insertions, 12 deletions
diff --git a/hugolib/content_factory.go b/hugolib/content_factory.go index 78583f14a..cc87dd9e5 100644 --- a/hugolib/content_factory.go +++ b/hugolib/content_factory.go @@ -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) - rel, _ := f.h.AbsProjectContentDir(filename) - if rel == "" { - return "" + rel, _, err := f.h.AbsProjectContentDir(filename) + if err != nil { + return "", err } parts := strings.Split(helpers.ToSlashTrimLeading(rel), "/") if len(parts) < 2 { - return "" + return "", nil } - return parts[0] + return parts[0], nil } // CreateContentPlaceHolder creates a content placeholder file inside the // best matching content directory. func (f ContentFactory) CreateContentPlaceHolder(filename string) (string, error) { 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 // the paths correct. diff --git a/hugolib/filesystems/basefs.go b/hugolib/filesystems/basefs.go index 939d88459..be765ef9d 100644 --- a/hugolib/filesystems/basefs.go +++ b/hugolib/filesystems/basefs.go @@ -132,7 +132,7 @@ func (b *BaseFs) RelContentDir(filename string) string { // AbsProjectContentDir tries to construct a filename below the most // relevant content directory. -func (b *BaseFs) AbsProjectContentDir(filename string) (string, string) { +func (b *BaseFs) AbsProjectContentDir(filename string) (string, string, error) { isAbs := filepath.IsAbs(filename) for _, dir := range b.SourceFilesystems.Content.Dirs { meta := dir.Meta() @@ -141,14 +141,14 @@ func (b *BaseFs) AbsProjectContentDir(filename string) (string, string) { } if isAbs { if strings.HasPrefix(filename, meta.Filename) { - return strings.TrimPrefix(filename, meta.Filename), filename + return strings.TrimPrefix(filename, meta.Filename), filename, nil } } else { contentDir := strings.TrimPrefix(strings.TrimPrefix(meta.Filename, meta.BaseDir), filePathSeparator) if strings.HasPrefix(filename, contentDir) { relFilename := strings.TrimPrefix(filename, contentDir) 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-- { meta := contentDirs[i].Meta() 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 |