Files
aego/cmd/aego/scripts.go
T

68 lines
1.6 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"os/exec"
"aego/app/bootstrap"
"aego/app/projects"
"aego/app/run"
"aego/engine"
"aego/project"
)
func scriptTool(p *project.Project, args ...string) int {
if !bootstrap.NeedsNative(p) {
return run.Tool(p, args, os.Stdout, os.Stderr)
}
binary, err := bootstrap.Build(p, bootstrap.HostTarget(), bootstrap.ModeRun, engine.Version, nil)
if err != nil {
return fail(err)
}
cmd := exec.Command(binary, append([]string{"--tool"}, args...)...)
cmd.Dir = p.Root
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return exitCode(cmd.Run())
}
func cmdTest(args []string) int {
dir, rest := firstArg(args)
p, err := openProject(dir)
if err != nil {
return fail(err)
}
return scriptTool(p, append([]string{"test"}, rest...)...)
}
func cmdDump(args []string) int {
if len(args) == 0 || args[0] != "script" {
fmt.Fprintln(os.Stderr, "usage: aego dump script <package|Type> [--func name] [--project dir]")
return 2
}
fs := flag.NewFlagSet("dump script", flag.ContinueOnError)
fn := fs.String("func", "", "only print this function")
dir := fs.String("project", "", "project directory")
target, rest := firstArg(args[1:])
if err := fs.Parse(rest); err != nil {
return 2
}
if target == "" {
fmt.Fprintln(os.Stderr, "usage: aego dump script <package|Type> [--func name] [--project dir]")
return 2
}
p, err := openProject(*dir)
if err != nil {
return fail(err)
}
ws, err := projects.OpenWorkspace(p, "", false)
if err != nil {
fmt.Fprintln(os.Stderr, "aego:", err)
return 2
}
return run.Dump(ws, target, *fn, os.Stdout, os.Stderr)
}