diff options
| -rw-r--r-- | argv.go | 6 | ||||
| -rw-r--r-- | doGenerate.go | 84 | ||||
| -rw-r--r-- | generate.go | 9 |
3 files changed, 72 insertions, 27 deletions
@@ -115,8 +115,10 @@ type DevCmd struct { } type GenerateCmd struct { - Make *EmptyCmd `arg:"subcommand:make" help:"make all the autogenerated files"` - Clean *EmptyCmd `arg:"subcommand:clean" help:"clean out all the autogenerated files"` + Make *EmptyCmd `arg:"subcommand:make" help:"make all the autogenerated files"` + Clean *EmptyCmd `arg:"subcommand:clean" help:"clean out all the autogenerated files"` + Verbose bool `arg:"--verbose" help:"be verbose about it"` + Strict bool `arg:"--strict" help:"die if any namespaces are missing"` } type CleanCmd struct { diff --git a/doGenerate.go b/doGenerate.go index 794a26c..c3ee7d8 100644 --- a/doGenerate.go +++ b/doGenerate.go @@ -15,6 +15,22 @@ import ( "go.wit.com/log" ) +func safeRun(repo *gitpb.Repo, cmd []string) error { + if argv.Verbose { + _, err := shell.RunVerbose(cmd) + if err != nil { + return err + } + } else { + log.Info("Running:", cmd) + r := shell.Run(cmd) + if r.Error != nil { + return r.Error + } + } + return nil +} + func smartAutogen(repo *gitpb.Repo) error { os.Chdir(repo.FullPath) @@ -22,12 +38,34 @@ func smartAutogen(repo *gitpb.Repo) error { files, err := filepath.Glob(globPattern) if err != nil { log.Info("glob error", err, files) + return err } for _, filename := range files { cmd := []string{"autogenpb", "--proto", filename} - shell.RunVerbose(cmd) + err := safeRun(repo, cmd) + if err != nil { + return err + } + } + return nil +} + +func smartAutogenClean(repo *gitpb.Repo) error { + os.Chdir(repo.FullPath) + + globPattern := "*.pb.go" + files, err := filepath.Glob(globPattern) + if err != nil { + log.Info("glob error", err, files) + return err + } + cmd := []string{"rm"} + cmd = append(cmd, files...) + err = safeRun(repo, cmd) + if err != nil { + return err } - return err + return nil } // so don't delete them @@ -35,30 +73,40 @@ func doGenerate() (string, error) { // var s string // var err error - if argv.Generate.Make != nil { - pfile, _ := resources.ReadFile("resources/generate") - for _, namespace := range strings.Split(string(pfile), "\n") { - namespace = strings.TrimSpace(namespace) - if namespace == "" { - continue - } - if strings.HasPrefix(namespace, "#") { - continue - } - log.Info("LINE:", namespace) + pfile, _ := resources.ReadFile("resources/generate") + for _, namespace := range strings.Split(string(pfile), "\n") { + namespace = strings.TrimSpace(namespace) + if namespace == "" { + continue + } + if strings.HasPrefix(namespace, "#") { + continue + } - // helps run 'go generate' in a particular repo - found := me.forge.Repos.FindByNamespace(namespace) - if found == nil { + // helps run 'go generate' in a particular repo + found := me.forge.Repos.FindByNamespace(namespace) + if found == nil { + if argv.Generate.Strict { return "", fmt.Errorf("unknown namespace %s", namespace) } + log.Info("missing namespace:", namespace) + continue + } + log.Info("Repo found:", found.FullPath) + if argv.Generate.Make != nil { err := smartAutogen(found) if err != nil { return "autogen failed: " + namespace, err } + } else if argv.Generate.Clean != nil { + err := smartAutogenClean(found) + if err != nil { + return "autogen failed: " + namespace, err + } + } else { + return "generate didn't run", errors.New("no subcommand chosen") } - return "generate worked", nil } - return "generate didn't run", errors.New("no subcommand chosen") + return "generate worked", nil } diff --git a/generate.go b/generate.go index 4a0347f..6db578b 100644 --- a/generate.go +++ b/generate.go @@ -2,10 +2,5 @@ package main // generates all the .proto *pb.go files -//go:generate forge dev --generate go.wit.com/lib/protobuf/filepb -//go:generate forge dev --generate go.wit.com/lib/protobuf/forgepb -//go:generate forge dev --generate go.wit.com/lib/protobuf/gitpb -//go:generate forge dev --generate go.wit.com/lib/protobuf/guipb -//go:generate forge dev --generate go.wit.com/lib/protobuf/httppb -//go:generate forge dev --generate go.wit.com/lib/config -//go:generate forge dev --generate go.wit.com/lib/gui/prep +//go:generate forge generate clean +//go:generate forge generate make |
