From bdb761714361a3986834b8b50bb34cce45d01e4d Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Fri, 16 Feb 2024 11:39:44 -0600 Subject: [PATCH] cleaning up repostatus code --- addRepo.go | 146 +++++++++++++++++++++++++++++++++++++++ globalBuildOptions.go | 24 +++++-- main.go | 2 +- repolist.go | 156 ++++-------------------------------------- structs.go | 3 +- 5 files changed, 178 insertions(+), 153 deletions(-) create mode 100644 addRepo.go diff --git a/addRepo.go b/addRepo.go new file mode 100644 index 0000000..a44dffa --- /dev/null +++ b/addRepo.go @@ -0,0 +1,146 @@ +package main + +import ( + "strings" + + "go.wit.com/gui" + "go.wit.com/lib/gui/repostatus" + "go.wit.com/log" +) + +func (r *repo) Hide() { + r.pLabel.Hide() + r.lastTag.Hide() + r.vLabel.Hide() + + r.masterVersion.Hide() + r.develVersion.Hide() + r.userVersion.Hide() + + r.dirtyLabel.Hide() + r.endBox.Hide() + // r.statusButton.Hide() + // r.diffButton.Hide() + r.hidden = true +} + +func (r *repo) Hidden() bool { + return r.hidden +} + +func (r *repo) Show() { + r.pLabel.Show() + r.lastTag.Show() + r.vLabel.Show() + + r.masterVersion.Show() + r.develVersion.Show() + r.userVersion.Show() + + r.dirtyLabel.Show() + r.endBox.Show() + // r.statusButton.Show() + // r.diffButton.Show() + r.hidden = false +} + +func addRepo(grid *gui.Node, path string, master string, devel string, user string) *repo { + _, ok := me.allrepos[path] + if ok { + log.Info("addRepo() already had path", path) + return nil + } + // log.Info("addRepo() attempting to add path", path) + rstatus := repostatus.NewRepoStatusWindow(path) + + if rstatus == nil { + // log.Info("path isn't a repo I can figure out yet", path) + // probably this isn't downloaded + return nil + } + + newRepo := new(repo) + newRepo.status = rstatus + + path = strings.TrimSuffix(path, "/") // trim any extranous '/' chars put in the config file by the user + if path == "" { + // just an empty line in the config file + return nil + } + + newRepo.pLabel = grid.NewLabel(path).SetProgName("path") + newRepo.lastTag = grid.NewLabel("").SetProgName("lastTag") + newRepo.masterVersion = grid.NewLabel("").SetProgName("masterVersion") + newRepo.develVersion = grid.NewLabel("").SetProgName("develVersion") + newRepo.userVersion = grid.NewLabel("").SetProgName("userVersion") + newRepo.dirtyLabel = grid.NewLabel("") + newRepo.vLabel = grid.NewLabel("").SetProgName("current") + newRepo.endBox = grid.NewHorizontalBox("HBOX") + newRepo.endBox.NewButton("Configure", func() { + if newRepo.status == nil { + log.Warn("status window wasn't created") + return + } + newRepo.status.Toggle() + }) + + newRepo.endBox.NewButton("show diff", func() { + me.reposwin.Disable() + // newRepo.status.XtermNohup([]string{"git diff"}) + newRepo.status.Xterm("git diff; bash") + me.reposwin.Enable() + }) + + newRepo.endBox.NewButton("commit all", func() { + me.reposwin.Disable() + // restore anything staged so everything can be reviewed + newRepo.status.RunCmd([]string{"git", "restore", "--staged", "."}) + newRepo.status.XtermWait("git diff") + newRepo.status.XtermWait("git add --all") + newRepo.status.XtermWait("git commit -a") + newRepo.status.XtermWait("git push") + if newRepo.status.CheckDirty() { + // commit was not done, restore diff + newRepo.status.RunCmd([]string{"git", "restore", "--staged", "."}) + } else { + newRepo.status.UpdateNew() + newRepo.newScan() + } + me.reposwin.Enable() + }) + + newRepo.hidden = false + // newRepo.status.SetMainWorkingName(master) + // newRepo.status.SetDevelWorkingName(devel) + // newRepo.status.SetUserWorkingName(user) + + var showBuildB bool = false + switch newRepo.status.RepoType() { + case "binary": + // log.Info("compile here. Show()") + showBuildB = true + case "library": + // log.Info("library here. Hide()") + default: + // log.Info("unknown RepoType", newRepo.status.RepoType()) + } + if showBuildB { + newRepo.endBox.NewButton("build", func() { + newRepo.status.Build() + }) + } + + me.allrepos[path] = newRepo + return newRepo +} + +// deprecate this +func (r *repo) String() string { + return r.status.String() +} + +/* +func (r *repo) getPath() string { + return r.path +} +*/ diff --git a/globalBuildOptions.go b/globalBuildOptions.go index 7602bc8..cc71e41 100644 --- a/globalBuildOptions.go +++ b/globalBuildOptions.go @@ -94,21 +94,31 @@ func globalBuildOptions(vbox *gui.Node) { // you can merge everything into the devel branch and make sure it actually // works. Then, when that is good, merge and version everything in master setBranchB = grid.NewButton("set current branch to:", func() { - log.Warn("set current branch to:", newBranch.String()) + targetName := newBranch.String() + log.Warn("set current branch to:", targetName) /* me.toMoveToBranch = guiBranch.String() setCurrentBranch.SetLabel("set all branches to " + me.toMoveToBranch) me.mainBranch.Disable() */ for _, repo := range me.allrepos { - if repo.status.CheckoutMaster() { - log.Warn("set master branch worked", repo.String) - repo.newScan() + if targetName == "jcarr" { + if repo.status.CheckoutUser() { + log.Warn("set master branch worked", repo.String()) + repo.newScan() + } else { + log.Warn("set master branch failed", repo.String()) + repo.newScan() + } } else { - log.Warn("set master branch failed", repo.String) - repo.newScan() + if repo.status.CheckoutMaster() { + log.Warn("set master branch worked", repo.String()) + repo.newScan() + } else { + log.Warn("set master branch failed", repo.String()) + repo.newScan() + } } - // return } }) newBranch = grid.NewCombobox() diff --git a/main.go b/main.go index 7386456..a7d7d8b 100644 --- a/main.go +++ b/main.go @@ -45,7 +45,7 @@ func main() { handleCmdLine() for _, repo := range me.allrepos { - repo.status.Update() + repo.status.UpdateNew() repo.newScan() } me.Enable() diff --git a/repolist.go b/repolist.go index 54ae60e..6d0b3a3 100644 --- a/repolist.go +++ b/repolist.go @@ -13,7 +13,8 @@ import ( "go.wit.com/log" ) -func (r *repo) String() string { +// deprecate +func (r *repo) StringOld() string { return r.status.String() } @@ -44,7 +45,7 @@ func splitLine(line string) (string, string, string, string) { func myrepolist() []string { homeDir, _ := os.UserHomeDir() - cfgfile := filepath.Join(homeDir, ".config/myrepolist") + cfgfile := filepath.Join(homeDir, ".config/autotypist") content, _ := ioutil.ReadFile(cfgfile) out := string(content) out = strings.TrimSpace(out) @@ -52,141 +53,6 @@ func myrepolist() []string { return lines } -func (r *repo) Hide() { - r.pLabel.Hide() - r.lastTag.Hide() - r.vLabel.Hide() - - r.masterVersion.Hide() - r.develVersion.Hide() - r.userVersion.Hide() - - r.dirtyLabel.Hide() - r.endBox.Hide() - // r.statusButton.Hide() - // r.diffButton.Hide() - r.hidden = true -} - -func (r *repo) Hidden() bool { - return r.hidden -} - -func (r *repo) Show() { - r.pLabel.Show() - r.lastTag.Show() - r.vLabel.Show() - - r.masterVersion.Show() - r.develVersion.Show() - r.userVersion.Show() - - r.dirtyLabel.Show() - r.endBox.Show() - // r.statusButton.Show() - // r.diffButton.Show() - r.hidden = false -} - -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 - } - // log.Info("addRepo() attempting to add path", path) - - newRepo := new(repo) - - path = strings.TrimSuffix(path, "/") // trim any extranous '/' chars put in the config file by the user - if path == "" { - // just an empty line in the config file - return - } - - if strings.HasPrefix(path, "/") { - // this is a direct path. don't check if it is a golang repo - } else { - if repostatus.VerifyLocalGoRepo(path) { - // log.Verbose("newRepo actually exists", ) - } else { - // log.Warn("repostatus.VerifyLocalGoRepo() failed for for", path, master, devel, user) - return - } - } - - newRepo.pLabel = grid.NewLabel(path).SetProgName("path") - - newRepo.lastTag = grid.NewLabel("").SetProgName("lastTag") - - newRepo.masterVersion = grid.NewLabel("").SetProgName("masterVersion") - newRepo.develVersion = grid.NewLabel("").SetProgName("develVersion") - newRepo.userVersion = grid.NewLabel("").SetProgName("userVersion") - - newRepo.dirtyLabel = grid.NewLabel("") - - newRepo.vLabel = grid.NewLabel("").SetProgName("current") - - newRepo.endBox = grid.NewHorizontalBox("HBOX") - - newRepo.endBox.NewButton("Configure", func() { - if newRepo.status == nil { - log.Warn("status window wasn't created") - return - } - newRepo.status.Toggle() - }) - - newRepo.endBox.NewButton("show diff", func() { - me.reposwin.Disable() - // newRepo.status.XtermNohup([]string{"git diff"}) - newRepo.status.Xterm("git diff; bash") - me.reposwin.Enable() - }) - - newRepo.endBox.NewButton("commit all", func() { - me.reposwin.Disable() - // restore anything staged so everything can be reviewed - newRepo.status.RunCmd([]string{"git", "restore", "--staged", "."}) - newRepo.status.XtermWait("git diff") - newRepo.status.XtermWait("git add --all") - newRepo.status.XtermWait("git commit -a") - newRepo.status.XtermWait("git push") - if newRepo.status.CheckDirty() { - // commit was not done, restore diff - newRepo.status.RunCmd([]string{"git", "restore", "--staged", "."}) - } else { - newRepo.status.Update() - newRepo.newScan() - } - me.reposwin.Enable() - }) - - newRepo.status = repostatus.NewRepoStatusWindow(path) - newRepo.hidden = false - newRepo.status.SetMainWorkingName(master) - newRepo.status.SetDevelWorkingName(devel) - newRepo.status.SetUserWorkingName(user) - - var showBuildB bool = false - switch newRepo.status.RepoType() { - case "binary": - // log.Info("compile here. Show()") - showBuildB = true - case "library": - // log.Info("library here. Hide()") - default: - log.Info("unknown RepoType", newRepo.status.RepoType()) - } - if showBuildB { - newRepo.endBox.NewButton("build", func() { - newRepo.status.Build() - }) - } - - me.allrepos[path] = newRepo -} - // This creates a window func repolistWindow() { me.reposwin = gadgets.NewBasicWindow(me.myGui, "All git repositories in ~/go/src/") @@ -232,7 +98,11 @@ func repolistWindow() { if ubranch == "" { ubranch = usr.Username } - addRepo(me.reposgrid, path, mbranch, dbranch, ubranch) + newrepo := addRepo(me.reposgrid, path, mbranch, dbranch, ubranch) + if newrepo != nil { + // assume repos from ~/.config/autotypist file might be modified + newrepo.status.Writable() + } me.reposgrid.NextRow() } @@ -279,7 +149,7 @@ func repoAllButtons(box *gui.Node) { box1 := hbox.Box().Vertical() box1.NewButton("status.Update() all", func() { for _, repo := range me.allrepos { - repo.status.Update() + repo.status.UpdateNew() repo.newScan() } }) @@ -352,14 +222,14 @@ func mergeAllDevelToMain() bool { continue } log.Info("found", repo.String(), repo.dirtyLabel.String()) - // repo.status.Update() + repo.status.UpdateNew() if repo.status.RunDevelMergeB() { log.Warn("THINGS SEEM OK fullAutomation() returned true.") } else { log.Warn("THINGS FAILED fullAutomation() returned false") return false } - repo.status.Update() + repo.status.UpdateNew() repo.newScan() } log.Warn("EVERYTHING WORKED") @@ -382,14 +252,14 @@ func mergeAllUserToDevel() bool { continue } log.Info("found", repo.String(), repo.dirtyLabel.String()) - // repo.status.Update() + repo.status.UpdateNew() if repo.status.RunDevelMergeB() { log.Warn("THINGS SEEM OK fullAutomation() returned true.") } else { log.Warn("THINGS FAILED fullAutomation() returned false") return false } - repo.status.Update() + repo.status.UpdateNew() repo.newScan() } log.Warn("EVERYTHING WORKED") diff --git a/structs.go b/structs.go index 495d81c..d831a16 100644 --- a/structs.go +++ b/structs.go @@ -85,8 +85,7 @@ type autoType struct { } type repo struct { - hidden bool - // path string + hidden bool lasttagrev string lasttag string giturl string