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 {
|
func (s *Service) WritePost(site models.Site, post models.Post) models.Job {
|
||||||
return models.Jobs(
|
return models.Job{
|
||||||
models.Job{
|
Do: func(ctx context.Context) error {
|
||||||
Do: func(ctx context.Context) error {
|
rbn, err := s.fullRebuildNecessary(ctx, site)
|
||||||
return s.writePost(site, post)
|
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 {
|
func (s *Service) WriteAllPosts(site models.Site) models.Job {
|
||||||
|
|
|
@ -8,21 +8,25 @@ import (
|
||||||
func (s *Service) Publish(site models.Site) models.Job {
|
func (s *Service) Publish(site models.Site) models.Job {
|
||||||
return models.Job{
|
return models.Job{
|
||||||
Do: func(ctx context.Context) error {
|
Do: func(ctx context.Context) error {
|
||||||
targets, err := s.db.GetPublishTargets(ctx, site.ID)
|
return s.publish(ctx, site)
|
||||||
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) 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 {
|
func (s *Service) publishTarget(ctx context.Context, site models.Site, target models.PublishTarget) error {
|
||||||
outDir, cleanFn, err := s.hugo.PublishSite(ctx, site, target)
|
outDir, cleanFn, err := s.hugo.PublishSite(ctx, site, target)
|
||||||
//defer func() {
|
//defer func() {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"lmika.dev/lmika/hugo-cms/providers/themes"
|
"lmika.dev/lmika/hugo-cms/providers/themes"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Service struct {
|
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 {
|
func (s *Service) createSite(ctx context.Context, site models.Site) error {
|
||||||
themeMeta, ok := s.themes.Lookup(site.Theme)
|
themeMeta, ok := s.themes.Lookup(site.Theme)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|
Loading…
Reference in a new issue