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

67 lines
1.0 KiB

package caddyhugo
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"sync"
)
type HugoInteractor interface {
Render(srcdir, workdir string) HugoRenderer
}
type HugoRenderer interface {
Start() error
Stop() error
}
type HugoCmdRenderer struct {
SrcDir string
TmpDir string
Filename string
cmd *exec.Cmd
mtx sync.Mutex
}
func (hcr *HugoCmdRenderer) Render(contents string) error {
err := ioutil.WriteFile(hcr.Filename, []byte(contents), 0644)
return err
}
func (hcr *HugoCmdRenderer) Start() error {
hcr.mtx.Lock()
defer hcr.mtx.Unlock()
hcr.cmd = exec.Command("hugo", "--watch", "-D", "-d", hcr.TmpDir)
hcr.cmd.Dir = hcr.TmpDir
err := hcr.cmd.Start()
if err != nil {
return fmt.Errorf("error starting hugo: %v", err)
}
return nil
}
func (hcr *HugoCmdRenderer) Stop() error {
hcr.mtx.Lock()
defer hcr.mtx.Unlock()
if hcr.cmd == nil {
return nil
}
err := hcr.cmd.Process.Signal(os.Interrupt)
if err != nil {
return err
}
err = hcr.cmd.Wait()
if err != nil {
return err
}
return nil
}