summaryrefslogtreecommitdiff
path: root/reloadCheckDirty.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-12-17 01:15:31 -0600
committerJeff Carr <[email protected]>2024-12-17 01:15:31 -0600
commit4bc95ad2684cb42159229b8198aa8a2377f80aa1 (patch)
tree57c4b95880302bfd3a34d0cc3eec6ab79f1d0993 /reloadCheckDirty.go
parentc53da5a9a1da1b29db24d4e1ce2b294514d99ac2 (diff)
keep isolating use of os.Exec("git")
Diffstat (limited to 'reloadCheckDirty.go')
-rw-r--r--reloadCheckDirty.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/reloadCheckDirty.go b/reloadCheckDirty.go
new file mode 100644
index 0000000..c865c21
--- /dev/null
+++ b/reloadCheckDirty.go
@@ -0,0 +1,60 @@
+package gitpb
+
+// runs git, parses output
+// types faster than you can
+
+import (
+ "fmt"
+ "strings"
+ "time"
+
+ "go.wit.com/lib/gui/shell"
+ "go.wit.com/log"
+ "google.golang.org/protobuf/types/known/timestamppb"
+)
+
+func (repo *Repo) NoteChange(s string) {
+ log.Warn("NoteChange()", s)
+}
+
+// just return the current value
+func (repo *Repo) IsDirty() bool {
+ return repo.Dirty
+}
+
+// actually os.Exec('git')
+func (repo *Repo) CheckDirty() bool {
+ cmd := []string{"git", "status", "--porcelain"}
+ r := shell.PathRunLog(repo.FullPath, cmd, GITPB)
+ 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
+ return true
+ }
+
+ // dirty if anything but go.mod and go.sum
+ var bad bool = false
+ for _, line := range r.Stdout {
+ parts := strings.Fields(line)
+ if len(parts) == 2 {
+ switch parts[1] {
+ case "go.mod":
+ case "go.sum":
+ default:
+ bad = true
+ }
+ } else {
+ bad = true
+ }
+ }
+
+ pbnow := timestamppb.New(time.Now())
+ repo.Times.LastDirty = pbnow
+ return bad
+
+}