mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
create: Make sure the build lock is released before we open editor
Fixes #9121
This commit is contained in:
parent
82c33c7105
commit
166862a096
1 changed files with 33 additions and 18 deletions
|
@ -56,11 +56,6 @@ func NewContent(h *hugolib.HugoSites, kind, targetPath string) error {
|
||||||
if h.BaseFs.Content.Dirs == nil {
|
if h.BaseFs.Content.Dirs == nil {
|
||||||
return errors.New("no existing content directory configured for this project")
|
return errors.New("no existing content directory configured for this project")
|
||||||
}
|
}
|
||||||
unlock, err := h.BaseFs.LockBuild()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to acquire a build lock: %s", err)
|
|
||||||
}
|
|
||||||
defer unlock()
|
|
||||||
|
|
||||||
cf := hugolib.NewContentFactory(h)
|
cf := hugolib.NewContentFactory(h)
|
||||||
|
|
||||||
|
@ -83,19 +78,39 @@ func NewContent(h *hugolib.HugoSites, kind, targetPath string) error {
|
||||||
|
|
||||||
b.setArcheTypeFilenameToUse(ext)
|
b.setArcheTypeFilenameToUse(ext)
|
||||||
|
|
||||||
if b.isDir {
|
withBuildLock := func() (string, error) {
|
||||||
return b.buildDir()
|
unlock, err := h.BaseFs.LockBuild()
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("failed to acquire a build lock: %s", err)
|
||||||
|
}
|
||||||
|
defer unlock()
|
||||||
|
|
||||||
|
if b.isDir {
|
||||||
|
return "", b.buildDir()
|
||||||
|
}
|
||||||
|
|
||||||
|
if ext == "" {
|
||||||
|
return "", errors.Errorf("failed to resolve %q to a archetype template", targetPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !files.IsContentFile(b.targetPath) {
|
||||||
|
return "", errors.Errorf("target path %q is not a known content format", b.targetPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
return b.buildFile()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ext == "" {
|
filename, err := withBuildLock()
|
||||||
return errors.Errorf("failed to resolve %q to a archetype template", targetPath)
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !files.IsContentFile(b.targetPath) {
|
if filename != "" {
|
||||||
return errors.Errorf("target path %q is not a known content format", b.targetPath)
|
return b.openInEditorIfConfigured(filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
return b.buildFile()
|
return nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,15 +210,15 @@ func (b *contentBuilder) buildDir() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *contentBuilder) buildFile() error {
|
func (b *contentBuilder) buildFile() (string, error) {
|
||||||
contentPlaceholderAbsFilename, err := b.cf.CreateContentPlaceHolder(b.targetPath)
|
contentPlaceholderAbsFilename, err := b.cf.CreateContentPlaceHolder(b.targetPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
usesSite, err := b.usesSiteVar(b.archetypeFilename)
|
usesSite, err := b.usesSiteVar(b.archetypeFilename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
var contentInclusionFilter *glob.FilenameFilter
|
var contentInclusionFilter *glob.FilenameFilter
|
||||||
|
@ -216,16 +231,16 @@ func (b *contentBuilder) buildFile() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := b.h.Build(hugolib.BuildCfg{NoBuildLock: true, SkipRender: true, ContentInclusionFilter: contentInclusionFilter}); err != nil {
|
if err := b.h.Build(hugolib.BuildCfg{NoBuildLock: true, SkipRender: true, ContentInclusionFilter: contentInclusionFilter}); err != nil {
|
||||||
return err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := b.applyArcheType(contentPlaceholderAbsFilename, b.archetypeFilename); err != nil {
|
if err := b.applyArcheType(contentPlaceholderAbsFilename, b.archetypeFilename); err != nil {
|
||||||
return err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
b.h.Log.Infof("Content %q created", contentPlaceholderAbsFilename)
|
b.h.Log.Infof("Content %q created", contentPlaceholderAbsFilename)
|
||||||
|
|
||||||
return b.openInEditorIfConfigured(contentPlaceholderAbsFilename)
|
return contentPlaceholderAbsFilename, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *contentBuilder) setArcheTypeFilenameToUse(ext string) {
|
func (b *contentBuilder) setArcheTypeFilenameToUse(ext string) {
|
||||||
|
|
Loading…
Reference in a new issue