summaryrefslogtreecommitdiff
path: root/reloadCheckDirty.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-10-10 03:49:23 -0500
committerJeff Carr <[email protected]>2025-10-10 03:49:23 -0500
commitf2fe51ee0ae6c26f5cb3d5fb12001f0db87f7bd1 (patch)
tree1385e009b8980bbe2d6102f5179dc4bb54b7a573 /reloadCheckDirty.go
parent17652d4ddc35b9acddeeaaf744b111ed03b3b8ba (diff)
almost able to perfectly clean everything everywhere
Diffstat (limited to 'reloadCheckDirty.go')
-rw-r--r--reloadCheckDirty.go73
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
+}