summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
+}