diff options
| author | Jeff Carr <[email protected]> | 2025-10-10 03:49:23 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-10-10 03:49:23 -0500 |
| commit | f2fe51ee0ae6c26f5cb3d5fb12001f0db87f7bd1 (patch) | |
| tree | 1385e009b8980bbe2d6102f5179dc4bb54b7a573 /reloadCheckDirty.go | |
| parent | 17652d4ddc35b9acddeeaaf744b111ed03b3b8ba (diff) | |
almost able to perfectly clean everything everywhere
Diffstat (limited to 'reloadCheckDirty.go')
| -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 +} |
