From ceeab4c0d2bc72b9bd06f58052ee16cf834b1890 Mon Sep 17 00:00:00 2001
From: Jeff Carr <jcarr@wit.com>
Date: Wed, 24 Jan 2024 22:22:34 -0600
Subject: [PATCH] working on release versioning

Signed-off-by: Jeff Carr <jcarr@wit.com>
---
 globalBuildOptions.go   |  8 ++---
 globalDisplayOptions.go | 17 +++++-----
 globalResetOptions.go   |  2 +-
 go.mod                  | 10 +++---
 go.sum                  | 20 ++++++------
 main.go                 | 24 +++++++++++---
 releaseWindow.go        | 69 +++++++++++++++++++++++++++++------------
 scan.go                 |  6 ++--
 structs.go              |  8 ++---
 unix.go                 | 59 -----------------------------------
 10 files changed, 106 insertions(+), 117 deletions(-)
 delete mode 100644 unix.go

diff --git a/globalBuildOptions.go b/globalBuildOptions.go
index 041ed32..b9da67c 100644
--- a/globalBuildOptions.go
+++ b/globalBuildOptions.go
@@ -109,14 +109,14 @@ func globalBuildOptions(box *gui.Node) {
 	group2.NewButton("run git status", func() {
 		me.autoWorkingPwd.SetValue("~/go/src")
 		log.Warn("scanning allrepos")
-		for _, path := range me.allrepos {
+		for path, _ := range me.allrepos {
 			fullpath := "/home/jcarr/go/src/" + path
 			quickCmd(fullpath, []string{"git", "status"})
 		}
 	})
 
 	me.rerunGoMod = group2.NewButton("remove go.mod & go.sum", func() {
-		for _, path := range me.allrepos {
+		for path, _ := range me.allrepos {
 			fullpath := "/home/jcarr/go/src/" + path
 			if quickCmd(fullpath, []string{"rm", "-f", "go.mod", "go.sum"}) {
 				log.Info("rm go.mod FAILED in repo", fullpath, me.stopOnErrors.Bool())
@@ -129,7 +129,7 @@ func globalBuildOptions(box *gui.Node) {
 
 	me.rerunGoMod = group2.NewButton("run go mod & go tidy", func() {
 		os.Unsetenv("GO111MODULE")
-		for _, path := range me.allrepos {
+		for path, _ := range me.allrepos {
 			fullpath := "/home/jcarr/go/src/" + path
 			quickCmd(fullpath, []string{"go", "mod", "init"})
 			quickCmd(fullpath, []string{"go", "mod", "tidy"})
@@ -137,7 +137,7 @@ func globalBuildOptions(box *gui.Node) {
 	})
 
 	me.rerunGoMod = group2.NewButton("git checkout go.mod & go.sum", func() {
-		for _, path := range me.allrepos {
+		for path, _ := range me.allrepos {
 			fullpath := "/home/jcarr/go/src/" + path
 			quickCmd(fullpath, []string{"git", "checkout", "go.mod"})
 			quickCmd(fullpath, []string{"git", "checkout", "go.sum"})
diff --git a/globalDisplayOptions.go b/globalDisplayOptions.go
index a694958..2f957cc 100644
--- a/globalDisplayOptions.go
+++ b/globalDisplayOptions.go
@@ -27,15 +27,18 @@ func globalDisplayOptions(box *gui.Node) {
 		log.Info("Toggling the Release Window")
 		release.win.Toggle()
 		release.openrepo.Disable()
+		for _, repo := range me.allrepos {
+			repo.newScan()
+		}
 	})
 	/*
 		group1.NewButton("hide all", func() {
-			for repo, _ := range me.allrepos {
+			for _, repo := range me.allrepos {
 				repo.Hide()
 			}
 		})
 		group1.NewButton("show all", func() {
-			for repo, _ := range me.allrepos {
+			for repo := range me.allrepos {
 				repo.Show()
 			}
 		})
@@ -44,26 +47,26 @@ func globalDisplayOptions(box *gui.Node) {
 	me.autoHidePerfect = group1.NewCheckbox("Hide Perfectly clean repos").SetChecked(false)
 	me.autoHidePerfect.Custom = func() {
 		if me.autoHidePerfect.Checked() {
-			for repo, _ := range me.allrepos {
+			for _, repo := range me.allrepos {
 				if repo.dirtyLabel.String() == "PERFECT" {
 					repo.Hide()
 				}
 			}
 		} else {
-			for repo, _ := range me.allrepos {
+			for _, repo := range me.allrepos {
 				repo.Show()
 			}
 		}
 	}
 
 	group1.NewButton("status.Update() all", func() {
-		for repo, _ := range me.allrepos {
+		for _, repo := range me.allrepos {
 			repo.status.Update()
 		}
 	})
 
 	group1.NewButton("rescan all", func() {
-		for repo, _ := range me.allrepos {
+		for _, repo := range me.allrepos {
 			repo.newScan()
 		}
 	})
@@ -79,7 +82,7 @@ func globalDisplayOptions(box *gui.Node) {
 }
 
 func hidePerfect() {
-	for repo, _ := range me.allrepos {
+	for _, repo := range me.allrepos {
 		if repo.dirtyLabel.String() == "PERFECT" {
 			if repo.hidden {
 				continue
diff --git a/globalResetOptions.go b/globalResetOptions.go
index e7ccfa1..4c4631e 100644
--- a/globalResetOptions.go
+++ b/globalResetOptions.go
@@ -11,7 +11,7 @@ func globalResetOptions(box *gui.Node) {
 
 	buildOptions.NewLabel("start over")
 	buildOptions.NewButton("rm ~/go/src & ~/go/pkg", func() {
-		for repo, _ := range me.allrepos {
+		for _, repo := range me.allrepos {
 			// status := repo.getStatus()
 			if repo.status.CheckDirty() {
 				log.Warn("repo is dirty. commit your changes first", repo.String())
diff --git a/go.mod b/go.mod
index 48d4141..710c688 100644
--- a/go.mod
+++ b/go.mod
@@ -3,11 +3,11 @@ module go.wit.com/apps/autotypist
 go 1.21.4
 
 require (
-	go.wit.com/gui v0.12.20
-	go.wit.com/lib/debugger v0.12.7
-	go.wit.com/lib/gadgets v0.12.16
-	go.wit.com/lib/gui/logsettings v0.10.2
-	go.wit.com/lib/gui/repostatus v0.12.20
+	go.wit.com/gui v0.13.11
+	go.wit.com/lib/debugger v0.13.0
+	go.wit.com/lib/gadgets v0.13.0
+	go.wit.com/lib/gui/logsettings v0.13.0
+	go.wit.com/lib/gui/repostatus v0.13.1
 	go.wit.com/log v0.5.6
 )
 
diff --git a/go.sum b/go.sum
index 145f45d..30e3d72 100644
--- a/go.sum
+++ b/go.sum
@@ -4,16 +4,16 @@ go.wit.com/dev/alexflint/scalar v1.2.1 h1:loXOcbVnd+8YeJRLey+XXidecBiedMDO00zQ26
 go.wit.com/dev/alexflint/scalar v1.2.1/go.mod h1:+rYsfxqdI2cwA8kJ7GCMwWbNJvfvWUurOCXLiwdTtSs=
 go.wit.com/dev/davecgh/spew v1.1.4 h1:C9hj/rjlUpdK+E6aroyLjCbS5MFcyNUOuP1ICLWdNek=
 go.wit.com/dev/davecgh/spew v1.1.4/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA=
-go.wit.com/gui v0.12.20 h1:mIc2DKGcpQjZdgtAj5qzkBrBDiteWfIaEpLyMnIBkh8=
-go.wit.com/gui v0.12.20/go.mod h1:v2VgnOL3dlZ13KclYeedZ1cd20nQdvwjyJTNKvFX3DA=
-go.wit.com/lib/debugger v0.12.7 h1:c8ehU7p2asb//K4YgC17XG4o2pPP+IZb9lR2a0nBio8=
-go.wit.com/lib/debugger v0.12.7/go.mod h1:zcZstsgOcALjCNOiIE+KcKkrIF78ogYjwxmaQlBbmtQ=
-go.wit.com/lib/gadgets v0.12.16 h1:xHz8zZiTe8xiGvfWs3s9drYUbePTT/Te58u7WXHjx0s=
-go.wit.com/lib/gadgets v0.12.16/go.mod h1:9779QoRZlk+G3/MCcX4Io1eH3HTLImE0AXdAMMdw+0U=
-go.wit.com/lib/gui/logsettings v0.10.2 h1:xRx0AX1V74kC6CIm+ib6C3ziTcbBjR/Ju3rTLEpQMsw=
-go.wit.com/lib/gui/logsettings v0.10.2/go.mod h1:v5XUQ6WyNyfScR9oOFhdz8p1wtxCpNWXK3DJ/dbLPVo=
-go.wit.com/lib/gui/repostatus v0.12.20 h1:SPx45W8Yd6RZf0oZueXmMhlZsu3MVL8wdb5mVGovbfA=
-go.wit.com/lib/gui/repostatus v0.12.20/go.mod h1:EO5bI+/cGwHGBQG1S8pDtV58Rmw5HWbW9vZtFLg5Vkw=
+go.wit.com/gui v0.13.11 h1:d74Ko/XFZYR25P/AZfCQaVO2CuGh1BSjdUp1wjktdDg=
+go.wit.com/gui v0.13.11/go.mod h1:v2VgnOL3dlZ13KclYeedZ1cd20nQdvwjyJTNKvFX3DA=
+go.wit.com/lib/debugger v0.13.0 h1:k5XCa7BZFYA37rFf20iTAm5L4Ch+3eRuxCbHIhorYZI=
+go.wit.com/lib/debugger v0.13.0/go.mod h1:b3gykobdR+lcMjWAHJUa3GRsMYbnaHNwA/upfjpSA28=
+go.wit.com/lib/gadgets v0.13.0 h1:jtsEnf4DHqAxBxuYsaDlHti73rgaxYf/ffAXNB1PJAk=
+go.wit.com/lib/gadgets v0.13.0/go.mod h1:xidaHAL6Nk9+M9FkySVU1AG5i39v7T3PuFphUos6LxE=
+go.wit.com/lib/gui/logsettings v0.13.0 h1:iphACMcfdc5GoCcxZkShcWn9A/SwvnPmLXCSYSL+eJU=
+go.wit.com/lib/gui/logsettings v0.13.0/go.mod h1:h+skqrtQ3muJ1TzMQ7M568xAwqT7nZCGS32c5jYCrqc=
+go.wit.com/lib/gui/repostatus v0.13.1 h1:BFIBw6p1RoqvC3ibTpYTt/Tefsq86lXf6VKY0DZqqlk=
+go.wit.com/lib/gui/repostatus v0.13.1/go.mod h1:1q7IVR7sJ9r7wkrMi9VAG1JQFxy5PQutXCLPIUCvLd8=
 go.wit.com/log v0.5.6 h1:rDC3ju95zfEads4f1Zm+QMkqjZ39CsYAT/UmQQs7VP4=
 go.wit.com/log v0.5.6/go.mod h1:BaJBfHFqcJSJLXGQ9RHi3XVhPgsStxSMZRlaRxW4kAo=
 go.wit.com/widget v1.1.6 h1:av2miF5vlohMfARA/QGPTPfgW/ADup1c+oeAOKgroPY=
diff --git a/main.go b/main.go
index 1c03f30..a2f89db 100644
--- a/main.go
+++ b/main.go
@@ -18,7 +18,7 @@ var resToolkit embed.FS
 
 func main() {
 	me = new(autoType)
-	me.allrepos = make(map[*repo]string)
+	me.allrepos = make(map[string]*repo)
 
 	me.myGui = gui.New()
 	me.myGui.InitEmbed(resToolkit)
@@ -34,6 +34,12 @@ func main() {
 }
 
 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)
 
 	path = strings.Trim(path, "/") // trim any extranous '/' chars put in the config file by the user
@@ -76,16 +82,16 @@ func addRepo(grid *gui.Node, path string, master string, devel string, user stri
 	// newRepo.status = repostatus.New(me.myGui, newRepo.path)
 	newRepo.status = repostatus.NewRepoStatusWindow(newRepo.path)
 	newRepo.hidden = false
-	newRepo.status.SetMainWorkingName(me.mainBranch.String())
-	newRepo.status.SetDevelWorkingName(me.develBranch.String())
-	newRepo.status.SetUserWorkingName(me.userBranch.String())
+	newRepo.status.SetMainWorkingName(master)
+	newRepo.status.SetDevelWorkingName(devel)
+	newRepo.status.SetUserWorkingName(user)
 	/*
 		newRepo.status.SetDevelBranchName(devel)
 		newRepo.status.SetUserBranchName(user)
 		newRepo.status.Update()
 		newRepo.newScan()
 	*/
-	me.allrepos[newRepo] = path
+	me.allrepos[path] = newRepo
 }
 
 func autotypistWindow() {
@@ -145,5 +151,13 @@ func repoworld() {
 		}
 		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")
+	}
+
 	reposwin.Toggle()
 }
diff --git a/releaseWindow.go b/releaseWindow.go
index 78ad1a7..b42eb27 100644
--- a/releaseWindow.go
+++ b/releaseWindow.go
@@ -25,9 +25,9 @@ type releaseStruct struct {
 
 	openrepo *gui.Node
 
-	goGetB *gui.Node
-	checkGoSumB *gui.Node
-	checkDirtyB *gui.Node
+	goGetB       *gui.Node
+	checkGoSumB  *gui.Node
+	checkDirtyB  *gui.Node
 	makeRedomodB *gui.Node
 	sendVersionB *gui.Node
 }
@@ -60,6 +60,7 @@ func createReleaseWindow() {
 		} else {
 			findNextRepo()
 		}
+		findDirty2()
 	})
 
 	release.openrepo = release.grid.NewButton("open repo", func() {
@@ -67,12 +68,12 @@ func createReleaseWindow() {
 			log.Info("find the next repo first")
 			return
 		}
-		if release.current.status.CheckGoSum() {
+		if ok, missing := release.current.status.CheckGoSum(); ok {
 			log.Info("repo has go.sum requirements that are clean")
 			release.status.SetValue("CLEAN")
 			release.current.goSumStatus.SetValue("CLEAN")
 		} else {
-			log.Info("repo has go.sum requirements that are screwed up")
+			log.Info("BAD repo has go.sum requirements that are screwed up. missing:", missing)
 			release.status.SetValue("BAD")
 			release.current.goSumStatus.SetValue("BAD")
 		}
@@ -122,16 +123,22 @@ func createReleaseWindow() {
 		buttonDisable()
 		tmp := release.current.String()
 		log.Info("Run CheckGoSum on repo:", tmp)
-		if release.current.status.CheckGoSum() {
+		if ok, missing := release.current.status.CheckGoSum(); ok {
 			log.Info("repo has go.sum requirements that are clean")
 			release.current.goSumStatus.SetValue("CLEAN")
 			release.current.goSumStatus.SetLabel("CLEAN")
 			release.current.goSumStatus.SetText("CLEAN")
 		} else {
-			log.Info("repo has go.sum requirements that are screwed up")
-			if release.current.goSumStatus.String() == "BAD" {
-				release.current.goSumStatus.SetLabel("BAD VERSION")
-				release.current.goSumStatus.SetText("BAD VERSION")
+			if missing == "" {
+				log.Info("BAD VERSION repo has go.sum requirements that are screwed up.", tmp)
+				if release.current.goSumStatus.String() == "BAD" {
+					release.current.goSumStatus.SetLabel("BAD VERSION")
+					release.current.goSumStatus.SetText("BAD VERSION")
+				}
+			} else {
+				log.Info("BAD VERSION repo has go.sum requirements that are screwed up.", tmp)
+				log.Info("BAD VERSION need to addRepo() the missing repo", missing)
+				// addRepo(reposgrid, missing, "master", "master", "master")
 			}
 		}
 		buttonEnable()
@@ -188,8 +195,32 @@ func buttonEnable() {
 	release.sendVersionB.Enable()
 }
 
+func findDirty2() bool {
+	for _, repo := range me.allrepos {
+		goSumS := repo.goSumStatus.String()
+		dirtyS := repo.dirtyLabel.String()
+
+		if goSumS == "IGNORE" {
+			continue
+		}
+
+		if goSumS == "DIRTY 2" {
+			log.Info("repo DIRTY 2", repo.String(), goSumS, dirtyS)
+			release.repo.SetValue(repo.status.String())
+			release.status.SetValue("dirty 2")
+			release.notes.SetValue("check dirty 2 manually")
+			release.current = repo
+			release.openrepo.Enable()
+			return true
+		} else {
+			log.Info("repo not DIRTY 2", repo.String(), goSumS, dirtyS)
+		}
+	}
+	return false
+}
+
 func findNextDirty() bool {
-	for repo, _ := range me.allrepos {
+	for _, repo := range me.allrepos {
 		goSumS := repo.goSumStatus.String()
 		dirtyS := repo.dirtyLabel.String()
 
@@ -216,11 +247,11 @@ func findNextDirty() bool {
 			return true
 		}
 		if goSumS == "DIRTY" {
-			if repo.status.CheckGoSum() {
+			if ok, missing := repo.status.CheckGoSum(); ok {
 				log.Info("repo has go.sum requirements that are clean")
 				// repo.goSumStatus.SetLabel("CLEAN")
 			} else {
-				log.Info("repo has go.sum requirements that are screwed up")
+				log.Info("DIRTY 2 repo has go.sum requirements that are screwed up. missing:", missing)
 				repo.goSumStatus.SetLabel("DIRTY 2")
 				continue
 			}
@@ -235,12 +266,12 @@ func findNextDirty() bool {
 			return true
 		}
 	}
-	log.Info("tried to find() but not sure what to do next")
+	log.Info("tried to findNextDirty() but not sure what to do next")
 	return false
 }
 
 func findNextRepo() {
-	for repo, _ := range me.allrepos {
+	for _, repo := range me.allrepos {
 		goSumS := repo.goSumStatus.String()
 		dirtyS := repo.dirtyLabel.String()
 
@@ -267,12 +298,12 @@ func findNextRepo() {
 			return
 		}
 		if goSumS == "DIRTY" {
-			if repo.status.CheckGoSum() {
+			if ok, missing := repo.status.CheckGoSum(); ok {
 				log.Info("repo has go.sum requirements that are clean")
 				// repo.goSumStatus.SetLabel("CLEAN")
 			} else {
-				log.Info("repo has go.sum requirements that are screwed up")
-				repo.goSumStatus.SetLabel("DIRTY 2")
+				log.Info("DIRTY 3 repo has go.sum requirements that are screwed up. missing:", missing)
+				repo.goSumStatus.SetLabel("DIRTY 3")
 				continue
 			}
 
@@ -294,5 +325,5 @@ func findNextRepo() {
 			return
 		}
 	}
-	log.Info("tried to find() but not sure what to do next")
+	log.Info("tried to findNextRepo() but not sure what to do next")
 }
diff --git a/scan.go b/scan.go
index 554434d..c5b5ae5 100644
--- a/scan.go
+++ b/scan.go
@@ -75,7 +75,7 @@ func (r *repo) getStatus() string {
 }
 
 func scanGoSum() {
-	for repo, _ := range me.allrepos {
+	for _, repo := range me.allrepos {
 		latestversion := repo.status.GetLastTagVersion()
 		if repo.goSumStatus.String() == "BAD" {
 			continue
@@ -100,11 +100,11 @@ func scanGoSum() {
 			// release.openrepo.Enable()
 			continue
 		}
-		if repo.status.CheckGoSum() {
+		if ok, missing := repo.status.CheckGoSum(); ok {
 			log.Info("repo has go.sum requirements that are clean")
 			repo.goSumStatus.SetLabel("CLEAN")
 		} else {
-			log.Info("repo has go.sum requirements that are screwed up")
+			log.Info("repo has go.sum requirements that are screwed up. missing:", missing)
 			repo.goSumStatus.SetLabel("BAD")
 
 			// release.repo.SetValue(repo.status.String())
diff --git a/structs.go b/structs.go
index c0d9d11..760ee2e 100644
--- a/structs.go
+++ b/structs.go
@@ -16,7 +16,7 @@ var reposgroup *gui.Node
 var me *autoType
 
 type autoType struct {
-	allrepos map[*repo]string
+	allrepos map[string]*repo
 	myGui    *gui.Node
 
 	autotypistWindow *gadgets.BasicWindow
@@ -68,9 +68,9 @@ type repo struct {
 
 	pLabel *gui.Node // path label
 	// bLabel *gui.Node // branch label
-	lastTag    *gui.Node // last tagged version label
-	vLabel     *gui.Node // version label
-	dirtyLabel *gui.Node // git state (dirty or not?)
+	lastTag     *gui.Node // last tagged version label
+	vLabel      *gui.Node // version label
+	dirtyLabel  *gui.Node // git state (dirty or not?)
 	goSumStatus *gui.Node // what is the state of the go.sum file
 
 	// masterName    *gui.Node // the master branch name
diff --git a/unix.go b/unix.go
deleted file mode 100644
index 2777c74..0000000
--- a/unix.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package main
-
-/*
-import (
-	"strings"
-
-	"go.wit.com/lib/gui/repostatus"
-	"go.wit.com/log"
-)
-
-// var repopath string = "/home/jcarr/"
-
-// if dryRun == true, then it just prints out the values
-// but doesn't do anything
-func goMake(dryRun string) bool {
-	var workingpath string = "~/go/src"
-	for _, line := range me.script {
-		if len(line) == 0 {
-			continue
-		}
-		if line[0] == "cd" {
-			switch len(line) {
-			case 1:
-				log.Verbose("do cmdPwd() TODO: change working path to ~ ?")
-				workingpath = "/home/jcarr/go/src/go.wit.com/"
-			case 2:
-				log.Verbose("do cmdPwd() here", line)
-				workingpath = line[1]
-			default:
-				log.Warn("bad cd", line)
-				return false
-			}
-			continue
-		}
-		cmd := line[0]
-		s := strings.Join(line[1:], " ")
-		log.Warn("NEED TO RUN path =", workingpath, "cmd =", cmd, s)
-		if dryRun == "--dry-run" {
-			continue
-		}
-		if dryRun == "--doit" {
-			log.Warn("Actually RUN path =", workingpath, "cmd =", cmd, s)
-			err, b, output := repostatus.RunCmd(workingpath, line)
-			if err != nil {
-				log.Info("output =", output)
-				log.Info("ABEND EXECUTION")
-				log.Info("error =", err)
-				log.Info("b =", b)
-				return false
-			}
-			// log.Warn("output was =", output)
-			continue
-		}
-		log.Warn("don't know what to do. dryRun ==", dryRun)
-		return false
-	}
-	return true
-}
-*/