From eca95a62fc9cc5ebb079fc7c4d0d5028f72c2cae Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Tue, 4 Mar 2025 04:06:16 -0600 Subject: [PATCH] large single mutex might have fixed gocui crashes for now --- doCheckout.go | 7 ++++ doGui.go | 10 ++++-- windowModeMaster.go | 86 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 windowModeMaster.go diff --git a/doCheckout.go b/doCheckout.go index fdd5edb..220ea22 100644 --- a/doCheckout.go +++ b/doCheckout.go @@ -9,6 +9,7 @@ import ( "time" "go.wit.com/lib/gui/shell" + "go.wit.com/lib/protobuf/forgepb" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) @@ -292,14 +293,20 @@ func doCheckoutShared() error { func doCheckout() error { if argv.Checkout.User != nil { me.argvCheckoutUser = true + me.forge.Config.Mode = forgepb.ForgeMode_USER + me.forge.Config.ConfigSave() } if argv.Checkout.Devel != nil { me.argvCheckoutDevel = true + me.forge.Config.Mode = forgepb.ForgeMode_DEVEL + me.forge.Config.ConfigSave() } if argv.Checkout.Master != nil { me.argvCheckoutMaster = true + me.forge.Config.Mode = forgepb.ForgeMode_MASTER + me.forge.Config.ConfigSave() } if err := doCheckoutShared(); err != nil { badExit(err) diff --git a/doGui.go b/doGui.go index 076d87d..46eed56 100644 --- a/doGui.go +++ b/doGui.go @@ -184,9 +184,16 @@ func drawWindow(win *gadgets.GenericWindow) { groupM := win.Stack.NewGroup("Mode Windows") gridM := groupM.RawGrid() + + var releaseWin *gadgets.GenericWindow me.modeReleaseW = gridM.NewButton("Release Window", func() { log.Info("todo: move releaser here") log.Info("for now, run guireleaser") + if releaseWin != nil { + releaseWin.Toggle() + return + } + releaseWin = makeModeMasterWin() }) me.modeReleaseW.Disable() @@ -463,8 +470,7 @@ func forgeSwitchMode(newMode forgepb.ForgeMode) { me.forge.Config.Mode = newMode forgeVerifyGuiState() // update the button states - me.forge.SetConfigSave(true) - me.forge.ConfigSave() // todo, only save the forge config + me.forge.Config.ConfigSave() } func doDisableUserW() { diff --git a/windowModeMaster.go b/windowModeMaster.go new file mode 100644 index 0000000..e01752b --- /dev/null +++ b/windowModeMaster.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 + +import ( + "go.wit.com/lib/gadgets" + "go.wit.com/log" +) + +// An app to submit patches for the 30 GO GUI repos + +func makeModeMasterWin() *gadgets.GenericWindow { + win := gadgets.NewGenericWindow("Release", "tools") + grid := win.Group.RawGrid() + + checkout := grid.NewButton("git checkout master", func() { + win.Disable() + defer win.Enable() + }) + gitpull := grid.NewButton("git pull", func() { + win.Disable() + defer win.Enable() + }) + grid.NextRow() + + cleanUser := grid.NewButton("Clean user branches", func() { + win.Disable() + defer win.Enable() + if err := doCleanUser(); err != nil { + log.Info("Clean user branches failed", err) + } + }) + + cleanDevel := grid.NewButton("Clean devel branches", func() { + win.Disable() + defer win.Enable() + if err := doCleanDevel(); err != nil { + log.Info("Clean devel branches failed", err) + } + }) + grid.NextRow() + + f := func() { + total, count, nope, err := IsEverythingOnMaster() + if nope == 0 { + checkout.Disable() + gitpull.Enable() + } else { + log.Printf("Master branch check. %d total repos. (%d ok) (%d not on master branch) err=%v\n", total, count, nope, err) + checkout.Enable() + } + + var localuser bool // are there still local user branches + var localdevel bool // are there still local devel branches + + all := me.forge.Repos.SortByFullPath() + for all.Scan() { + repo := all.Next() + if repo.IsLocalBranch(repo.GetUserBranchName()) { + localuser = true + } + if repo.IsLocalBranch(repo.GetDevelBranchName()) { + localdevel = true + } + } + if localuser { + cleanUser.Enable() + } else { + cleanUser.Disable() + } + if localdevel { + cleanDevel.Enable() + } else { + cleanDevel.Disable() + } + } + + grid.NewButton("check repo state", func() { + win.Disable() + defer win.Enable() + + f() + }) + return win +}