summaryrefslogtreecommitdiff
path: root/windowRepos.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-03-04 14:32:17 -0600
committerJeff Carr <[email protected]>2025-03-04 14:32:17 -0600
commit2098040d62368e748bb8996ea37c580f5edc33bb (patch)
tree905f10813b13d1d3e6543ea93d759571cb4b1aff /windowRepos.go
parentaa04e8c122326b77431b6c5cfdd3b4ead2c67a33 (diff)
gui code cleanups
Diffstat (limited to 'windowRepos.go')
-rw-r--r--windowRepos.go193
1 files changed, 193 insertions, 0 deletions
diff --git a/windowRepos.go b/windowRepos.go
index 95787de..db853b7 100644
--- a/windowRepos.go
+++ b/windowRepos.go
@@ -6,6 +6,9 @@ package main
// An app to submit patches for the 30 GO GUI repos
import (
+ "fmt"
+ "os"
+
"go.wit.com/lib/gadgets"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
@@ -82,5 +85,195 @@ func makeReposWin() *gadgets.GenericWindow {
log.Info("add a forge config window here")
})
+ win.Stack.NewGroup("misc (works in progress)")
+
+ grid = win.Stack.RawGrid()
+ var found *gitpb.Repos
+ var txt string
+
+ found = develBehindMasterProblem()
+ txt = fmt.Sprintf("devel is behind master (%d)", found.Len())
+ grid.NewButton(txt, func() {
+ win := gadgets.RawBasicWindow("devel branches that are out of sync with master")
+ win.Make()
+ win.Show()
+ win.Custom = func() {
+ // sets the hidden flag to false so Toggle() works
+ win.Hide()
+ }
+ box := win.Box().NewBox("bw vbox", false)
+
+ found := develBehindMasterProblem()
+ group := box.NewGroup("test buttons")
+ hbox := group.Box().Horizontal()
+ hbox.NewButton("git merge master devel", func() {
+ all := found.SortByFullPath()
+ for all.Scan() {
+ repo := all.Next()
+ mname := repo.GetMasterBranchName()
+ dname := repo.GetDevelBranchName()
+ if dname != repo.GetCurrentBranchName() {
+ log.Info("Repo is not on the devel branch", repo.GetGoPath())
+ }
+ cmd := []string{"git", "merge", mname}
+ log.Info(repo.GetGoPath(), cmd)
+ repo.RunVerbose(cmd)
+ }
+ })
+ hbox.NewButton("test", func() {
+ })
+
+ t := makeStandardReposGrid(found)
+ t.SetParent(box)
+ t.ShowTable()
+ })
+
+ found = remoteUserBranchProblem()
+ txt = fmt.Sprintf("user branch is remote (%d)", found.Len())
+ grid.NewButton(txt, func() {
+ win := gadgets.RawBasicWindow("repos that seem to have remote user branches")
+ win.Make()
+ win.Show()
+ win.Custom = func() {
+ // sets the hidden flag to false so Toggle() works
+ win.Hide()
+ }
+ box := win.Box().NewBox("bw vbox", false)
+
+ found := remoteUserBranchProblem()
+ group := box.NewGroup("test buttons")
+ hbox := group.Box().Horizontal()
+ hbox.NewButton("git branch delete", func() {
+ win.Disable()
+ defer win.Enable()
+ all := found.SortByFullPath()
+ for all.Scan() {
+ repo := all.Next()
+ brname := repo.GetUserBranchName()
+ // git push origin --delete jcarr
+ os.Setenv("GIT_TERMINAL_PROMPT", "0")
+ cmd := []string{"git", "push", "origin", "--delete", brname}
+ log.Info("You may want to run:", repo.GetGoPath(), cmd)
+ repo.RunVerbose(cmd)
+ os.Unsetenv("GIT_TERMINAL_PROMPT")
+
+ // git branch --delete --remote origin/jcarr
+ cmd = []string{"git", "branch", "--delete", "--remote", "origin/" + brname}
+ log.Info(repo.GetGoPath(), cmd)
+ repo.RunVerbose(cmd)
+ repo.Reload()
+ }
+ me.forge.SetConfigSave(true)
+ me.forge.ConfigSave()
+ })
+
+ t := makeStandardReposGrid(found)
+ t.SetParent(box)
+ t.ShowTable()
+ })
+
+ grid.NewButton("unknown branches", func() {
+ log.Info("not done yet")
+ })
+ grid.NextRow()
+
+ found = develRemoteProblem()
+ txt = fmt.Sprintf("remote devel != local devel (%d)", found.Len())
+ grid.NewButton(txt, func() {
+ found := develRemoteProblem()
+ makeStandardReposWindow(txt, found)
+ })
+
+ found = masterRemoteProblem()
+ txt = fmt.Sprintf("remote master != local master (%d)", found.Len())
+ grid.NewButton(txt, func() {
+ found := masterRemoteProblem()
+ makeStandardReposWindow(txt, found)
+ })
+ grid.NextRow()
+
return win
}
+
+func develBehindMasterProblem() *gitpb.Repos {
+ log.Info("not done yet")
+ found := new(gitpb.Repos)
+ all := me.forge.Repos.SortByFullPath()
+ for all.Scan() {
+ repo := all.Next()
+ if repo.GetDevelVersion() == repo.GetMasterVersion() {
+ continue
+ }
+ found.AppendByGoPath(repo)
+
+ }
+ return found
+}
+
+func remoteUserBranchProblem() *gitpb.Repos {
+ found := new(gitpb.Repos)
+ all := me.forge.Repos.SortByFullPath()
+ for all.Scan() {
+ repo := all.Next()
+ username := repo.GetUserBranchName()
+ if repo.IsBranchRemote(username) {
+ found.AppendByGoPath(repo)
+ }
+
+ }
+ return found
+}
+
+func develRemoteProblem() *gitpb.Repos {
+ found := new(gitpb.Repos)
+ all := me.forge.Repos.SortByFullPath()
+ for all.Scan() {
+ repo := all.Next()
+ brname := repo.GetDevelBranchName()
+ if !repo.IsBranchRemote(brname) {
+ // log.Info("repo does not have remote devel branch", repo.GetGoPath())
+ continue
+ }
+ lhash := repo.GetLocalHash(brname)
+ rhash := repo.GetRemoteHash(brname)
+ // log.Info(lhash, rhash, repo.GetGoPath())
+ if lhash == "" || rhash == "" {
+ // something is wrong if either of these are blank
+ found.AppendByGoPath(repo)
+ continue
+ }
+ if lhash == rhash {
+ continue
+ }
+ found.AppendByGoPath(repo)
+
+ }
+ return found
+}
+
+func masterRemoteProblem() *gitpb.Repos {
+ found := new(gitpb.Repos)
+ all := me.forge.Repos.SortByFullPath()
+ for all.Scan() {
+ repo := all.Next()
+ brname := repo.GetMasterBranchName()
+ if !repo.IsBranchRemote(brname) {
+ // log.Info("repo does not have remote devel branch", repo.GetGoPath())
+ continue
+ }
+ lhash := repo.GetLocalHash(brname)
+ rhash := repo.GetRemoteHash(brname)
+ // log.Info(lhash, rhash, repo.GetGoPath())
+ if lhash == "" || rhash == "" {
+ // something is wrong if either of these are blank
+ found.AppendByGoPath(repo)
+ continue
+ }
+ if lhash == rhash {
+ continue
+ }
+ found.AppendByGoPath(repo)
+
+ }
+ return found
+}