Added logic to detect whether a full rebuild is necessary when writing posts.
This commit is contained in:
parent
f8e03463a6
commit
ee45760cf1
|
@ -13,14 +13,21 @@ import (
|
|||
)
|
||||
|
||||
func (s *Service) WritePost(site models.Site, post models.Post) models.Job {
|
||||
return models.Jobs(
|
||||
models.Job{
|
||||
Do: func(ctx context.Context) error {
|
||||
return s.writePost(site, post)
|
||||
},
|
||||
return models.Job{
|
||||
Do: func(ctx context.Context) error {
|
||||
rbn, err := s.fullRebuildNecessary(ctx, site)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if rbn {
|
||||
return s.RebuildSite(site).Do(ctx)
|
||||
}
|
||||
|
||||
if err := s.writePost(site, post); err != nil {
|
||||
return err
|
||||
}
|
||||
return s.publish(ctx, site)
|
||||
},
|
||||
s.Publish(site),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) WriteAllPosts(site models.Site) models.Job {
|
||||
|
|
|
@ -8,21 +8,25 @@ import (
|
|||
func (s *Service) Publish(site models.Site) models.Job {
|
||||
return models.Job{
|
||||
Do: func(ctx context.Context) error {
|
||||
targets, err := s.db.GetPublishTargets(ctx, site.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, target := range targets {
|
||||
if err := s.publishTarget(ctx, site, target); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return s.publish(ctx, site)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) publish(ctx context.Context, site models.Site) error {
|
||||
targets, err := s.db.GetPublishTargets(ctx, site.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, target := range targets {
|
||||
if err := s.publishTarget(ctx, site, target); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Service) publishTarget(ctx context.Context, site models.Site, target models.PublishTarget) error {
|
||||
outDir, cleanFn, err := s.hugo.PublishSite(ctx, site, target)
|
||||
//defer func() {
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
"lmika.dev/lmika/hugo-cms/providers/themes"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
|
@ -63,6 +64,41 @@ func (s *Service) RebuildSite(site models.Site) models.Job {
|
|||
)
|
||||
}
|
||||
|
||||
func (s *Service) fullRebuildNecessary(ctx context.Context, site models.Site) (bool, error) {
|
||||
dirsMustExists := []string{
|
||||
s.hugo.SiteStagingDir(site, hugo.BaseSiteDir),
|
||||
s.hugo.SiteStagingDir(site, hugo.ThemeSiteDir),
|
||||
s.hugo.SiteStagingDir(site, hugo.ContentSiteDir),
|
||||
}
|
||||
|
||||
filesMustExists := []string{
|
||||
filepath.Join(s.hugo.SiteStagingDir(site, hugo.BaseSiteDir), "hugo.toml"),
|
||||
}
|
||||
|
||||
for _, dir := range dirsMustExists {
|
||||
if stat, err := os.Stat(dir); err != nil {
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
return true, nil
|
||||
} else {
|
||||
return false, err
|
||||
}
|
||||
} else if !stat.IsDir() {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
|
||||
for _, file := range filesMustExists {
|
||||
if _, err := os.Stat(file); err != nil {
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
return true, nil
|
||||
} else {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func (s *Service) createSite(ctx context.Context, site models.Site) error {
|
||||
themeMeta, ok := s.themes.Lookup(site.Theme)
|
||||
if !ok {
|
||||
|
|
Loading…
Reference in a new issue