|
|
|
@ -2,11 +2,11 @@ package caddyhugo |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"fmt" |
|
|
|
|
"os/exec" |
|
|
|
|
"path" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/gohugoio/hugo/deps" |
|
|
|
|
"github.com/gohugoio/hugo/hugofs" |
|
|
|
|
"github.com/gohugoio/hugo/hugolib" |
|
|
|
|
"github.com/spf13/afero" |
|
|
|
|
|
|
|
|
@ -18,35 +18,55 @@ const ( |
|
|
|
|
WebsocketFileTicker = 1 * time.Second |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type HugoInteractor interface { |
|
|
|
|
Render(srcdir, workdir string) HugoRenderer |
|
|
|
|
} |
|
|
|
|
// Publish really renders new content into the public directory
|
|
|
|
|
func (ch *CaddyHugo) Publish() error { |
|
|
|
|
err := ch.persistAllEdits() |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
cmd := exec.Command("hugo") |
|
|
|
|
cmd.Dir = ch.Dir |
|
|
|
|
_, err = cmd.CombinedOutput() |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type HugoRenderer interface { |
|
|
|
|
WriteContent(contents string) error |
|
|
|
|
Start() error |
|
|
|
|
Stop() error |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func HugoInternalProcessConfig(ch *CaddyHugo, es *editSession, touchFn func()) (idleshut.Config, error) { |
|
|
|
|
func buildSite(sites *hugolib.HugoSites) error { |
|
|
|
|
err := sites.Build(hugolib.BuildCfg{ResetState: true}) |
|
|
|
|
if err != nil { |
|
|
|
|
return fmt.Errorf("caddy-hugo: building site: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (ch *CaddyHugo) configWithFs(fs afero.Fs) (*hugolib.HugoSites, *deps.DepsCfg, error) { |
|
|
|
|
var err error |
|
|
|
|
hugoCfg := &deps.DepsCfg{Fs: hugofs.NewFrom(es.tmpfs, ch.HugoCfg.Cfg)} |
|
|
|
|
fmt.Println(ch.Dir) |
|
|
|
|
hugoCfg.Cfg, err = hugolib.LoadConfig(es.tmpfs, "", path.Join(ch.Dir, "config.toml")) |
|
|
|
|
cfg := &deps.DepsCfg{} |
|
|
|
|
cfgPath := path.Join(ch.Dir, "config.toml") |
|
|
|
|
cfg.Cfg, err = hugolib.LoadConfig(fs, "", cfgPath) |
|
|
|
|
if err != nil { |
|
|
|
|
return idleshut.Config{}, fmt.Errorf("caddy-hugo: loading site configuration: %v", err) |
|
|
|
|
return nil, cfg, fmt.Errorf("caddy-hugo: loading site configuration: %v", err) |
|
|
|
|
} |
|
|
|
|
cfg.Cfg.Set("workingDir", ch.Dir) |
|
|
|
|
|
|
|
|
|
hugoCfg.Cfg.Set("workingDir", ch.Dir) |
|
|
|
|
hugoSites, err := hugolib.NewHugoSites(*hugoCfg) |
|
|
|
|
sites, err := hugolib.NewHugoSites(*cfg) |
|
|
|
|
if err != nil { |
|
|
|
|
return idleshut.Config{}, fmt.Errorf("caddy-hugo: initializing site: %v", err) |
|
|
|
|
return nil, cfg, fmt.Errorf("caddy-hugo: initializing site: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err = hugoSites.Build(hugolib.BuildCfg{ResetState: true}) |
|
|
|
|
err = buildSite(sites) |
|
|
|
|
|
|
|
|
|
return sites, cfg, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func HugoInternalProcessConfig(ch *CaddyHugo, es *editSession, touchFn func()) (idleshut.Config, error) { |
|
|
|
|
hugoSites, _, err := ch.configWithFs(es.tmpfs) |
|
|
|
|
if err != nil { |
|
|
|
|
return idleshut.Config{}, fmt.Errorf("caddy-hugo: building site: %v", err) |
|
|
|
|
return idleshut.Config{}, fmt.Errorf("caddy-hugo: loading site configuration: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return idleshut.Config{ |
|
|
|
|