wombat/generate/generate.go

84 lines
1.7 KiB
Go
Raw Normal View History

2019-01-01 19:41:03 +01:00
package generate
import (
"flag"
"fmt"
"git.gutmet.org/goutil.git"
"git.gutmet.org/simpleserver.git"
"git.gutmet.org/wombat.git/blog"
"git.gutmet.org/wombat.git/converter"
"git.gutmet.org/wombat.git/gallery"
"git.gutmet.org/wombat.git/initer"
"git.gutmet.org/wombat.git/site"
"git.gutmet.org/wombat.git/splitter"
"os"
)
func removeAll(path string) {
err := os.RemoveAll(path)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}
func clean() {
removeAll("stage1")
removeAll("stage2")
}
func stage1() {
goutil.Copy("stage0", "stage1")
mdfiles := goutil.RecListFilesExt("stage1", ".md")
htmlfrags := goutil.RecListFilesExt("stage1", ".html")
splitter.SplitAll(append(mdfiles, htmlfrags...))
converter.ConvertAll(mdfiles)
}
func blogs() []string {
dirs, err := goutil.DirsWithPrefix("stage0", "blog")
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
return dirs
}
func stage2() {
goutil.Copy("stage1", "stage2")
site.Generate()
for _, blogdir := range blogs() {
blog.Generate(blogdir)
}
descfiles := goutil.RecListFilesExt("stage2", ".desc")
for _, f := range descfiles {
err := os.Remove(f)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}
os.Remove("stage2/README")
}
func Generate(f GenerateFlags) error {
initer.InitializedOrDie()
clean()
gallery.Generate(gallery.Flags{})
stage1()
stage2()
if !f.Noserve {
simpleserver.Serve("stage2")
}
return nil
}
type GenerateFlags struct {
Noserve bool
}
func Command() (goutil.CommandFlagsInit, goutil.CommandFunc) {
f := GenerateFlags{}
flagsInit := func(s *flag.FlagSet) {
s.BoolVar(&f.Noserve, "noserve", false, "don't start webserver after generating")
}
return flagsInit, func([]string) error { return Generate(f) }
}