You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
caddy-hugo2/hugo.go

69 lines
1.4 KiB

package caddyhugo
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"git.stephensearles.com/stephen/idleshut"
)
type HugoInteractor interface {
Render(srcdir, workdir string) HugoRenderer
}
type HugoRenderer interface {
WriteContent(contents string) error
Start() error
Stop() error
}
func HugoCmdProcessConfig(ch *CaddyHugo, es *editSession, touchFn func()) idleshut.Config {
cmd := exec.Command("hugo", "--watch", "-D", "-d", es.tmpdir)
cmd.Dir = es.tmpdir
return idleshut.Config{
Tick: WebsocketFileTicker,
MaxIdleTicks: uint(IdleWebsocketTimeout/WebsocketFileTicker) + 1,
Start: func() error {
err := cmd.Start()
if err != nil {
return fmt.Errorf("error starting hugo: %v", err)
}
return nil
},
Stop: func() error {
if cmd == nil {
return nil
}
err := cmd.Process.Signal(os.Interrupt)
if err != nil {
return fmt.Errorf("error signalling hugo to stop: %v", err)
}
err = cmd.Wait()
if err != nil {
return fmt.Errorf("error waiting for hugo to stop: %v", err)
return err
}
es.doc.Close()
os.RemoveAll(es.tmpdir)
delete(ch.docs, es.filename)
return nil
},
IdleProcessError: func(err error) {
fmt.Println("error processing draft:", err)
},
IdleTick: func() error {
return ioutil.WriteFile(es.filename, []byte(es.doc.Contents()), 0644)
},
ActiveTick: func() error {
return ioutil.WriteFile(es.filename, []byte(es.doc.Contents()), 0644)
},
}
}