diff --git a/doGui.go b/doGui.go index 45e29c9..26b74b9 100644 --- a/doGui.go +++ b/doGui.go @@ -11,7 +11,6 @@ import ( "time" "go.wit.com/gui" - "go.wit.com/lib/debugger" "go.wit.com/lib/gadgets" "go.wit.com/lib/gui/shell" "go.wit.com/lib/protobuf/forgepb" @@ -217,114 +216,7 @@ func drawWindow(win *gadgets.GenericWindow) { hackWin.Toggle() return } - hackWin := gadgets.NewGenericWindow("Hack / User Mode Window", "Things that might be wrong") - grid := hackWin.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 - } - - } - }) - }) - var problemsWin *repoProblemsWindow - grid.NewButton("Repo Problems", func() { - if problemsWin != nil { - problemsWin.Toggle() - return - } - problemsWin = makeRepoProblemsWindow() - }) - grid.NextRow() - - // grid := hackWin.Group.RawGrid() - group2 := hackWin.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 := hackWin.Stack.NewGroup("work in progress") - grid = group3.RawGrid() - - grid.NewButton("forge ConfigSave()", func() { - me.forge.ConfigSave() - }) - - grid.NewButton("debugger()", func() { - debugger.DebugWindow() - }) + hackWin = makeHackModeWindow() }) var reposWin *gadgets.GenericWindow @@ -352,80 +244,6 @@ func drawWindow(win *gadgets.GenericWindow) { forgeSwitchMode(me.forge.Config.Mode) } -func makeReposWin() *gadgets.GenericWindow { - win := gadgets.NewGenericWindow("git repos", "All about git repos") - grid := win.Group.RawGrid() - - me.repoDirtyB = grid.NewButton("dirty", func() { - doCheckDirtyAndConfigSave() - found := findDirty() - tb, box := makeStandardReposWindow("dirty repos", found) - hbox := box.Box().Horizontal() - hbox.NewButton("commit all", func() { - all := found.SortByFullPath() - for all.Scan() { - repo := all.Next() - log.Info("do commit here on", repo.GetGoPath()) - } - log.Info("TODO: fix this") - log.Info("run 'forge commit --all'") - }) - hbox.NewButton("update table", func() { - me.forge.PrintHumanTable(found) - found2 := findDirty() - me.forge.PrintHumanTable(found2) - tb.Update() - tb.UpdateTable(found2) - }) - hbox.NewButton("delete table", func() { - tb.Delete() - }) - }) - - var writeWin *gadgets.GenericWindow - me.repoWritableB = grid.NewButton("writable", func() { - // if the window exists, just toggle it open or closed - if writeWin != nil { - writeWin.Toggle() - return - } - - // make the window for the first time - found := new(gitpb.Repos) - all := me.forge.Repos.SortByFullPath() - for all.Scan() { - repo := all.Next() - if me.forge.Config.IsReadOnly(repo.GetGoPath()) { - continue - } - - found.AppendByGoPath(repo) - - } - writeWin, _ = makeWritableWindow(found) - writeWin.Win.Custom = func() { - log.Info("closing window. could do somethine here") - } - }) - - me.repoAllB = grid.NewButton("All", func() { - me.found = new(gitpb.Repos) - all := me.forge.Repos.SortByFullPath() - for all.Scan() { - repo := all.Next() - me.found.AppendByGoPath(repo) - - } - makeStandardReposWindow("All repos", me.found) - }) - - grid.NewButton("Configure", func() { - log.Info("add a forge config window here") - }) - - return win -} - // verify the GUI button disable/enable settings func forgeVerifyGuiState() { me.forgeMode.SetText(me.forge.GetMode()) diff --git a/windowForgePatchsets.go b/windowForgePatchsets.go index 42fdbd0..d1805a1 100644 --- a/windowForgePatchsets.go +++ b/windowForgePatchsets.go @@ -12,7 +12,6 @@ import ( "go.wit.com/lib/gadgets" "go.wit.com/lib/protobuf/forgepb" - "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" "go.wit.com/gui" @@ -79,9 +78,6 @@ func (r *patchesWindow) submitPatchesBox() { // make the header table for repo stats r.totalOL = gadgets.NewOneLiner(grid, "Total") - grid.NewButton("reset user branches", func() { - resetUserBranchesWindow() - }) grid.NextRow() r.dirtyOL = gadgets.NewOneLiner(grid, "dirty") @@ -232,60 +228,3 @@ func (r *patchesWindow) Update() { r.readonlyOL.SetText(strconv.Itoa(readonly) + " repos") r.rw.SetText(fmt.Sprintf("%d repos", rw)) } - -func resetUserBranchesWindow() { - found := gitpb.NewRepos() - all := me.forge.Repos.SortByFullPath() - for all.Scan() { - repo := all.Next() - uname := repo.GetUserBranchName() - dname := repo.GetDevelBranchName() - if repo.GetCurrentBranchName() == uname { - log.Info("Repo is on the user branch. Can't delete it.", repo.GetGoPath()) - continue - } - b1 := repo.CountDiffObjects(uname, dname) - b2 := repo.CountDiffObjects(dname, uname) - log.Info("user vs devel count", b1, b2) - if b1 == 0 && b2 == 0 { - cmd := []string{"git", "branch", "-D", uname} - log.Info(repo.GetGoPath(), cmd) - repo.RunVerbose(cmd) - repo.Reload() - continue - } - found.Append(repo) - - } - - win := gadgets.RawBasicWindow("reset 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) - - group := box.NewGroup("test buttons") - hbox := group.Box().Horizontal() - hbox.NewButton("force delete user branch", func() { - win.Disable() - defer win.Enable() - all := found.SortByFullPath() - for all.Scan() { - repo := all.Next() - brname := repo.GetUserBranchName() - cmd := []string{"git", "branch", "-D", 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() -} diff --git a/windowHackMode.go b/windowHackMode.go new file mode 100644 index 0000000..ba954f5 --- /dev/null +++ b/windowHackMode.go @@ -0,0 +1,123 @@ +// 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() *gadgets.GenericWindow { + win := gadgets.NewGenericWindow("git user branch / Hack Mode Window", "This is a work in progress") + grid := win.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 + } + + } + }) + }) + var problemsWin *repoProblemsWindow + grid.NewButton("Repo Problems", func() { + if problemsWin != nil { + problemsWin.Toggle() + return + } + problemsWin = makeRepoProblemsWindow() + }) + 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() + }) + return win +} diff --git a/windowModeMaster.go b/windowModeMaster.go index e01752b..e09d991 100644 --- a/windowModeMaster.go +++ b/windowModeMaster.go @@ -5,6 +5,7 @@ package main import ( "go.wit.com/lib/gadgets" + "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) @@ -82,5 +83,66 @@ func makeModeMasterWin() *gadgets.GenericWindow { f() }) + + grid.NewButton("reset user branches (?)", func() { + resetUserBranchesWindow() + }) return win } + +func resetUserBranchesWindow() { + found := gitpb.NewRepos() + all := me.forge.Repos.SortByFullPath() + for all.Scan() { + repo := all.Next() + uname := repo.GetUserBranchName() + dname := repo.GetDevelBranchName() + if repo.GetCurrentBranchName() == uname { + log.Info("Repo is on the user branch. Can't delete it.", repo.GetGoPath()) + continue + } + b1 := repo.CountDiffObjects(uname, dname) + b2 := repo.CountDiffObjects(dname, uname) + log.Info("user vs devel count", b1, b2) + if b1 == 0 && b2 == 0 { + cmd := []string{"git", "branch", "-D", uname} + log.Info(repo.GetGoPath(), cmd) + repo.RunVerbose(cmd) + repo.Reload() + continue + } + found.Append(repo) + + } + + win := gadgets.RawBasicWindow("reset 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) + + group := box.NewGroup("test buttons") + hbox := group.Box().Horizontal() + hbox.NewButton("force delete user branch", func() { + win.Disable() + defer win.Enable() + all := found.SortByFullPath() + for all.Scan() { + repo := all.Next() + brname := repo.GetUserBranchName() + cmd := []string{"git", "branch", "-D", 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() +} diff --git a/windowRepos.go b/windowRepos.go new file mode 100644 index 0000000..95787de --- /dev/null +++ b/windowRepos.go @@ -0,0 +1,86 @@ +// 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/gadgets" + "go.wit.com/lib/protobuf/gitpb" + "go.wit.com/log" +) + +func makeReposWin() *gadgets.GenericWindow { + win := gadgets.NewGenericWindow("git repos", "All about git repos") + grid := win.Group.RawGrid() + + me.repoDirtyB = grid.NewButton("dirty", func() { + doCheckDirtyAndConfigSave() + found := findDirty() + tb, box := makeStandardReposWindow("dirty repos", found) + hbox := box.Box().Horizontal() + hbox.NewButton("commit all", func() { + all := found.SortByFullPath() + for all.Scan() { + repo := all.Next() + log.Info("do commit here on", repo.GetGoPath()) + } + log.Info("TODO: fix this") + log.Info("run 'forge commit --all'") + }) + hbox.NewButton("update table", func() { + me.forge.PrintHumanTable(found) + found2 := findDirty() + me.forge.PrintHumanTable(found2) + tb.Update() + tb.UpdateTable(found2) + }) + hbox.NewButton("delete table", func() { + tb.Delete() + }) + }) + + var writeWin *gadgets.GenericWindow + me.repoWritableB = grid.NewButton("writable", func() { + // if the window exists, just toggle it open or closed + if writeWin != nil { + writeWin.Toggle() + return + } + + // make the window for the first time + found := new(gitpb.Repos) + all := me.forge.Repos.SortByFullPath() + for all.Scan() { + repo := all.Next() + if me.forge.Config.IsReadOnly(repo.GetGoPath()) { + continue + } + + found.AppendByGoPath(repo) + + } + writeWin, _ = makeWritableWindow(found) + writeWin.Win.Custom = func() { + log.Info("closing window. could do somethine here") + } + }) + + me.repoAllB = grid.NewButton("All", func() { + me.found = new(gitpb.Repos) + all := me.forge.Repos.SortByFullPath() + for all.Scan() { + repo := all.Next() + me.found.AppendByGoPath(repo) + + } + makeStandardReposWindow("All repos", me.found) + }) + + grid.NewButton("Configure", func() { + log.Info("add a forge config window here") + }) + + return win +}