From 6d62858d69e908bc916ff71a52f4e01a3869e890 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Tue, 29 Apr 2025 17:18:02 -0500 Subject: [PATCH] code re-arrange --- doGui.go | 4 +- windowHackMode.go | 114 --------------------------------- windowRepos.go | 160 ++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 157 insertions(+), 121 deletions(-) delete mode 100644 windowHackMode.go diff --git a/doGui.go b/doGui.go index 50287cc..49fe114 100644 --- a/doGui.go +++ b/doGui.go @@ -214,7 +214,8 @@ func drawWindow(win *gadgets.GenericWindow) { }) */ - var reposWin *gadgets.GenericWindow + // var reposWin *gadgets.GenericWindow + var reposWin *stdReposTableWin me.reposWinB = gridM.NewButton("Repos", func() { if reposWin != nil { reposWin.Toggle() @@ -308,6 +309,7 @@ func forgeSwitchMode(newMode forgepb.ForgeMode) { // this is the magic that generates a window directly from the protocol buffer func makeStandardReposGrid(pb *gitpb.Repos) *gitpb.ReposTable { t := pb.NewTable("testDirty") + t.NewUuid() sf := t.AddStringFunc("repo", func(r *gitpb.Repo) string { return r.GetGoPath() }) diff --git a/windowHackMode.go b/windowHackMode.go deleted file mode 100644 index 67c6bd4..0000000 --- a/windowHackMode.go +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2017-2025 WIT.COM Inc. All rights reserved. -// Use of this source code is governed by the GPL 3.0 - -package main - -// An app to submit patches for the 30 GO GUI repos - -import ( - "go.wit.com/lib/debugger" - "go.wit.com/lib/gadgets" - "go.wit.com/log" -) - -func makeHackModeWindow(win *gadgets.GenericWindow) { - group := win.Stack.NewGroup("This is a work in progress") - grid := group.RawGrid() - grid.NewButton("git pull", func() { - log.Info("todo: run git pull on each repo") - }) - - me.repoDevelMergeB = grid.NewButton("merge", func() { - found := findMergeToDevel() - _, box := makeStandardReposWindow("repos to merge from user to devel", found) - hbox := box.Box().Horizontal() - hbox.NewButton("merge all", func() { - win.Disable() - defer win.Enable() - all := found.SortByFullPath() - for all.Scan() { - repo := all.Next() - if repo.CheckDirty() { - log.Info("repo is dirty", repo.GetGoPath()) - continue - } - log.Info("Starting merge on", repo.GetGoPath()) - if repo.CheckoutDevel() { - log.Info("checkout devel failed", repo.GetGoPath()) - return - } - if _, err := repo.MergeToDevel(); err != nil { - log.Info("merge from user failed", repo.GetGoPath(), err) - // log.Info(strings.Join(r.Stdout, "\n")) - // log.Info(strings.Join(r.Stderr, "\n")) - return - } - if repo.CheckoutMaster() { - log.Info("checkout master failed", repo.GetGoPath()) - return - } - if _, err := repo.MergeToMaster(); err != nil { - log.Info("merge from devel failed", repo.GetGoPath(), err) - return - } - - } - }) - }) - grid.NextRow() - - group2 := win.Stack.NewGroup("Merge") - grid = group2.RawGrid() - - grid.NewButton("merge to devel", func() { - win.Disable() - defer win.Enable() - - mergeUserToDevel(true) - }) - - grid.NewButton("merge to master", func() { - win.Disable() - defer win.Enable() - - mergeDevelToMaster(true) - }) - - grid.NewButton("merge all", func() { - win.Disable() - defer win.Enable() - - me.argvCheckoutUser = false - me.argvCheckoutDevel = true - me.argvCheckoutMaster = false - if err := doCheckoutShared(); err != nil { - log.Info("checkout error:", err) - } else { - log.Info("checkout was ok") - } - - mergeUserToDevel(true) - - me.argvCheckoutUser = false - me.argvCheckoutDevel = false - me.argvCheckoutMaster = true - if err := doCheckoutShared(); err != nil { - log.Info("checkout error:", err) - } else { - log.Info("checkout was ok") - } - - mergeDevelToMaster(true) - }) - - group3 := win.Stack.NewGroup("work in progress") - grid = group3.RawGrid() - - grid.NewButton("forge ConfigSave()", func() { - me.forge.ConfigSave() - }) - - grid.NewButton("debugger()", func() { - debugger.DebugWindow() - }) -} diff --git a/windowRepos.go b/windowRepos.go index d4cd144..6782a21 100644 --- a/windowRepos.go +++ b/windowRepos.go @@ -8,15 +8,39 @@ package main import ( "fmt" "os" + "sync" "time" + "go.wit.com/gui" + "go.wit.com/lib/debugger" "go.wit.com/lib/gadgets" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) -func makeReposWin() *gadgets.GenericWindow { +type stdReposTableWin struct { + sync.Mutex + win *gadgets.GenericWindow // the machines gui window + boxTB *gui.Node // the machines gui parent box widget + TB *gitpb.ReposTable // the gui table buffer + pb *gitpb.Repos // the current repos protobuf + update bool // if the window should be updated +} + +func (w *stdReposTableWin) Toggle() { + if w == nil { + return + } + if w.win == nil { + return + } + w.win.Toggle() +} + +func makeReposWin() *stdReposTableWin { + rwin := new(stdReposTableWin) win := gadgets.NewGenericWindow("git repos", "All about git repos") + rwin.win = win grid := win.Group.RawGrid() me.repoDirtyB = grid.NewButton("dirty", func() { @@ -161,9 +185,9 @@ func makeReposWin() *gadgets.GenericWindow { log.Info("add a forge config window here") }) - win.Stack.NewGroup("misc (works in progress)") + win.Top.NewGroup("misc (works in progress)") - grid = win.Stack.RawGrid() + grid = win.Top.RawGrid() var found *gitpb.Repos var txt string @@ -248,8 +272,13 @@ func makeReposWin() *gadgets.GenericWindow { t.ShowTable() }) - grid.NewButton("unknown branches", func() { - log.Info("unknown branches not done yet") + rwin.boxTB = win.Bottom.Box() + + grid.NewButton("dirty on bottom", func() { + log.Info("try to show dirty repos on bottom") + found := findDirty() + rwin.doReposTable(found) + }) grid.NextRow() @@ -269,7 +298,126 @@ func makeReposWin() *gadgets.GenericWindow { grid.NextRow() makeHackModeWindow(win) - return win + return rwin +} + +// default window for active running droplets +func (rwin *stdReposTableWin) doReposTable(pb *gitpb.Repos) { + rwin.Lock() + defer rwin.Unlock() + if rwin.TB != nil { + rwin.TB.Delete() + rwin.TB = nil + } + + rwin.pb = pb + + t := makeStandardReposGrid(pb) + t.SetParent(rwin.boxTB) + t.ShowTable() + rwin.TB = t +} + +func makeHackModeWindow(win *gadgets.GenericWindow) { + group := win.Top.NewGroup("This is a work in progress") + grid := group.RawGrid() + grid.NewButton("git pull", func() { + log.Info("todo: run git pull on each repo") + }) + + me.repoDevelMergeB = grid.NewButton("merge", func() { + found := findMergeToDevel() + _, box := makeStandardReposWindow("repos to merge from user to devel", found) + hbox := box.Box().Horizontal() + hbox.NewButton("merge all", func() { + win.Disable() + defer win.Enable() + all := found.SortByFullPath() + for all.Scan() { + repo := all.Next() + if repo.CheckDirty() { + log.Info("repo is dirty", repo.GetGoPath()) + continue + } + log.Info("Starting merge on", repo.GetGoPath()) + if repo.CheckoutDevel() { + log.Info("checkout devel failed", repo.GetGoPath()) + return + } + if _, err := repo.MergeToDevel(); err != nil { + log.Info("merge from user failed", repo.GetGoPath(), err) + // log.Info(strings.Join(r.Stdout, "\n")) + // log.Info(strings.Join(r.Stderr, "\n")) + return + } + if repo.CheckoutMaster() { + log.Info("checkout master failed", repo.GetGoPath()) + return + } + if _, err := repo.MergeToMaster(); err != nil { + log.Info("merge from devel failed", repo.GetGoPath(), err) + return + } + + } + }) + }) + grid.NextRow() + + group2 := win.Top.NewGroup("Merge") + grid = group2.RawGrid() + + grid.NewButton("merge to devel", func() { + win.Disable() + defer win.Enable() + + mergeUserToDevel(true) + }) + + grid.NewButton("merge to master", func() { + win.Disable() + defer win.Enable() + + mergeDevelToMaster(true) + }) + + grid.NewButton("merge all", func() { + win.Disable() + defer win.Enable() + + me.argvCheckoutUser = false + me.argvCheckoutDevel = true + me.argvCheckoutMaster = false + if err := doCheckoutShared(); err != nil { + log.Info("checkout error:", err) + } else { + log.Info("checkout was ok") + } + + mergeUserToDevel(true) + + me.argvCheckoutUser = false + me.argvCheckoutDevel = false + me.argvCheckoutMaster = true + if err := doCheckoutShared(); err != nil { + log.Info("checkout error:", err) + } else { + log.Info("checkout was ok") + } + + mergeDevelToMaster(true) + }) + + group3 := win.Top.NewGroup("work in progress") + grid = group3.RawGrid() + + grid.NewButton("forge ConfigSave()", func() { + me.forge.ConfigSave() + }) + + grid.NewButton("debugger()", func() { + debugger.DebugWindow() + }) } func develBehindMasterProblem() *gitpb.Repos {