diff options
| -rw-r--r-- | reloadCheckDirty.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/reloadCheckDirty.go b/reloadCheckDirty.go index de7e512..14a39aa 100644 --- a/reloadCheckDirty.go +++ b/reloadCheckDirty.go @@ -80,3 +80,76 @@ func (repo *Repo) CheckDirty() bool { repo.SmartSetState("") return false } + +func (all *Repos) CheckPorcelain() (string, error) { + var totals int + var files []string + var allerr []error + for repo := range all.IterByNamespace() { + s, err := repo.CheckDirtyVerbose() + lines := strings.Split(s, "\n") + files = append(files, lines...) + totals += len(lines) + if err != nil { + allerr = append(allerr, err) + } + repo.Dirty = false + repo.State = "pcheck 1" + repo.StateChange = "pcheck 2" + } + for _, filename := range files { + log.Info(filename) + } + return fmt.Sprintf("%d lines %d errors %d repos", totals, len(allerr), all.Len()), nil +} + +// returns true if the repo is dirty +// runs os.Exec('git') every time +func (repo *Repo) CheckDirtyVerbose() (string, error) { + cmd := []string{"git", "status", "--porcelain"} + r := shell.PathRunLog(repo.FullPath, cmd, INFO) + if r.Error != nil { + log.Warn("CheckDirty() status cmd =", cmd) + out := strings.Join(r.Stdout, "\n") + log.Warn("CheckDirty() status out =", out) + log.Warn("CheckDirty() status err =", r.Error) + log.Error(r.Error, "CheckDirty() git status error") + repo.NoteChange("git status is in error " + fmt.Sprint(r.Error)) + repo.Dirty = true + repo.State = "dirty porcelain" + return "dirty porcelain", r.Error + } + if len(r.Stdout) == 0 { + repo.Dirty = false + repo.SmartSetState("") + } + // dirty if anything but go.mod and go.sum + var bad bool = false + for _, line := range r.Stdout { + parts := strings.Fields(line) + log.Info("Dirty:", repo.FullPath, line) + if len(parts) == 2 { + switch parts[1] { + case "go.mod": + case "go.sum": + default: + bad = true + } + } else { + bad = true + } + } + repo.DirtyList = r.Stdout + + pbnow := timestamppb.New(time.Now()) + repo.Times.LastDirty = pbnow + repo.Dirty = bad + if bad { + repo.Dirty = true + repo.SmartSetState("dirty") + return "seems dirty", nil + } + repo.Dirty = false + repo.SmartSetState("") + return "seems clean", nil +} |
