diff options
| author | Jeff Carr <[email protected]> | 2024-12-17 01:15:31 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-12-17 01:15:31 -0600 |
| commit | 4bc95ad2684cb42159229b8198aa8a2377f80aa1 (patch) | |
| tree | 57c4b95880302bfd3a34d0cc3eec6ab79f1d0993 /reloadCheckDirty.go | |
| parent | c53da5a9a1da1b29db24d4e1ce2b294514d99ac2 (diff) | |
keep isolating use of os.Exec("git")
Diffstat (limited to 'reloadCheckDirty.go')
| -rw-r--r-- | reloadCheckDirty.go | 60 |
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 + +} |
