summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doDirty.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/doDirty.go b/doDirty.go
new file mode 100644
index 0000000..9e9f609
--- /dev/null
+++ b/doDirty.go
@@ -0,0 +1,58 @@
+// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
+// Use of this source code is governed by the GPL 3.0
+
+package forgepb
+
+import (
+ "time"
+
+ "go.wit.com/lib/gui/shell"
+ "go.wit.com/lib/protobuf/gitpb"
+ "go.wit.com/log"
+)
+
+func (f *Forge) CheckDirty() *gitpb.Repos {
+ start := f.straightCheckDirty()
+
+ now := time.Now()
+ f.RillFuncError(doCheckDirty)
+ end := f.straightCheckDirty()
+ diff := end - start
+ log.Printf("dirty check (%d dirty repos) (%d total repos) (%d changed) took:%s\n", end, f.Repos.Len(), diff, shell.FormatDuration(time.Since(now)))
+
+ // todo: actually detect if this needs to be changed?
+ f.SetConfigSave(true)
+ f.ConfigSave()
+
+ return f.FindDirty()
+}
+
+func (f *Forge) straightCheckDirty() int {
+ var count int
+ for repo := range f.Repos.IterAll() {
+ if repo.IsDirty() {
+ count += 1
+ }
+ }
+ return count
+}
+
+func doCheckDirty(repo *gitpb.Repo) error {
+ repo.CheckDirty()
+ // reset these in here for now
+ if repo.GetTargetVersion() != "" {
+ repo.TargetVersion = ""
+ }
+ return nil
+}
+
+func (f *Forge) FindDirty() *gitpb.Repos {
+ found := gitpb.NewRepos()
+
+ for repo := range f.Repos.IterByFullPath() {
+ if repo.IsDirty() {
+ found.AppendByFullPath(repo)
+ }
+ }
+ return found
+}