Compare commits
2
Commits
5225628f8a
...
ab06bed6ec
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab06bed6ec | ||
|
|
6190379c74 |
+1
-24
@@ -1,10 +1,8 @@
|
|||||||
package caddyhugo
|
package caddyhugo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"html/template"
|
"html/template"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os/exec"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -50,12 +48,7 @@ type CaddyHugo struct {
|
|||||||
|
|
||||||
// Build rebuilds the cached state of the site. TODO: determine if this republishes
|
// Build rebuilds the cached state of the site. TODO: determine if this republishes
|
||||||
func (ch *CaddyHugo) Build() error {
|
func (ch *CaddyHugo) Build() error {
|
||||||
err := ch.HugoSites.Build(hugolib.BuildCfg{ResetState: true})
|
return buildSite(ch.HugoSites)
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error building hugo sites: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// BasePath returns the directory that the CaddyHugo internal/author pages are under
|
// BasePath returns the directory that the CaddyHugo internal/author pages are under
|
||||||
@@ -72,22 +65,6 @@ func (ch *CaddyHugo) docFilename(orig string) string {
|
|||||||
return filepath.Join(ch.Dir, docname(orig))
|
return filepath.Join(ch.Dir, docname(orig))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TmplData collects data for template execution
|
// TmplData collects data for template execution
|
||||||
func (ch *CaddyHugo) TmplData(r *http.Request, docref *editSession) interface{} {
|
func (ch *CaddyHugo) TmplData(r *http.Request, docref *editSession) interface{} {
|
||||||
var doc *acedoc.Document
|
var doc *acedoc.Document
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/deps"
|
"github.com/gohugoio/hugo/deps"
|
||||||
"github.com/gohugoio/hugo/hugofs"
|
|
||||||
"github.com/gohugoio/hugo/hugolib"
|
"github.com/gohugoio/hugo/hugolib"
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
|
|
||||||
@@ -18,37 +17,56 @@ const (
|
|||||||
WebsocketFileTicker = 1 * time.Second
|
WebsocketFileTicker = 1 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
type HugoInteractor interface {
|
// Publish really renders new content into the public directory
|
||||||
Render(srcdir, workdir string) HugoRenderer
|
func (ch *CaddyHugo) Publish() error {
|
||||||
|
err := ch.persistAllEdits()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
type HugoRenderer interface {
|
err = buildSite(ch.HugoSites)
|
||||||
WriteContent(contents string) error
|
if err != nil {
|
||||||
Start() error
|
return err
|
||||||
Stop() error
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
cfg := &deps.DepsCfg{}
|
||||||
|
cfgPath := path.Join(ch.Dir, "config.toml")
|
||||||
|
cfg.Cfg, err = hugolib.LoadConfig(fs, "", cfgPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, cfg, fmt.Errorf("caddy-hugo: loading site configuration: %v", err)
|
||||||
|
}
|
||||||
|
cfg.Cfg.Set("workingDir", ch.Dir)
|
||||||
|
|
||||||
|
sites, err := hugolib.NewHugoSites(*cfg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, cfg, fmt.Errorf("caddy-hugo: initializing site: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = buildSite(sites)
|
||||||
|
|
||||||
|
return sites, cfg, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func HugoInternalProcessConfig(ch *CaddyHugo, es *editSession, touchFn func()) (idleshut.Config, error) {
|
func HugoInternalProcessConfig(ch *CaddyHugo, es *editSession, touchFn func()) (idleshut.Config, error) {
|
||||||
|
hugoSites, _, err := ch.configWithFs(es.tmpfs)
|
||||||
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"))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return idleshut.Config{}, fmt.Errorf("caddy-hugo: loading site configuration: %v", err)
|
return idleshut.Config{}, fmt.Errorf("caddy-hugo: loading site configuration: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
hugoCfg.Cfg.Set("workingDir", ch.Dir)
|
|
||||||
hugoSites, err := hugolib.NewHugoSites(*hugoCfg)
|
|
||||||
if err != nil {
|
|
||||||
return idleshut.Config{}, fmt.Errorf("caddy-hugo: initializing site: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = hugoSites.Build(hugolib.BuildCfg{ResetState: true})
|
|
||||||
if err != nil {
|
|
||||||
return idleshut.Config{}, fmt.Errorf("caddy-hugo: building site: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return idleshut.Config{
|
return idleshut.Config{
|
||||||
TickDuration: WebsocketFileTicker,
|
TickDuration: WebsocketFileTicker,
|
||||||
MaxIdleTicks: uint(IdleWebsocketTimeout/WebsocketFileTicker) + 1,
|
MaxIdleTicks: uint(IdleWebsocketTimeout/WebsocketFileTicker) + 1,
|
||||||
|
|||||||
@@ -9,9 +9,7 @@ import (
|
|||||||
"git.stephensearles.com/stephen/caddy-hugo2/comments"
|
"git.stephensearles.com/stephen/caddy-hugo2/comments"
|
||||||
"git.stephensearles.com/stephen/caddy-hugo2/media"
|
"git.stephensearles.com/stephen/caddy-hugo2/media"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/deps"
|
|
||||||
"github.com/gohugoio/hugo/hugofs"
|
"github.com/gohugoio/hugo/hugofs"
|
||||||
"github.com/gohugoio/hugo/hugolib"
|
|
||||||
"github.com/mholt/caddy"
|
"github.com/mholt/caddy"
|
||||||
"github.com/mholt/caddy/caddyhttp/httpserver"
|
"github.com/mholt/caddy/caddyhttp/httpserver"
|
||||||
)
|
)
|
||||||
@@ -56,17 +54,9 @@ func (ch *CaddyHugo) Setup(dir string) error {
|
|||||||
ch.docs = make(map[string]*editSession)
|
ch.docs = make(map[string]*editSession)
|
||||||
ch.confirmingToClient = make(map[uint64]struct{})
|
ch.confirmingToClient = make(map[uint64]struct{})
|
||||||
|
|
||||||
ch.HugoCfg = &deps.DepsCfg{}
|
ch.HugoSites, ch.HugoCfg, err = ch.configWithFs(hugofs.Os)
|
||||||
|
|
||||||
ch.HugoCfg.Cfg, err = hugolib.LoadConfig(hugofs.Os, dir, "")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error loading hugo config: %v", err)
|
return fmt.Errorf("error setting up hugo : %v", err)
|
||||||
}
|
|
||||||
|
|
||||||
ch.HugoCfg.Cfg.Set("workingdir", dir)
|
|
||||||
ch.HugoSites, err = hugolib.NewHugoSites(*ch.HugoCfg)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error intializing hugo: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ch.Build()
|
err = ch.Build()
|
||||||
|
|||||||
Reference in New Issue
Block a user