// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "time" "go.wit.com/lib/gadgets" "go.wit.com/lib/gui/repolist" "go.wit.com/lib/gui/shell" "go.wit.com/log" "go.wit.com/gui" ) type repoWindow struct { win *gadgets.BasicWindow // the window widget itself box *gui.Node // notsure topbox *gui.Node // the top box of the repolist window mergeDevel *gui.Node // the buttton for merging user into devel mergeMaster *gui.Node // the buttton for merging devel into master View *repolist.RepoList // old code } func (r *repoWindow) Hidden() bool { return r.win.Hidden() } func (r *repoWindow) Show() { r.win.Show() now := time.Now() // check for devel branches total, count, nope, _ := IsEverythingOnDevel() log.Printf("Devel branch check. %d total repos. (%d ok) (%d not on devel branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now))) if nope != 0 { r.mergeDevel.Disable() } else { // everything is on the devel branch r.mergeDevel.Enable() } // check for master branches total, count, nope, _ = IsEverythingOnMaster() log.Printf("Master branch check. %d total repos. (%d ok) (%d not on master branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now))) if nope != 0 { r.mergeMaster.Disable() } else { // everything is on the master branch r.mergeMaster.Enable() } // updates the rows not hidden loop := r.View.ReposSortByName() for loop.Scan() { // var repo *repolist.RepoRow view := loop.Repo() if view.Hidden() { continue } view.Update() } } func (r *repoWindow) Hide() { r.win.Hide() } func (r *repoWindow) Disable() { r.box.Disable() } func (r *repoWindow) Enable() { r.box.Enable() } // you can only have one of these func makeRepoView() *repoWindow { r := new(repoWindow) r.win = gadgets.RawBasicWindow("All git repositories in ~/go/src/") r.win.Make() r.box = r.win.Box().NewBox("bw vbox", false) // me.reposwin.Draw() r.win.Custom = func() { log.Warn("Repo Window close. hidden=true") // sets the hidden flag to false so Toggle() works r.win.Hide() } r.topbox = r.repoMenu() r.View = repolist.InitBox(me.forge, r.box) r.View.Enable() // need to update this logic r.View.ScanRepositoriesOld() return r } func (r *repoWindow) repoMenu() *gui.Node { // reposbox.SetExpand(false) group1 := r.box.NewGroup("Filter:") hbox := group1.Box() // hbox.Horizontal() hbox.Vertical() box2 := hbox.Box().Horizontal() all := box2.NewCheckbox("all") all.Custom = func() { log.Info("filter all =", all.Checked()) if all.Checked() { loop := r.View.ReposSortByName() for loop.Scan() { // var repo *repolist.RepoRow view := loop.Repo() view.Show() } } else { loop := r.View.ReposSortByName() for loop.Scan() { // var repo *repolist.RepoRow view := loop.Repo() view.Hide() } } } dirty := box2.NewCheckbox("dirty") dirty.Custom = func() { log.Info("filter dirty =", dirty.Checked()) loop := r.View.ReposSortByName() for loop.Scan() { // var repo *repolist.RepoRow view := loop.Repo() if view.Hidden() { view.Show() } } } r.mergeDevel = box2.NewButton("merge to devel", func() { r.Disable() defer r.Enable() loop := r.View.ReposSortByName() for loop.Scan() { // var repo *repolist.RepoRow view := loop.Repo() if view.Hidden() { continue } repo := view.GetPb() log.Info("repo:", repo.GetGoPath()) if result, err := repo.MergeToDevel(); err == nil { log.Warn("THINGS SEEM OK", repo.GetFullPath()) for _, line := range result.Stdout { log.Warn("stdout:", line) } for _, line := range result.Stderr { log.Warn("stderr:", line) } } else { log.Warn("THINGS FAILED ", repo.GetFullPath()) log.Warn("err", err) for _, line := range result.Stdout { log.Warn("stdout:", line) } for _, line := range result.Stderr { log.Warn("stderr:", line) } break } me.forge.SetConfigSave(true) view.Update() } me.forge.ConfigSave() }) r.mergeMaster = box2.NewButton("merge to master", func() { r.Disable() defer r.Enable() loop := r.View.ReposSortByName() for loop.Scan() { // var repo *repolist.RepoRow view := loop.Repo() if view.Hidden() { continue } repo := view.GetPb() log.Info("repo:", repo.GetGoPath()) if result, err := repo.MergeToMaster(); err == nil { log.Warn("THINGS SEEM OK", repo.GetFullPath()) for _, line := range result.Stdout { log.Warn("stdout:", line) } for _, line := range result.Stderr { log.Warn("stderr:", line) } } else { log.Warn("THINGS FAILED ", repo.GetFullPath()) log.Warn("err", err) for _, line := range result.Stdout { log.Warn("stdout:", line) } for _, line := range result.Stderr { log.Warn("stderr:", line) } break } me.forge.SetConfigSave(true) view.Update() } me.forge.ConfigSave() }) return box2 }