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 +}