horsegen: load and generate in parallel
This commit is contained in:
5
go.mod
5
go.mod
@@ -2,7 +2,10 @@ module git.sunturtle.xyz/zephyr/horse
|
|||||||
|
|
||||||
go 1.24.1
|
go 1.24.1
|
||||||
|
|
||||||
require zombiezen.com/go/sqlite v1.4.2
|
require (
|
||||||
|
golang.org/x/sync v0.14.0
|
||||||
|
zombiezen.com/go/sqlite v1.4.2
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||||
|
|||||||
100
horsegen/main.go
100
horsegen/main.go
@@ -8,6 +8,7 @@ import (
|
|||||||
"os/signal"
|
"os/signal"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
|
"golang.org/x/sync/errgroup"
|
||||||
"zombiezen.com/go/sqlite"
|
"zombiezen.com/go/sqlite"
|
||||||
"zombiezen.com/go/sqlite/sqlitex"
|
"zombiezen.com/go/sqlite/sqlitex"
|
||||||
)
|
)
|
||||||
@@ -21,9 +22,9 @@ func main() {
|
|||||||
flag.StringVar(&out, "kk", `.\horse`, "existing `dir`ectory for output Koka files")
|
flag.StringVar(&out, "kk", `.\horse`, "existing `dir`ectory for output Koka files")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
|
pctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
|
||||||
go func() {
|
go func() {
|
||||||
<-ctx.Done()
|
<-pctx.Done()
|
||||||
stop()
|
stop()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@@ -40,49 +41,62 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
slog.Info("get characters")
|
eg, ctx := errgroup.WithContext(pctx)
|
||||||
charas, err := Characters(ctx, db)
|
var (
|
||||||
if err != nil {
|
charas []NamedID[Character]
|
||||||
slog.Error("getting characters", slog.Any("err", err))
|
pairs []AffinityRelation
|
||||||
os.Exit(1)
|
trios []AffinityRelation
|
||||||
}
|
sg []NamedID[SkillGroup]
|
||||||
slog.Info("get pairs")
|
)
|
||||||
pairs, err := CharacterPairs(ctx, db)
|
eg.Go(func() error {
|
||||||
if err != nil {
|
slog.Info("get characters")
|
||||||
slog.Error("getting pairs", slog.Any("err", err))
|
r, err := Characters(ctx, db)
|
||||||
os.Exit(1)
|
charas = r
|
||||||
}
|
return err
|
||||||
slog.Info("get trios")
|
})
|
||||||
trios, err := CharacterTrios(ctx, db)
|
eg.Go(func() error {
|
||||||
if err != nil {
|
slog.Info("get pairs")
|
||||||
slog.Error("getting trios", slog.Any("err", err))
|
r, err := CharacterPairs(ctx, db)
|
||||||
os.Exit(1)
|
pairs = r
|
||||||
}
|
return err
|
||||||
slog.Info("get skill groups")
|
})
|
||||||
sg, err := SkillGroups(ctx, db)
|
eg.Go(func() error {
|
||||||
if err != nil {
|
slog.Info("get trios")
|
||||||
slog.Error("getting skill groups", slog.Any("err", err))
|
r, err := CharacterTrios(ctx, db)
|
||||||
|
trios = r
|
||||||
|
return err
|
||||||
|
})
|
||||||
|
eg.Go(func() error {
|
||||||
|
slog.Info("get skill groups")
|
||||||
|
r, err := SkillGroups(ctx, db)
|
||||||
|
sg = r
|
||||||
|
return err
|
||||||
|
})
|
||||||
|
if err := eg.Wait(); err != nil {
|
||||||
|
slog.Error("load", slog.Any("err", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
cf, err := os.Create(filepath.Join(out, "character.kk"))
|
eg, ctx = errgroup.WithContext(pctx)
|
||||||
if err != nil {
|
eg.Go(func() error {
|
||||||
slog.Error("creating character.kk", slog.Any("err", err))
|
cf, err := os.Create(filepath.Join(out, "character.kk"))
|
||||||
os.Exit(1)
|
if err != nil {
|
||||||
}
|
return err
|
||||||
slog.Info("write characters")
|
}
|
||||||
if err := ExecCharacterKK(t, cf, charas, pairs, trios); err != nil {
|
slog.Info("write characters")
|
||||||
slog.Error("writing character.kk", slog.Any("err", err))
|
return ExecCharacterKK(t, cf, charas, pairs, trios)
|
||||||
// continue on
|
})
|
||||||
}
|
eg.Go(func() error {
|
||||||
sf, err := os.Create(filepath.Join(out, "skill.kk"))
|
sf, err := os.Create(filepath.Join(out, "skill.kk"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("creating skill.kk", slog.Any("err", err))
|
return err
|
||||||
os.Exit(1)
|
}
|
||||||
}
|
slog.Info("write skills")
|
||||||
slog.Info("write skills")
|
return ExecSkillKK(t, sf, sg)
|
||||||
if err := ExecSkillKK(t, sf, sg); err != nil {
|
})
|
||||||
slog.Error("writing skill.kk", slog.Any("err", err))
|
if err := eg.Wait(); err != nil {
|
||||||
// continue on
|
slog.Error("generate", slog.Any("err", err))
|
||||||
|
} else {
|
||||||
|
slog.Info("done")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user