parent
5b25695954
commit
618574f160
@ -0,0 +1,67 @@ |
|||||||
|
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 |
||||||
|
} |
Loading…
Reference in new issue