summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-02-18 15:09:04 -0600
committerJeff Carr <[email protected]>2024-02-18 15:09:04 -0600
commit08c7765cc70bae20479ad0aa1897b6a4cfc3613a (patch)
treedacc65539b521cd3fc285579712bd2ef7bd8a486
parentbbc78159fe11c78ae33cc8026887f62888003630 (diff)
guireleaser builds again
-rw-r--r--Makefile4
-rw-r--r--checkReady.go42
-rw-r--r--doRelease.go52
-rw-r--r--globalDisplayOptions.go123
-rw-r--r--initRepoList.go66
-rw-r--r--lookForUnwind.go39
-rw-r--r--main.go125
-rw-r--r--releaseBox.go238
-rw-r--r--repolist.go167
-rw-r--r--repoview.go73
-rw-r--r--scan.go88
-rw-r--r--scanGoSum.go64
-rw-r--r--structs.go17
-rw-r--r--whitelist.go10
14 files changed, 470 insertions, 638 deletions
diff --git a/Makefile b/Makefile
index 2477619..11a52f9 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-all:
+all: build
./guireleaser
stderr: build
@@ -14,7 +14,7 @@ build:
echo "build it!"
-rm resources/*.so
cp -a ~/go/src/go.wit.com/toolkits/*.so resources/
- go build -v -x
+ GO111MODULE=off go build -v -x
install:
rm -f ~/go/src/go.wit.com/toolkits/*.so
diff --git a/checkReady.go b/checkReady.go
index 988efca..b51ba48 100644
--- a/checkReady.go
+++ b/checkReady.go
@@ -29,22 +29,22 @@ func CheckReady() bool {
log.Info("find the next repo first")
return false
}
- goSumS := release.current.getGoSumStatus()
- dirtyS := release.current.dirtyLabel.String()
- lastS := release.current.status.GetLastTagVersion()
- currentS := release.current.status.GetCurrentBranchVersion()
+ goSumS := release.current.Status.GetGoSumStatus()
+ dirtyS := release.current.State()
+ lastS := release.current.Status.GetLastTagVersion()
+ currentS := release.current.Status.GetCurrentBranchVersion()
var targetS string
targetS = release.version.String()
- log.Info("repo:", release.current.String(), goSumS, dirtyS, lastS, currentS, targetS)
+ log.Info("repo:", release.current.State(), goSumS, dirtyS, lastS, currentS, targetS)
if goSumS == "RELEASED" {
return true
}
if goSumS == "PRIMATIVE" {
if targetS == lastS {
- release.current.setGoSumStatus("RELEASED")
+ release.current.Status.SetGoSumStatus("RELEASED")
}
return true
}
@@ -53,45 +53,45 @@ func CheckReady() bool {
}
if goSumS == "READY" {
if targetS == lastS {
- release.current.setGoSumStatus("RELEASED")
+ release.current.Status.SetGoSumStatus("RELEASED")
return true
}
if lastS == currentS {
- release.current.setGoSumStatus("UNRELEASED")
+ release.current.Status.SetGoSumStatus("UNRELEASED")
}
return true
}
- release.current.setGoSumStatus("NOT READY")
- if release.current.status.ReadOnly() {
+ release.current.Status.SetGoSumStatus("NOT READY")
+ if release.current.Status.ReadOnly() {
log.Info("\trepo is read only")
return false
}
if targetS == lastS {
log.Info("\trepo is already done", lastS, "=", targetS)
- release.current.setGoSumStatus("READY")
+ release.current.Status.SetGoSumStatus("READY")
return true
}
if lastS == currentS {
log.Info("\trepo is already done", lastS, "=", targetS)
- release.current.setGoSumStatus("READY")
+ release.current.Status.SetGoSumStatus("READY")
return true
}
if goSumS == "BAD" {
- log.Info("\trepo is ready", release.current.String(), "BAD == BAD")
+ log.Info("\trepo is ready", release.current.State(), "BAD == BAD")
} else {
- log.Info("\trepo is ready maybe", release.current.String(), "BAD !=", goSumS)
+ log.Info("\trepo is ready maybe", release.current.State(), "BAD !=", goSumS)
}
- if release.current.status.CheckDirty() {
+ if release.current.Status.CheckDirty() {
log.Info("\trepo is dirty")
return false
} else {
- log.Info("\trepo is ready", release.current.String(), "not dirty")
+ log.Info("\trepo is ready", release.current.State(), "not dirty")
}
- fullpath := filepath.Join(me.goSrcPwd.String(), release.current.String())
+ fullpath := filepath.Join(me.goSrcPwd.String(), release.current.State())
testf := filepath.Join(fullpath, "go.mod")
if Exists(testf) {
@@ -113,14 +113,14 @@ func CheckReady() bool {
// final checks here
if dirtyS == "unchanged" {
- log.Info("\trepo is ready", release.current.String(), "unchanged")
+ log.Info("\trepo is ready", release.current.Name(), "unchanged")
} else {
log.Info("\trepo is not ready", dirtyS, "!= 'unchanged'")
return false
}
- curName := release.current.status.GetCurrentBranchName()
- mName := release.current.status.GetMasterBranchName()
+ curName := release.current.Status.GetCurrentBranchName()
+ mName := release.current.Status.GetMasterBranchName()
if curName == mName {
log.Info("\trepo is ready working from main branch", curName, "=", mName)
@@ -129,7 +129,7 @@ func CheckReady() bool {
return false
}
- release.current.setGoSumStatus("READY")
+ release.current.Status.SetGoSumStatus("READY")
return true
}
diff --git a/doRelease.go b/doRelease.go
index 2d2b9d1..64679ec 100644
--- a/doRelease.go
+++ b/doRelease.go
@@ -11,7 +11,7 @@ import (
)
func doRelease() bool {
- log.Info("doRelease() on", release.current.String())
+ log.Info("doRelease() on", release.current.Name())
// double check release version logic
if release.releaseVersionB.String() != "release version "+release.version.String() {
log.Warn("something went wrong with the release.version:", release.version.String())
@@ -23,9 +23,9 @@ func doRelease() bool {
log.Warn("version does not start with v.", release.version.String())
return false
}
- switch release.status.String() {
+ switch release.current.Status.GetGoSumStatus() {
case "PRIMATIVE":
- log.Warn("can do PRIMATIVE", release.version.String())
+ log.Warn("can do PRIMATIVE", release.current.Name())
case "GOOD":
log.Warn("GOOD. lots of go.sum checks passed", release.version.String())
case "manually chosen":
@@ -41,21 +41,21 @@ func doRelease() bool {
log.Sleep(10)
*/
default:
- log.Warn("what is this?", release.version.String(), release.status.String())
+ log.Warn("what is this?", release.version.String(), release.current.Name())
return false
}
- if release.current.status.ReadOnly() {
+ if release.current.Status.ReadOnly() {
log.Info("sorry, it's read-only")
return true
}
- if release.current.status.CheckDirty() {
+ if release.current.Status.CheckDirty() {
log.Info("sorry, it's still dirty")
return false
}
- curName := release.current.status.GetCurrentBranchName()
- mName := release.current.status.GetMasterBranchName()
+ curName := release.current.Status.GetCurrentBranchName()
+ mName := release.current.Status.GetMasterBranchName()
if curName != mName {
log.Info("\trepo is not working from main branch", curName, "!=", mName)
return false
@@ -65,7 +65,7 @@ func doRelease() bool {
var all [][]string
all = append(all, []string{"git", "add", "-f", "go.mod"})
- if release.current.status.CheckPrimativeGoMod() {
+ if release.current.Status.CheckPrimativeGoMod() {
// don't add go.sum here. TODO: check for go.sum file and fail
} else {
all = append(all, []string{"git", "add", "-f", "go.sum"})
@@ -75,7 +75,7 @@ func doRelease() bool {
all = append(all, []string{"git", "tag", "-m", me.releaseReasonS, release.version.String()})
all = append(all, []string{"git", "push", "origin", release.version.String()})
- if !release.current.status.DoAll(all) {
+ if !release.current.Status.DoAll(all) {
log.Info("failed to make new release", release.version.String())
return false
}
@@ -88,11 +88,11 @@ func doRelease() bool {
}
log.Info("PUBLISH OK")
- release.current.setGoSumStatus("RELEASED")
+ release.current.Status.SetGoSumStatus("RELEASED")
// unwind and re-tag. Now that the go.mod and go.sum are published, revert
// to the development branch
- if !release.current.status.RevertMasterToDevel() {
+ if !release.current.Status.RevertMasterToDevel() {
log.Info("Revert Failed")
return false
}
@@ -104,27 +104,21 @@ func doRelease() bool {
retag = append(retag, []string{"git", "tag", "-m", me.releaseReasonS, release.version.String()})
retag = append(retag, []string{"git", "push", "origin", release.version.String()})
- if !release.current.status.DoAll(retag) {
+ if !release.current.Status.DoAll(retag) {
log.Info("retag failed")
return false
}
- log.Info("EVERYTHING OK. RERELEASED", release.current.String())
+ log.Info("EVERYTHING OK. RERELEASED", release.current.Name())
- // update the package versions used for checking go.sum validity
- release.current.status.UpdateNew()
- cbname := release.current.status.GetCurrentBranchName()
- cbversion := release.current.status.GetCurrentBranchVersion()
- lasttag := release.current.status.GetLastTagVersion()
// update the values in the GUI
- release.current.lastTag.SetLabel(lasttag)
- release.current.vLabel.SetLabel(cbname + " " + cbversion)
+ release.current.Status.UpdateNew()
// attempt to find another repo to release
if !doReleaseFindNext() {
log.Info("doReleaseFindNext() could not find a new")
return false
}
- log.Info("GOOD TO RUN ANOTHER DAY ON:", release.current.String())
+ log.Info("GOOD TO RUN ANOTHER DAY ON:", release.current.Name())
return true
}
@@ -137,14 +131,14 @@ func doReleaseFindNext() bool {
log.Info("findNextDirty() could not find anything")
return false
}
- release.current.status.CheckSafeGoSumRemake()
- if release.current.status.MakeRedomod() {
+ release.current.Status.CheckSafeGoSumRemake()
+ if release.current.Status.MakeRedomod() {
log.Info("Redo mod ok")
} else {
log.Info("go mod tidy not ok")
return false
}
- if ok, _ := release.current.status.CheckGoSum(); ok {
+ if ok, _ := release.current.Status.CheckGoSum(); ok {
log.Info("repo has go.sum requirements that are clean")
// release.current.setGoSumStatus("CLEAN")
release.status.SetValue("GOOD")
@@ -158,7 +152,7 @@ func doReleaseFindNext() bool {
// this pulls the new tag from the golang package repository
// to insert the new version
func doPublishVersion() bool {
- gopath := release.current.String()
+ gopath := release.current.GoPath()
cmd := []string{"go", "get", "-v", gopath + "@" + release.version.String()}
log.Info("SHOULD RUN cmd HERE:", cmd)
@@ -171,11 +165,11 @@ func doPublishVersion() bool {
gosum := filepath.Join(homeDir, "go/src/go.wit.com/apps/guireleaser/go.sum")
if !shell.Exists(gosum) {
log.Info("go.sum must exist here")
- release.guireleaser.status.MakeRedomod()
+ release.guireleaser.Status.MakeRedomod()
}
os.Unsetenv("GO111MODULE")
log.Info("TRYING TO SELF UPDATE HERE. cmd =", cmd)
- err, out := release.guireleaser.status.RunCmd(cmd)
+ err, out := release.guireleaser.Status.RunCmd(cmd)
if gopath == "go.wit.com/apps/guireleaser" {
// ignore errors on updating myself
log.Info("IGNORE SELF UPDATE ERROR. cmd =", cmd)
@@ -184,7 +178,7 @@ func doPublishVersion() bool {
if err == nil {
log.Info("SELF UPDATE OK. out =", out)
log.Info("SELF UPDATE WORKED")
- release.current.setGoSumStatus("RELEASED")
+ release.current.Status.SetGoSumStatus("RELEASED")
return true
}
return false
diff --git a/globalDisplayOptions.go b/globalDisplayOptions.go
index 401ce68..6bf9cdb 100644
--- a/globalDisplayOptions.go
+++ b/globalDisplayOptions.go
@@ -11,21 +11,21 @@ import (
)
func showHideRepos() {
- for _, repo := range me.allrepos {
+ for _, repo := range me.repos.View.AllRepos() {
if me.autoHideReadOnly.Checked() {
- if repo.status.ReadOnly() {
+ if repo.Status.ReadOnly() {
repo.Hide()
continue
}
}
if me.autoHidePerfect.Checked() {
- if repo.dirtyLabel.String() == "PERFECT" {
+ if repo.State() == "PERFECT" {
repo.Hide()
continue
}
}
if me.autoReleased.Checked() {
- if repo.getGoSumStatus() == "RELEASED" {
+ if repo.Status.GetGoSumStatus() == "RELEASED" {
repo.Hide()
continue
}
@@ -35,14 +35,14 @@ func showHideRepos() {
}
func globalDisplayShow() {
- for _, repo := range me.allrepos {
+ for _, repo := range me.repos.View.AllRepos() {
if me.autoHideReadOnly.Checked() {
- if repo.status.ReadOnly() {
+ if repo.Status.ReadOnly() {
continue
}
}
if me.autoHidePerfect.Checked() {
- if repo.dirtyLabel.String() == "PERFECT" {
+ if repo.State() == "PERFECT" {
continue
}
}
@@ -56,20 +56,19 @@ func globalDisplayOptions(box *gui.Node) {
group1 := vbox.NewGroup("Global Display Options")
group1.NewButton("Show Repository Window", func() {
- if reposwin.Hidden() {
- log.Info("showing reposwin")
- showHideRepos()
- // have to run this twice for now
- scanForReady()
- scanForReady()
- reposwin.Show()
- findNextDirty("")
- // double check the found next repo
- fullDoubleCheckFix()
+ if me.repos.Hidden() {
+ me.repos.Show()
} else {
- log.Info("hiding reposwin")
- reposwin.Hide()
+ me.repos.Hide()
}
+ log.Info("showing reposwin")
+ showHideRepos()
+ // have to run this twice for now
+ // scanForReady()
+ // scanForReady()
+ // findNextDirty("")
+ // double check the found next repo
+ // fullDoubleCheckFix()
})
me.autoHideReadOnly = group1.NewCheckbox("Hide read-only repos").SetChecked(true)
@@ -93,13 +92,13 @@ func globalDisplayOptions(box *gui.Node) {
me.autoReleased = group1.NewCheckbox("Hide RELEASED repos").SetChecked(false)
me.autoReleased.Custom = func() {
if me.autoReleased.Checked() {
- for _, repo := range me.allrepos {
- if repo.getGoSumStatus() == "RELEASED" {
+ for _, repo := range me.repos.View.AllRepos() {
+ if repo.Status.GetGoSumStatus() == "RELEASED" {
repo.Hide()
}
}
} else {
- for _, repo := range me.allrepos {
+ for _, repo := range me.repos.View.AllRepos() {
repo.Show()
}
}
@@ -111,21 +110,21 @@ func globalDisplayOptions(box *gui.Node) {
me.setBranchesToMasterB = group1.NewButton("set all branches to master", func() {
me.Disable()
- for _, repo := range me.allrepos {
- if repo.status.ReadOnly() {
+ for _, repo := range me.repos.View.AllRepos() {
+ if repo.Status.ReadOnly() {
continue
}
- if whitelist(repo.String()) {
+ if whitelist(repo.GoPath()) {
continue
}
- if repo.status.CheckoutMaster() {
- log.Warn("set master branch worked", repo.String())
- repo.newScan()
+ if repo.Status.CheckoutMaster() {
+ log.Warn("set master branch worked", repo.Name())
+ repo.Status.UpdateNew()
} else {
- repo.newScan()
- log.Warn("set master branch failed", repo.String())
- log.Warn("set master branch failed", repo.String())
- log.Warn("set master branch failed", repo.String())
+ repo.Status.UpdateNew()
+ log.Warn("set master branch failed", repo.Name())
+ log.Warn("set master branch failed", repo.Name())
+ log.Warn("set master branch failed", repo.Name())
}
}
me.Enable()
@@ -137,15 +136,15 @@ func globalDisplayOptions(box *gui.Node) {
os.Unsetenv("GO111MODULE")
longB.Disable()
me.Disable()
- for _, repo := range me.allrepos {
- if whitelist(repo.String()) {
+ for _, repo := range me.repos.View.AllRepos() {
+ if whitelist(repo.GoPath()) {
continue
}
- if repo.status.ReadOnly() {
+ if repo.Status.ReadOnly() {
continue
}
- if repo.status.MakeRedomod() {
- log.Info("redo go.sum failed on", repo.String())
+ if repo.Status.MakeRedomod() {
+ log.Info("redo go.sum failed on", repo.Name())
// me.Enable()
// longB.Enable()
// longB.SetLabel("FAILED")
@@ -160,54 +159,54 @@ func globalDisplayOptions(box *gui.Node) {
group1.NewButton("rm -f go.mod go.sum", func() {
me.Disable()
- for _, repo := range me.allrepos {
- if whitelist(repo.String()) {
+ for _, repo := range me.repos.View.AllRepos() {
+ if whitelist(repo.GoPath()) {
continue
}
- if repo.status.ReadOnly() {
+ if repo.Status.ReadOnly() {
continue
}
- repo.status.RunCmd([]string{"rm", "-f", "go.mod", "go.sum"})
+ repo.Status.RunCmd([]string{"rm", "-f", "go.mod", "go.sum"})
}
me.Enable()
})
group1.NewButton("git reset --hard", func() {
me.Disable()
- for _, repo := range me.allrepos {
- if whitelist(repo.String()) {
- log.Warn("skipping whitelist", repo.String())
+ for _, repo := range me.repos.View.AllRepos() {
+ if whitelist(repo.GoPath()) {
+ log.Warn("skipping whitelist", repo.Name())
continue
}
- log.Warn("running git reset --hard", repo.String())
- repo.status.RunCmd([]string{"git", "reset", "--hard"})
+ log.Warn("running git reset --hard", repo.Name())
+ repo.Status.RunCmd([]string{"git", "reset", "--hard"})
}
me.Enable()
})
group1.NewButton("git ls-files |grep go.mod", func() {
// var all []string
- for _, repo := range me.allrepos {
- log.Info("repo:", repo.String())
- if repo.status.ReadOnly() {
+ for _, repo := range me.repos.View.AllRepos() {
+ log.Info("repo:", repo.Name())
+ if repo.Status.ReadOnly() {
continue
}
- if whitelist(repo.String()) {
- log.Warn("skipping whitelist", repo.String())
+ if whitelist(repo.GoPath()) {
+ log.Warn("skipping whitelist", repo.GoPath())
continue
}
- good, files := repo.status.GitLsFiles()
+ good, files := repo.Status.GitLsFiles()
if !good {
- log.Warn("Something went wrong", repo.String())
+ log.Warn("Something went wrong", repo.GoPath())
continue
}
for _, filename := range strings.Split(files, "\n") {
log.Info("\tfile", filename)
if filename == "go.mod" {
log.Info("Found go.mod. does version match release version?")
- log.Info(repo.lastTag.String(), "vs", repo.targetVersion.String())
- if repo.lastTag.String() != repo.targetVersion.String() {
- log.Info(repo.lastTag.String(), "vs", repo.targetVersion.String())
+ log.Info(repo.Status.GetLastTagVersion(), "vs", repo.Status.GetTargetVersion())
+ if repo.Status.GetLastTagVersion() != repo.Status.GetTargetVersion() {
+ log.Info(repo.Status.GetLastTagVersion(), "vs", repo.Status.GetTargetVersion())
log.Info("Found go.sum. version mismatch")
setCurrentRepo(repo, "VERY BROKEN", "rewind go.mod commit")
return
@@ -215,9 +214,9 @@ func globalDisplayOptions(box *gui.Node) {
}
if filename == "go.sum" {
log.Info("Found go.sum. does version match release version?")
- log.Info(repo.lastTag.String(), "vs", repo.targetVersion.String())
- if repo.lastTag.String() != repo.targetVersion.String() {
- log.Info(repo.lastTag.String(), "vs", repo.targetVersion.String())
+ log.Info(repo.Status.GetLastTagVersion(), "vs", repo.Status.GetTargetVersion())
+ if repo.Status.GetLastTagVersion() != repo.Status.GetTargetVersion() {
+ log.Info(repo.Status.GetLastTagVersion(), "vs", repo.Status.GetTargetVersion())
log.Info("Found go.sum. version mismatch")
setCurrentRepo(repo, "VERY BROKEN", "rewind go.mod commit")
return
@@ -239,9 +238,9 @@ func globalDisplayOptions(box *gui.Node) {
}
func hidePerfect() {
- for _, repo := range me.allrepos {
- if repo.dirtyLabel.String() == "PERFECT" {
- if repo.hidden {
+ for _, repo := range me.repos.View.AllRepos() {
+ if repo.State() == "PERFECT" {
+ if repo.Hidden() {
continue
}
repo.Hide()
diff --git a/initRepoList.go b/initRepoList.go
new file mode 100644
index 0000000..c538820
--- /dev/null
+++ b/initRepoList.go
@@ -0,0 +1,66 @@
+package main
+
+// this initializes the repos
+
+import (
+ "io/ioutil"
+ "os"
+ "os/user"
+ "path/filepath"
+ "strings"
+
+ "go.wit.com/lib/gui/repolist"
+ "go.wit.com/lib/gui/repostatus"
+ "go.wit.com/log"
+)
+
+func (r *repoWindow) initRepoList() {
+ usr, _ := user.Current()
+
+ repos := parsecfg("~/.config/guireleaser")
+ for _, line := range repos {
+ log.Verbose("repo =", line)
+ path, mbranch, dbranch, ubranch := splitLine(line)
+ if mbranch == "" {
+ mbranch = "master"
+ }
+ if dbranch == "" {
+ dbranch = "devel"
+ }
+ if ubranch == "" {
+ ubranch = usr.Username
+ }
+ r.View.AddRepo(path, mbranch, dbranch, ubranch)
+ }
+
+ log.Info("scanning everything in ~/go/src")
+ for i, path := range repostatus.ListGitDirectories() {
+ // log.Info("addRepo()", i, path)
+ path = strings.TrimPrefix(path, me.goSrcPwd.String())
+ path = strings.Trim(path, "/")
+ log.Info("addRepo()", i, path)
+ r.View.AddRepo(path, "master", "devel", usr.Username)
+ }
+}
+
+func parsecfg(f string) []string {
+ homeDir, _ := os.UserHomeDir()
+ cfgfile := filepath.Join(homeDir, f)
+ content, _ := ioutil.ReadFile(cfgfile)
+ out := string(content)
+ out = strings.TrimSpace(out)
+ lines := strings.Split(out, "\n")
+ return lines
+}
+
+// returns path, master branch name, devel branch name, user branch name
+func splitLine(line string) (string, string, string, string) {
+ var path, master, devel, user string
+ parts := strings.Split(line, " ")
+ path, parts = repolist.RemoveFirstElement(parts)
+ master, parts = repolist.RemoveFirstElement(parts)
+ devel, parts = repolist.RemoveFirstElement(parts)
+ user, parts = repolist.RemoveFirstElement(parts)
+ // path, master, devel, user := strings.Split(line, " ")
+ return path, master, devel, user
+}
diff --git a/lookForUnwind.go b/lookForUnwind.go
index 1ca7954..3387921 100644
--- a/lookForUnwind.go
+++ b/lookForUnwind.go
@@ -4,54 +4,55 @@ package main
import (
"path/filepath"
+ "go.wit.com/lib/gui/repolist"
"go.wit.com/log"
)
-func (r *repo) lookToUnwind() bool {
- goSumS := r.getGoSumStatus()
- dirtyS := r.dirtyLabel.String()
- currentS := r.status.GetCurrentBranchVersion()
- log.Info("repo:", r.String(), goSumS, dirtyS, r.lastTag.String(), currentS)
+func lookToUnwind(r *repolist.Repo) bool {
+ goSumS := r.Status.GetGoSumStatus()
+ dirtyS := r.State()
+ currentS := r.Status.GetCurrentBranchVersion()
+ log.Info("repo:", r.Name(), goSumS, dirtyS, r.State(), currentS)
- curName := r.status.GetCurrentBranchName()
- mName := r.status.GetMasterBranchName()
+ curName := r.Status.GetCurrentBranchName()
+ mName := r.Status.GetMasterBranchName()
if curName == mName {
log.Info("\trepo is ready working from main branch", curName, "=", mName)
} else {
log.Info("\trepo is not ready main branch", curName, "!=", mName)
- r.setGoSumStatus("CAN NOT UNWIND")
+ r.Status.SetGoSumStatus("CAN NOT UNWIND")
return false
}
- if r.lastTag.String() != currentS {
- log.Info("\trepo version mismatch last vs current", r.lastTag.String(), "!=", currentS)
- r.setGoSumStatus("CAN NOT UNWIND")
+ if r.LastTag() != currentS {
+ log.Info("\trepo version mismatch last vs current", r.LastTag(), "!=", currentS)
+ r.Status.SetGoSumStatus("CAN NOT UNWIND")
return false
}
- if release.version.String() != r.lastTag.String() {
- log.Info("\trepo version mismatch last vs official", r.lastTag.String(), "!=", release.version.String())
- r.setGoSumStatus("CAN NOT UNWIND")
+ if release.version.String() != r.LastTag() {
+ log.Info("\trepo version mismatch last vs official", r.LastTag(), "!=", release.version.String())
+ r.Status.SetGoSumStatus("CAN NOT UNWIND")
return false
}
- fullpath := filepath.Join(me.goSrcPwd.String(), r.String())
+ fullpath := filepath.Join(me.goSrcPwd.String(), r.GoPath())
testf := filepath.Join(fullpath, "go.mod")
if Exists(testf) {
log.Info("\trepo is ready. go.mod exists")
- r.setGoSumStatus("UNWIND")
+ r.Status.SetGoSumStatus("UNWIND")
return true
}
- fullpath = filepath.Join(me.goSrcPwd.String(), r.String())
+ fullpath = filepath.Join(me.GoSrcPath(), r.GoPath())
testf = filepath.Join(fullpath, "go.sum")
if Exists(testf) {
log.Info("\trepo is ready. go.sum exists")
- r.setGoSumStatus("UNWIND")
+ r.Status.SetGoSumStatus("UNWIND")
return true
}
- r.setGoSumStatus("NO UNWIND?")
+ r.Status.SetGoSumStatus("NO UNWIND?")
return false
}
diff --git a/main.go b/main.go
index 3f6be1e..f1d6d98 100644
--- a/main.go
+++ b/main.go
@@ -2,11 +2,9 @@ package main
import (
"embed"
- "fmt"
"os"
"path/filepath"
"strings"
- "time"
"go.wit.com/gui"
"go.wit.com/lib/gui/shell"
@@ -23,7 +21,6 @@ var resToolkit embed.FS
func main() {
me = new(autoType)
- me.allrepos = make(map[string]*repo)
// TODO: autocompute these in the gui
releaseReasonS = os.Getenv("GUIRELEASE_REASON")
@@ -39,11 +36,15 @@ func main() {
me.myGui.InitEmbed(resToolkit)
me.myGui.Default()
+ // our main window
me.mainWindow = me.myGui.NewWindow("GUI release manager")
me.mainBox = me.mainWindow.NewBox("bw hbox", true)
+ // the left side of the window options
globalDisplayOptions(me.mainBox)
+ // sanity check of things that might be around that mess
+ // up things later
// if you have a go.work file, you must delete it
// TODO: check for go.work files anywhere
homeDir, _ := os.UserHomeDir()
@@ -53,95 +54,101 @@ func main() {
os.Exit(0)
}
+ // sanity check of things that might be around that mess
+ // up things later
+ // check to make sure we have a go.sum here
gosum := filepath.Join(homeDir, "go/src/go.wit.com/apps/guireleaser/go.sum")
if !shell.Exists(gosum) {
log.Info("go.sum must exist here")
os.Exit(0)
}
- repoworld()
-
+ // save the ENV var here
me.releaseReasonS = releaseReasonS
- for i, repo := range me.allrepos {
+ me.repos = makeRepoView()
+
+ // go through and set the target versions for each repo
+ // todo: add sanity checking in repolist to verify these and/or autocompute them
+ // for now, just don't be stupid when you set your ENV vars
+ // widget I versioned early before I knew what the hell this would mean and can
+ // not be down versioned because that's not how GO versioning works. Once you
+ // set the version for a path, it's set in stone forever. (smart system!)
+ // we could rename go.wit.com/widget to go.wit.com/newwidget and restart the versioning
+ // system, but that's rediculous and this servers to always remind me to never make this mistake again
+ for i, repo := range me.repos.View.AllRepos() {
if repo == nil {
log.Info("initial scan i = nil", i)
continue
}
- log.Info("initial scan repo", repo.String())
- if repo.status == nil {
- log.Info("repo.status == nil", repo.String())
+ log.Info("initial scan repo", repo.Name())
+ if repo.Status == nil {
+ log.Info("repo.status == nil", repo.Name())
continue
}
- repo.status.UpdateNew()
- repo.newScan()
-
- if repo.String() == "go.wit.com/widget" {
- repo.targetVersion.SetText("v" + widgetVersion)
+ if repo.GoPath() == "go.wit.com/widget" {
+ repo.Status.SetTargetVersion("v" + widgetVersion)
} else {
- repo.targetVersion.SetText("v" + releaseVersion)
+ repo.Status.SetTargetVersion("v" + releaseVersion)
}
- if strings.HasPrefix(repo.String(), "go.wit.com/dev/") {
- lasttag := repo.status.GetLastTagVersion()
- repo.targetVersion.SetText(lasttag)
+ if strings.HasPrefix(repo.GoPath(), "go.wit.com/dev/") {
+ lasttag := repo.Status.GetLastTagVersion()
+ repo.Status.SetTargetVersion(lasttag)
}
- // if repo.String() == "go.wit.com/apps/guireleaser" {
}
log.Info("Creating the Release Window")
+ // create the right side of the main window
createReleaseBox(me.mainBox)
- // createUnreleaseBox(me.mainBox)
- for _, repo := range me.allrepos {
- if repo.status.ReadOnly() {
+
+ // start the initail scan and make sure each repo is set
+ // to the master branch
+ for _, repo := range me.repos.View.AllRepos() {
+ if repo.ReadOnly() {
continue
}
- if whitelist(repo.String()) {
+ if whitelist(repo.GoPath()) {
continue
}
- if repo.status.CheckoutMaster() {
- log.Warn("set master branch worked", repo.String())
- repo.newScan()
+ if repo.Status.CheckoutMaster() {
+ log.Warn("git checkout master branch worked", repo.Name())
+ repo.Status.UpdateNew()
} else {
- repo.newScan()
- log.Warn("set master branch failed", repo.String())
- log.Warn("set master branch failed", repo.String())
- log.Warn("set master branch failed", repo.String())
+ repo.Status.UpdateNew()
+ log.Warn("git checkout master branch failed", repo.Name())
}
}
- showHideRepos()
-
+ // disable the open repo button. this isn't really important
+ // but does indicates the app (and toolkit) is working
+ // this can be removed later, but in these early days, I'm using this
+ // tool to release the code for this app, the gui and the gui toolkits
+ // and sometimes they lie, don't display stuff, don't even disable things
+ // so I can't trust even what I see. It's complicated right now still.
release.openrepo.Disable()
- // scan repos every 30 seconds
- // check every second for the checkbox changing
- var i int = 60
- myTicker(1*time.Second, "newScan()", func() {
- i += 1
- if !me.scanEveryMinute.Checked() {
- if i < 60 {
- i = 60
- }
- // print every 13 seconds
- if i%13 == 0 {
- log.Info("Not auto scanning", i)
- }
- return
- }
- if i < 60 {
- return
- }
- i = 0
- duration := timeFunction(func() {
- scanGoSum()
- for _, repo := range me.allrepos {
- repo.newScan()
- }
- })
- s := fmt.Sprint(duration)
- me.autoWorkingPwd.SetText(s)
+ // I don't know what this is autotypist thing?
+ // globalResetOptions(me.mainbox)
+
+ // hopefully this is the list of all the golang packages and only the GUI golang packages
+ me.repos = makeRepoView()
+
+ // parse config file and scan for .git repos
+ me.repos.initRepoList()
+
+ // reads in the State of all the repos
+ // TODO: should not really be necessary directly after init()
+ me.repos.View.ScanRepositories()
+
+ me.Enable()
+
+ // intermittently scans the status indefinitly
+ me.repos.View.Watchdog(func() {
+ log.Info("In main()")
+ // processing is done. update the repo summary box
+ // me.summary.Update()
})
}
diff --git a/releaseBox.go b/releaseBox.go
index c3e90c8..27581b5 100644
--- a/releaseBox.go
+++ b/releaseBox.go
@@ -10,12 +10,13 @@ import (
"go.wit.com/log"
"go.wit.com/lib/gadgets"
+ "go.wit.com/lib/gui/repolist"
)
var release releaseStruct
type releaseStruct struct {
- current *repo
+ current *repolist.Repo
box *gui.Node
group *gui.Node
@@ -40,11 +41,11 @@ type releaseStruct struct {
makeRedomodB *gui.Node
sendVersionB *gui.Node
checkSafeB *gui.Node
- whitelist map[string]*repo
+ whitelist map[string]*repolist.Repo
// store myself here. use myself to
// do garbage go get tests and other potential junk
- guireleaser *repo
+ guireleaser *repolist.Repo
}
func (w *autoType) Disable() {
@@ -75,16 +76,18 @@ func createReleaseBox(box *gui.Node) {
me.Enable()
})
release.grid.NewButton("findNextDirty()", func() {
- me.Disable()
- defer me.Enable()
- if findNextDirty("PRIMATIVE") {
- log.Info("findNextDirty() found a repo")
- return
- }
- if findNextDirty("") {
- log.Info("findNextDirty() found a repo")
- return
- }
+ /*
+ me.Disable()
+ defer me.Enable()
+ if findNextDirty("PRIMATIVE") {
+ log.Info("findNextDirty() found a repo")
+ return
+ }
+ if findNextDirty("") {
+ log.Info("findNextDirty() found a repo")
+ return
+ }
+ */
})
release.releaseVersionB = release.grid.NewButton("release version", func() {
@@ -98,7 +101,7 @@ func createReleaseBox(box *gui.Node) {
})
release.openrepo = release.grid.NewButton("open repo", func() {
- release.current.status.Toggle()
+ release.current.Status.Toggle()
})
release.openrepo.Disable()
@@ -134,22 +137,22 @@ func createReleaseBox(box *gui.Node) {
release.grid.NewButton("Check Ready", func() {
buttonDisable()
defer buttonEnable()
- goSumS := release.current.getGoSumStatus()
- dirtyS := release.current.dirtyLabel.String()
- lastS := release.current.status.GetLastTagVersion()
+ goSumS := release.current.GoState()
+ dirtyS := release.current.State()
+ lastS := release.current.LastTag()
if CheckReady() {
- log.Info("repo is ready", release.current.String(), goSumS, dirtyS, lastS)
+ log.Info("repo is ready", release.current.Name(), goSumS, dirtyS, lastS)
return
} else {
- log.Info("\trepo is not ready", release.current.String(), goSumS, dirtyS, lastS)
+ log.Info("\trepo is not ready", release.current.Name(), goSumS, dirtyS, lastS)
}
})
release.grid.NewButton("set ignore", func() {
- tmp := release.current.getGoSumStatus()
+ tmp := release.current.GoState()
log.Info("trying to set repo IGNORE is now =", tmp)
- release.current.setGoSumStatus("IGNORE")
- release.whitelist[release.current.String()] = release.current
+ release.current.SetGoState("IGNORE")
+ release.whitelist[release.current.GoPath()] = release.current
})
release.checkSafeB = release.grid.NewButton("fullDoubleCheckFix()", func() {
@@ -165,18 +168,18 @@ func createReleaseBox(box *gui.Node) {
release.checkGoSumB = release.grid.NewButton("CheckGoSum()", func() {
buttonDisable()
- if ok, _ := release.current.status.CheckGoSum(); ok {
+ if ok, _ := release.current.Status.CheckGoSum(); ok {
log.Info("repo has go.sum requirements that are clean")
// release.current.setGoSumStatus("CLEAN")
- release.status.SetValue("GOOD")
- release.notes.SetValue("CheckGoSum() does not seem to lie")
+ release.status.SetText("GOOD")
+ release.notes.SetText("CheckGoSum() does not seem to lie")
}
buttonEnable()
})
release.makeRedomodB = release.grid.NewButton("make redomod", func() {
buttonDisable()
- if release.current.status.MakeRedomod() {
+ if release.current.Status.MakeRedomod() {
} else {
log.Info("This is bad. stop here")
}
@@ -198,8 +201,8 @@ func createReleaseBox(box *gui.Node) {
buttonDisable()
// rather than loop forever, at least limit this to the number of repos
// incase something, somewhere, goes wrong
- duration := timeFunction(func() {
- for n := 0; n <= len(me.allrepos); n++ {
+ duration := repolist.TimeFunction(func() {
+ for n := 0; n <= len(me.repos.View.AllRepos()); n++ {
if doRelease() {
log.Info("doRelease() worked")
} else {
@@ -222,18 +225,18 @@ func createReleaseBox(box *gui.Node) {
}
func fullDoubleCheckFix() bool {
- release.current.status.CheckSafeGoSumRemake()
- if !release.current.status.MakeRedomod() {
+ release.current.Status.CheckSafeGoSumRemake()
+ if !release.current.Status.MakeRedomod() {
log.Info("go mod failed")
return false
}
- if ok, _ := release.current.status.CheckGoSum(); ok {
+ if ok, _ := release.current.Status.CheckGoSum(); ok {
log.Info("go.sum is clean")
} else {
log.Info("repo go.sum FAILED")
return false
}
- if ok, _ := release.current.status.CheckGoSum(); ok {
+ if ok, _ := release.current.Status.CheckGoSum(); ok {
log.Info("repo has go.sum requirements that are clean")
// release.current.setGoSumStatus("CLEAN")
release.status.SetValue("GOOD")
@@ -244,43 +247,43 @@ func fullDoubleCheckFix() bool {
}
func goodCheckGoSum() bool {
- tmp := release.current.String()
- log.Info("goodCheckGoSum() START on repo:", tmp, "STATUS =", release.current.getGoSumStatus())
+ tmp := release.current.Name()
+ log.Info("goodCheckGoSum() START on repo:", tmp, "STATUS =", release.current.GoState())
var maybe bool = true
- goConfig := release.current.status.GetGoDeps()
+ goConfig := release.current.Status.GetGoDeps()
for depname, version := range goConfig {
log.Info("Checking repo deps:", depname, version)
- repo, ok := me.allrepos[depname]
- if ok {
- goSumS := repo.getGoSumStatus()
- // ignore dependencies on whitelisted repos
- // TODO: warn the user about the whitelist
- if goSumS == "WHITELIST" {
- continue
- }
- // check if the dependent repo is ReadOnly
- // if so, there isn't anything we can do about
- // version mis-matches
- if repo.status.ReadOnly() {
- continue
- }
- lastS := repo.status.GetLastTagVersion()
- targetS := repo.targetVersion.String()
- log.Info(" repo deps:", depname, version, "vs", goSumS, lastS, targetS)
- if lastS != targetS {
- log.Info("repo deps: FALSE lastS != targetS", lastS, targetS)
- log.Info("repo deps: FALSE status.ReadOnly()", release.current.status.ReadOnly())
- log.Info("repo deps: FALSE path", release.current.String())
- maybe = false
- }
- } else {
+ repo := me.repos.View.FindRepo(depname)
+ if repo != nil {
log.Info(" repo deps: IGNORE", depname, version)
+ continue
+ }
+ goSumS := repo.GoState()
+ // ignore dependencies on whitelisted repos
+ // TODO: warn the user about the whitelist
+ if goSumS == "WHITELIST" {
+ continue
+ }
+ // check if the dependent repo is ReadOnly
+ // if so, there isn't anything we can do about
+ // version mis-matches
+ if repo.ReadOnly() {
+ continue
+ }
+ lastS := repo.LastTag()
+ targetS := repo.Status.GetTargetVersion()
+ log.Info(" repo deps:", depname, version, "vs", goSumS, lastS, targetS)
+ if lastS != targetS {
+ log.Info("repo deps: FALSE lastS != targetS", lastS, targetS)
+ log.Info("repo deps: FALSE status.ReadOnly()", release.current.ReadOnly())
+ log.Info("repo deps: FALSE path", release.current.GoPath())
+ maybe = false
}
}
if maybe {
- log.Info("SUCCEEDED.", release.current.String())
- log.Info("SUCCEEDED. goSumStatus.String() =", release.current.goSumStatus.String())
+ log.Info("SUCCEEDED.", release.current.Name())
+ log.Info("SUCCEEDED. goSumStatus.String() =", release.current.GoState())
log.Info("SUCCEEDED. MAYBE. try it again get go.sum requirements")
return true
} else {
@@ -297,17 +300,17 @@ func buttonEnable() {
me.Enable()
}
-func setCurrentRepo(newcur *repo, s string, note string) bool {
- if newcur.status.ReadOnly() {
+func setCurrentRepo(newcur *repolist.Repo, s string, note string) bool {
+ if newcur.ReadOnly() {
return false
}
- release.repo.SetValue(newcur.status.String())
- release.status.SetValue(s)
- release.notes.SetValue(note)
+ release.repo.SetText(newcur.GoPath())
+ release.status.SetText(s)
+ release.notes.SetText(note)
release.current = newcur
- release.version.SetText(release.current.targetVersion.String())
- release.releaseVersionB.SetText("release version " + release.current.targetVersion.String())
+ release.version.SetText(release.current.Status.GetTargetVersion())
+ release.releaseVersionB.SetText("release version " + release.current.Status.GetTargetVersion())
// release.unreleaseB.SetText("un-release version " + release.current.targetVersion.String())
release.openrepo.Enable()
@@ -315,14 +318,14 @@ func setCurrentRepo(newcur *repo, s string, note string) bool {
}
func scanForReady() bool {
- for _, repo := range me.allrepos {
- goSumS := repo.getGoSumStatus()
- dirtyS := repo.dirtyLabel.String()
- log.Info("findNextDirty()", repo.String(), goSumS, dirtyS)
+ for _, repo := range me.repos.View.AllRepos() {
+ goSumS := repo.GoState()
+ dirtyS := repo.State()
+ log.Info("findNextDirty()", repo.GoPath(), goSumS, dirtyS)
- if whitelist(repo.String()) {
- log.Info("found WHITELIST", repo.String())
- repo.setGoSumStatus("WHITELIST")
+ if whitelist(repo.GoPath()) {
+ log.Info("found WHITELIST", repo.GoPath())
+ repo.Status.SetGoSumStatus("WHITELIST")
continue
}
@@ -334,20 +337,21 @@ func scanForReady() bool {
return true
}
+// trys to figure out if there is still something to update
+// todo: redo this logic as it is terrible
func findNextDirty(onlyKind string) bool {
- for key := range me.allrepos {
- repo := me.allrepos[key]
- goSumS := repo.getGoSumStatus()
- dirtyS := repo.dirtyLabel.String()
+ for _, repo := range me.repos.View.AllRepos() {
+ goSumS := repo.Status.GetGoSumStatus()
+ // dirtyS := repo.State()
- log.Info("findNextDirty()", repo.String(), goSumS, dirtyS)
- if repo.status.ReadOnly() {
+ log.Info("findNextDirty()", repo.GoPath(), goSumS)
+ if repo.ReadOnly() {
log.Info("findNextDirty() skipping readonly")
continue
}
if goSumS == "PRIMATIVE" {
if setCurrentRepo(repo, "PRIMATIVE", "release new version") {
- if release.version.String() == release.current.status.GetLastTagVersion() {
+ if release.version.String() == release.current.Status.GetLastTagVersion() {
// everything is fine. the primative has already been released
} else {
return true
@@ -369,75 +373,15 @@ func findNextDirty(onlyKind string) bool {
continue
}
setCurrentRepo(repo, "REDO GOSUM", "try redoing the gosum")
- newgoSumS := release.current.getGoSumStatus()
- newdirtyS := release.current.dirtyLabel.String()
- newlastS := release.current.status.GetLastTagVersion()
+ newgoSumS := release.current.GoState()
+ // newdirtyS := release.current.dirtyLabel.String()
+ newlastS := release.current.LastTag()
if goodCheckGoSum() {
- log.Info("findNextDirty() returning true from goodCheckGoSum()", newgoSumS, newgoSumS, newdirtyS, newlastS)
+ log.Info("findNextDirty() returning true from goodCheckGoSum()", newgoSumS, newgoSumS, newlastS)
return true
- } else {
- // continue
- }
- if repo.String() == "go.wit.com/log" {
- log.Info("findNextDirty() FOUND LOG", repo.String(), goSumS, dirtyS)
- log.Info("findNextDirty() FOUND LOG", repo.String(), goSumS, dirtyS)
- log.Info("findNextDirty() FOUND LOG", repo.String(), goSumS, dirtyS)
- log.Info("findNextDirty() FOUND LOG", repo.String(), goSumS, dirtyS)
- log.Info("findNextDirty() FOUND LOG", repo.String(), goSumS, dirtyS)
- log.Sleep(10)
- return true
- }
- continue
- if goSumS == "UNRELEASED" {
- if setCurrentRepo(repo, "UNRELEASED", "manually check go.sum") {
- return true
- }
- continue
- }
- if goSumS == "NOT READY" {
- if setCurrentRepo(repo, "NOT READY", "manually check go.sum") {
- return true
- }
- continue
- }
- if goSumS == "DIRTY 2" {
- continue
- }
- if goSumS == "BAD DEP" {
- // find out what kind of BAD DEP?
- continue
- }
- // latestversion := repo.status.GetLastTagVersion()
- if goSumS == "CLEAN" {
- // if it's clean here, then check and remake the go.sum file
- // then stop to commit the release version
- repo.checkSafeGoSumRemake()
- if repo.checkDirty() {
- dirtyS = repo.dirtyLabel.String()
- }
- if dirtyS == "PERFECT" {
- continue
- }
- if setCurrentRepo(repo, "clean", "check manually") {
- return true
- }
- }
- if goSumS == "DIRTY" {
- if ok, missing := repo.status.CheckGoSum(); ok {
- log.Info("repo has go.sum requirements that are clean")
- // repo.setGoSumStatus("CLEAN")
- } else {
- log.Info("DIRTY 2 repo has go.sum requirements that are screwed up. missing:", missing)
- repo.setGoSumStatus("DIRTY 2")
- continue
- }
-
- if setCurrentRepo(repo, "dirty", "commit changes") {
- return true
- }
}
}
log.Info("tried to findNextDirty() but not sure what to do next")
- release.status.SetValue("ALL DONE?")
+ release.status.SetText("ALL DONE?")
return false
}
diff --git a/repolist.go b/repolist.go
deleted file mode 100644
index da0adbf..0000000
--- a/repolist.go
+++ /dev/null
@@ -1,167 +0,0 @@
-// This is a simple example
-package main
-
-import (
- "io/ioutil"
- "os/user"
- "strings"
-
- "go.wit.com/gui"
- "go.wit.com/lib/gadgets"
- "go.wit.com/lib/gui/repostatus"
- "go.wit.com/log"
-)
-
-func (r *repo) String() string {
- if r.status == nil {
- return r.path
- }
- return r.status.String()
-}
-
-func (r *repo) getPath() string {
- return r.path
-}
-
-func RemoveFirstElement(slice []string) (string, []string) {
- if len(slice) == 0 {
- return "", slice // Return the original slice if it's empty
- }
- return slice[0], slice[1:] // Return the slice without the first element
-}
-
-// returns path, master branch name, devel branch name, user branch name
-func splitLine(line string) (string, string, string, string) {
- var path, master, devel, user string
- parts := strings.Split(line, " ")
- path, parts = RemoveFirstElement(parts)
- master, parts = RemoveFirstElement(parts)
- devel, parts = RemoveFirstElement(parts)
- user, parts = RemoveFirstElement(parts)
- // path, master, devel, user := strings.Split(line, " ")
- return path, master, devel, user
-}
-
-func myrepolist() []string {
- content, _ := ioutil.ReadFile("/home/jcarr/.config/myrepolist")
- out := string(content)
- out = strings.TrimSpace(out)
- lines := strings.Split(out, "\n")
- return lines
-}
-
-func (r *repo) Hide() {
- r.pLabel.Hide()
- r.lastTag.Hide()
- r.vLabel.Hide()
- r.targetVersion.Hide()
-
- r.dirtyLabel.Hide()
- r.goSumStatus.Hide()
- r.statusButton.Hide()
- r.hidden = true
-}
-
-func (r *repo) Show() {
- r.pLabel.Show()
- r.lastTag.Show()
- r.vLabel.Show()
- r.targetVersion.Show()
-
- r.dirtyLabel.Show()
- r.goSumStatus.Show()
- r.statusButton.Show()
- r.hidden = false
-}
-
-// This creates a window
-func repoworld() {
- reposwin = gadgets.NewBasicWindow(me.myGui, "All git repositories in ~/go/src/")
- reposwin.Make()
- reposwin.Custom = func() {
- log.Warn("GOT HERE: main() gadgets.NewBasicWindow() close")
- log.Warn("Should I do something special here?")
- }
- reposbox = reposwin.Box().NewBox("bw vbox", false)
-
- reposgroup = reposbox.NewGroup("go repositories (read from ~/.config/myrepolist)")
- reposgrid = reposgroup.NewGrid("test", 7, 1)
-
- reposgrid.NewLabel("") // path goes here
-
- reposgrid.NewLabel("last tag")
- reposgrid.NewLabel("Current Ver")
- reposgrid.NewLabel("Target Ver")
-
- reposgrid.NewLabel("Status")
- reposgrid.NewLabel("go.sum")
-
- reposgrid.NewLabel("Show()")
-
- repos := myrepolist()
- for _, line := range repos {
- log.Verbose("repo =", line)
- path, mbranch, dbranch, ubranch := splitLine(line)
- if mbranch == "" {
- mbranch = "master"
- }
- if dbranch == "" {
- dbranch = "devel"
- }
- usr, _ := user.Current()
- if ubranch == "" {
- ubranch = usr.Username
- }
- addRepo(reposgrid, path, mbranch, dbranch, ubranch)
- }
-
- for i, path := range repostatus.ListGitDirectories() {
- // log.Info("addRepo()", i, path)
- tmp := strings.TrimPrefix(path, "/home/jcarr/go/src/")
- log.Info("addRepo()", i, tmp)
- addRepo(reposgrid, tmp, "master", "master", "master")
- }
-}
-
-func addRepo(grid *gui.Node, path string, master string, devel string, user string) {
- _, ok := me.allrepos[path]
- if ok {
- log.Info("addRepo() already had path", path)
- return
- }
-
- newRepo := new(repo)
-
- if path == "" {
- log.Warn("addRepo() got empty path", path, master, devel, user)
- return
- }
-
- newRepo.path = path
- newRepo.pLabel = grid.NewLabel(path)
-
- newRepo.lastTag = grid.NewLabel("")
- newRepo.vLabel = grid.NewLabel("")
- newRepo.targetVersion = grid.NewLabel("")
-
- newRepo.dirtyLabel = grid.NewLabel("")
- newRepo.goSumStatus = grid.NewLabel("?")
-
- newRepo.statusButton = grid.NewButton("Configure", func() {
- if newRepo.status == nil {
- log.Warn("status window doesn't exist")
- return
- }
- log.Warn("status window exists. trying TestDraw() here")
- newRepo.status.Toggle()
- setCurrentRepo(newRepo, "manually chosen", "notsure")
- })
-
- newRepo.status = repostatus.NewRepoStatusWindow(newRepo.path)
- if newRepo.status == nil {
- log.Warn("something is wrong with", path)
- os.Exit(0)
- }
- newRepo.hidden = false
- me.allrepos[path] = newRepo
-}
diff --git a/repoview.go b/repoview.go
new file mode 100644
index 0000000..fd57960
--- /dev/null
+++ b/repoview.go
@@ -0,0 +1,73 @@
+package main
+
+import (
+ "go.wit.com/lib/gadgets"
+ "go.wit.com/lib/gui/repolist"
+ "go.wit.com/log"
+
+ "go.wit.com/gui"
+)
+
+type repoWindow struct {
+ win *gadgets.BasicWindow
+ box *gui.Node
+ View *repolist.RepoList
+}
+
+func (r *repoWindow) Hidden() bool {
+ return r.win.Hidden()
+}
+
+func (r *repoWindow) Show() {
+ r.win.Show()
+}
+
+func (r *repoWindow) Hide() {
+ r.win.Hide()
+}
+
+func (r *repoWindow) Disable() {
+ r.box.Disable()
+}
+
+func (r *repoWindow) Enable() {
+ r.box.Enable()
+}
+
+// you can only have one of these
+func makeRepoView() *repoWindow {
+ if me.repos != nil {
+ return me.repos
+ }
+ r := new(repoWindow)
+ r.win = gadgets.RawBasicWindow("All git repositories in ~/go/src/")
+ r.win.Make()
+
+ r.box = r.win.Box().NewBox("bw vbox", false)
+ // me.reposwin.Draw()
+ r.win.Custom = func() {
+ log.Warn("GOT HERE: main() gadgets.NewBasicWindow() close")
+ log.Warn("Should I do something special here?")
+ }
+
+ r.repoAllButtons()
+
+ r.View = repolist.GuireleaserView(r.box)
+
+ return r
+}
+
+func (r *repoWindow) repoAllButtons() {
+ // reposbox.SetExpand(false)
+ group1 := r.box.NewGroup("Run on all repos:")
+
+ hbox := group1.Box()
+ // hbox.Horizontal()
+ hbox.Vertical()
+
+ box2 := hbox.Box().Vertical()
+ box2.NewButton("something", func() {
+ r.Disable()
+ r.Enable()
+ })
+}
diff --git a/scan.go b/scan.go
deleted file mode 100644
index 5945ece..0000000
--- a/scan.go
+++ /dev/null
@@ -1,88 +0,0 @@
-package main
-
-import (
- "fmt"
- "strings"
- "time"
-
- "go.wit.com/log"
-)
-
-func scanRepositories() {
- var i int = 0
- t := timeFunction(func() {
- for _, repo := range me.allrepos {
- repo.newScan()
- i += 1
- }
- })
- s := fmt.Sprint(t)
- log.Info("Scanned", i, "repositories. todo: count/show changes", s)
-}
-
-func (r *repo) newScan() bool {
- if r.status == nil {
- log.Warn("repo.status = nil. not initialized for some reason")
- return false
- }
-
- // first run the repostatus update
- r.status.UpdateNew()
-
- // now read those values and display them in our table
- // mname := r.status.GetMasterBranchName()
- // mver := r.status.GetMasterVersion()
- // mver = mver + " (" + mname + ")"
- // r.masterVersion.SetLabel(mver)
-
- cbname := r.status.GetCurrentBranchName()
- cbversion := r.status.GetCurrentBranchVersion()
- lasttag := r.status.GetLastTagVersion()
- r.lastTag.SetLabel(lasttag)
- r.vLabel.SetLabel(cbname + " " + cbversion)
-
- if c, ok := r.status.Changed(); ok {
- c := strings.TrimSpace(c)
- for _, line := range strings.Split(c, "\n") {
- log.Info(r.status.Path(), line)
- }
- }
- status := r.status.GetStatus()
- r.dirtyLabel.SetLabel(status)
- if status == "PERFECT" {
- if me.autoHidePerfect.Checked() {
- r.Hide()
- }
- return true
- }
- return false
-}
-
-// timeFunction takes a function as an argument and returns the execution time.
-func timeFunction(f func()) time.Duration {
- startTime := time.Now() // Record the start time
- f() // Execute the function
- return time.Since(startTime) // Calculate the elapsed time
-}
-
-func myTicker(t time.Duration, name string, f func()) {
- ticker := time.NewTicker(t)
- defer ticker.Stop()
- done := make(chan bool)
- /*
- go func() {
- time.Sleep(10 * time.Second)
- done <- true
- }()
- */
- for {
- select {
- case <-done:
- fmt.Println("Done!")
- return
- case t := <-ticker.C:
- log.Verbose(name, "Current time: ", t)
- f()
- }
- }
-}
diff --git a/scanGoSum.go b/scanGoSum.go
index 8701808..55890ec 100644
--- a/scanGoSum.go
+++ b/scanGoSum.go
@@ -2,61 +2,55 @@
package main
import (
+ "go.wit.com/lib/gui/repolist"
"go.wit.com/log"
)
-func (r *repo) getGoSumStatus() string {
- return r.goSumStatus.String()
+/*
+func getGoSumStatus(r *repolist.Repo) string {
+ return r.Status.GoSumStatus.String()
}
-func (r *repo) setGoSumStatus(s string) {
+func setGoSumStatus(r *repolist.Repo, s string) {
r.goSumStatus.SetLabel(s)
r.status.SetGoSumStatus(s)
}
+*/
-func (r *repo) checkDirty() bool {
- if r.status.CheckDirty() {
- log.Info("dirty repo:", r.status.String(), r.getGoSumStatus())
- r.setGoSumStatus("DIRTY")
- return true
- }
- return false
-}
-
-func (r *repo) checkSafeGoSumRemake() {
- if ok, bad := r.status.CheckSafeGoSumRemake(); ok {
+func checkSafeGoSumRemake(r *repolist.Repo) {
+ if ok, bad := r.Status.CheckSafeGoSumRemake(); ok {
log.Info("checkSafeGoSumRemake() is safe to redo")
- r.setGoSumStatus("SAFE")
- r.status.MakeRedomod()
+ r.Status.SetGoSumStatus("SAFE")
+ r.Status.MakeRedomod()
} else {
log.Info("checkSafeGoSumRemake() is not safe. problems:", bad)
- r.setGoSumStatus("BAD DEP")
+ r.Status.SetGoSumStatus("BAD DEP")
}
}
func scanGoSum() {
- for _, repo := range me.allrepos {
- if repo.String() == "go.wit.com/apps/guireleaser" {
+ for _, repo := range me.repos.View.AllRepos() {
+ if repo.GoPath() == "go.wit.com/apps/guireleaser" {
if release.guireleaser == nil {
release.guireleaser = repo
}
}
- latestversion := repo.status.GetLastTagVersion()
- if repo.getGoSumStatus() == "BAD" {
+ latestversion := repo.Status.GetLastTagVersion()
+ if repo.GoState() == "BAD" {
continue
}
- if repo.getGoSumStatus() == "DIRTY" {
+ if repo.GoState() == "DIRTY" {
continue
}
- if repo.status.CheckPrimativeGoMod() {
- log.Info("PRIMATIVE repo:", latestversion, repo.status.String())
- repo.setGoSumStatus("PRIMATIVE")
+ if repo.Status.CheckPrimativeGoMod() {
+ log.Info("PRIMATIVE repo:", latestversion, repo.GoPath())
+ repo.SetGoState("PRIMATIVE")
continue
}
- if repo.checkDirty() {
- log.Info("dirty repo:", latestversion, repo.status.String())
- log.Info("dirty repo.getGoSumStatus =", repo.getGoSumStatus())
- repo.setGoSumStatus("DIRTY")
+ if repo.CheckDirty() {
+ log.Info("dirty repo:", latestversion, repo.GoPath())
+ log.Info("dirty repo.getGoSumStatus =", repo.GoState())
+ repo.SetGoState("DIRTY")
// release.repo.SetValue(repo.status.String())
// release.status.SetValue("dirty")
@@ -65,12 +59,12 @@ func scanGoSum() {
// release.openrepo.Enable()
continue
}
- if ok, missing := repo.status.CheckGoSum(); ok {
+ if ok, missing := repo.Status.CheckGoSum(); ok {
log.Info("repo has go.sum requirements that are clean")
- repo.setGoSumStatus("CLEAN")
+ repo.SetGoState("CLEAN")
} else {
log.Info("repo has go.sum requirements that are screwed up. missing:", missing)
- repo.setGoSumStatus("BAD")
+ repo.SetGoState("BAD")
// release.repo.SetValue(repo.status.String())
// release.status.SetValue("bad")
@@ -79,14 +73,14 @@ func scanGoSum() {
// release.openrepo.Enable()
continue
}
- status := repo.dirtyLabel.String()
+ status := repo.State()
if status == "PERFECT" {
continue
} else {
- repo.newScan()
+ repo.NewScan()
}
- log.Info("repo:", latestversion, status, repo.status.String())
+ log.Info("repo:", latestversion, status, repo.GoPath())
}
log.Info("scanGoSum() did everything, not sure what to do next")
}
diff --git a/structs.go b/structs.go
index f04acd6..d951e78 100644
--- a/structs.go
+++ b/structs.go
@@ -4,11 +4,10 @@ package main
import (
"go.wit.com/gui"
"go.wit.com/lib/gadgets"
- "go.wit.com/lib/gui/repostatus"
)
// the main window nodes
-var reposwin *gadgets.BasicWindow
+// var reposwin *gadgets.BasicWindow
var reposbox *gui.Node
var reposgrid *gui.Node
var reposgroup *gui.Node
@@ -16,15 +15,17 @@ var reposgroup *gui.Node
var me *autoType
type autoType struct {
- allrepos map[string]*repo
- myGui *gui.Node
+ myGui *gui.Node
releaseReasonS string // = "gocui dropdown select"
- // autotypistWindow *gadgets.BasicWindow
+ // guireleaser window
mainWindow *gui.Node
mainBox *gui.Node
+ // our view of the repositories
+ repos *repoWindow
+
// #### autotypist Global Display Options
autoHidePerfect *gui.Node
autoHideReadOnly *gui.Node
@@ -77,12 +78,17 @@ type autoType struct {
setBranchesToMasterB *gui.Node
}
+func (my *autoType) GoSrcPath() string {
+ return my.goSrcPwd.String()
+}
+
/*
var cmds *gui.Node
var doit *gui.Node
var dryrun *gui.Node
*/
+/*
type repo struct {
hidden bool
path string
@@ -104,3 +110,4 @@ type repo struct {
status *repostatus.RepoStatus
}
+*/
diff --git a/whitelist.go b/whitelist.go
index 08b1b03..665c7ef 100644
--- a/whitelist.go
+++ b/whitelist.go
@@ -3,13 +3,15 @@ package main
import (
"strings"
+
+ "go.wit.com/lib/gui/repolist"
)
func initWhitelist() {
- release.whitelist = make(map[string]*repo)
- for _, repo := range me.allrepos {
- if strings.HasPrefix(repo.String(), "go.wit.com/dev/davecgh") {
- release.whitelist[repo.String()] = repo
+ release.whitelist = make(map[string]*repolist.Repo)
+ for _, repo := range me.repos.View.AllRepos() {
+ if strings.HasPrefix(repo.GoPath(), "go.wit.com/dev/davecgh") {
+ release.whitelist[repo.GoPath()] = repo
}
// if repo.String() == "go.wit.com/apps/guireleaser" {
// release.whitelist[repo.String()] = repo