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