package gitpb import ( "errors" "fmt" "os" "path/filepath" "strings" "github.com/go-cmd/cmd" "go.wit.com/lib/gui/shell" "go.wit.com/log" ) // execute something with the working directory // set to the FullPath func (repo *Repo) Run(cmd []string) cmd.Status { result := shell.PathRun(repo.FullPath, cmd) output := strings.Join(result.Stdout, "\n") if result.Error != nil { log.Warn("cmd:", cmd) log.Warn("ouptput:", output) log.Warn("failed with error:", result.Error) } return result } func (repo *Repo) RunQuiet(cmd []string) cmd.Status { result := shell.PathRunQuiet(repo.FullPath, cmd) return result } func (repo *Repo) RunEcho(cmd []string) cmd.Status { result := shell.PathRunQuiet(repo.FullPath, cmd) log.Info("cmd:", repo.FullPath, cmd) log.Warn("cmd.Exit:", result.Exit, "cmd.Error:", result.Error) for _, line := range result.Stdout { log.Info("STDOUT:", line) } for _, line := range result.Stderr { log.Info("STDERR:", line) } return result } func (repo *Repo) RunRealtime(cmd []string) cmd.Status { return shell.PathRunRealtime(repo.GetFullPath(), cmd) } // error if result.Error or if result.Exit != 0 func (repo *Repo) RunStrict(cmd []string) error { return repo.StrictRun(cmd) } func (repo *Repo) StrictRun(cmd []string) error { result := repo.RunQuiet(cmd) if result.Error != nil { log.Warn(repo.GetGoPath(), cmd, "wow. golang is cool. an os.Error:", result.Error) return result.Error } if result.Exit != 0 { log.Warn(cmd, "failed with", result.Exit) return errors.New(fmt.Sprint(cmd, "failed with", result.Exit)) } return nil } func (repo *Repo) Exists(filename string) bool { if repo == nil { return false } testf := filepath.Join(repo.FullPath, filename) _, err := os.Stat(testf) if err != nil { return false } return true } func (repo *Repo) IsValidDir() bool { if repo == nil { return false } if !repo.IsGitDirectory() { return false } return true } func (repo *Repo) ReadFile(fname string) ([]byte, error) { fullname := filepath.Join(repo.FullPath, fname) return os.ReadFile(fullname) } func (repo *Repo) IsGitDirectory() bool { gitdir := filepath.Join(repo.FullPath, ".git") info, err := os.Stat(gitdir) if err != nil { return false } return info.IsDir() } func (repo *Repo) IsDirectory() bool { info, err := os.Stat(repo.FullPath) if err != nil { return false } return info.IsDir() } func (repo *Repo) RunAll(all [][]string) bool { for _, cmd := range all { log.Log(GITPBWARN, "doAll() RUNNING: cmd =", cmd) r := repo.Run(cmd) if r.Error != nil { log.Log(GITPBWARN, "doAll() err =", r.Error) log.Log(GITPBWARN, "doAll() out =", r.Stdout) return false } } return true }