// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "errors" "fmt" "os" "path/filepath" "strings" "go.wit.com/lib/gui/shell" "go.wit.com/lib/protobuf/gitpb" "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) globPattern := "*.proto" 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} 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 nil } // so don't delete them func doGenerate() (string, error) { // var s string // var err error 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 { 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 }