summaryrefslogtreecommitdiff
path: root/repoview.go
diff options
context:
space:
mode:
Diffstat (limited to 'repoview.go')
-rw-r--r--repoview.go195
1 files changed, 195 insertions, 0 deletions
diff --git a/repoview.go b/repoview.go
new file mode 100644
index 0000000..a69cbca
--- /dev/null
+++ b/repoview.go
@@ -0,0 +1,195 @@
+package main
+
+import (
+ "go.wit.com/lib/gadgets"
+ "go.wit.com/lib/gui/repolist"
+ "go.wit.com/log"
+
+ "go.wit.com/gui"
+)
+
+type repoWindow struct {
+ win *gadgets.BasicWindow
+ box *gui.Node
+ View *repolist.RepoList
+}
+
+func (r *repoWindow) Hidden() bool {
+ return r.win.Hidden()
+}
+
+func (r *repoWindow) Show() {
+ r.win.Show()
+}
+
+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 {
+ if me.repos != nil {
+ return me.repos
+ }
+ 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("GOT HERE: main() gadgets.NewBasicWindow() close")
+ log.Warn("Should I do something special here?")
+ }
+
+ r.repoAllButtons()
+
+ r.View = repolist.AutotypistView(r.box)
+
+ return r
+}
+
+func (r *repoWindow) showApps() {
+ for _, repo := range r.View.AllRepos() {
+ switch repo.RepoType() {
+ case "binary":
+ //log.Info("compile here. Show()")
+ repo.Show()
+ case "library":
+ //log.Info("library here. Hide()")
+ repo.Hide()
+ default:
+ log.Info("showApps() unknown. Show()")
+ repo.Hide()
+ }
+
+ }
+}
+
+func (r *repoWindow) repoAllButtons() {
+ // reposbox.SetExpand(false)
+ group1 := r.box.NewGroup("Run on all repos:")
+
+ hbox := group1.Box()
+ // hbox.Horizontal()
+ hbox.Vertical()
+
+ box2 := hbox.Box().Vertical()
+ box2.NewButton("merge all user to devel", func() {
+ r.Disable()
+ if !r.mergeAllUserToDevel() {
+ return
+ }
+ r.Enable()
+ })
+
+ box2.NewButton("merge all devel to main", func() {
+ r.Disable()
+ if !r.mergeAllDevelToMain() {
+ return
+ }
+ r.Enable()
+ })
+
+ box2.NewButton("merge it all", func() {
+ r.Disable()
+ if !r.mergeAllUserToDevel() {
+ return
+ }
+ if !r.mergeAllDevelToMain() {
+ return
+ }
+ r.Enable()
+ })
+
+ box2.NewButton("test all builds", func() {
+ r.Disable()
+ defer r.Enable()
+ r.showApps()
+ for _, repo := range r.View.AllRepos() {
+ if repo.Hidden() {
+ // log.Info("skip hidden", repo.String())
+ } else {
+ log.Info("try to build", repo.String())
+ if repo.Build() {
+ log.Info("build worked", repo.String())
+ } else {
+ log.Info("build failed", repo.String())
+ go repo.Xterm("bash")
+ return
+ }
+ }
+ }
+ log.Info("")
+ log.Info("every build worked !!!")
+ log.Info("")
+ })
+}
+
+func (r *repoWindow) mergeAllDevelToMain() bool {
+ log.Info("merge all here")
+ for _, repo := range r.View.AllRepos() {
+ if repo.ReadOnly() {
+ log.Info("skipping readonly", repo.String(), repo.Status())
+ continue
+ }
+ if repo.Status() != "merge to main" {
+ log.Info("skipping. not merge to main", repo.String(), repo.Status())
+ continue
+ }
+ if repo.CheckDirty() {
+ log.Info("skipping dirty", repo.String(), repo.Status())
+ continue
+ }
+ log.Info("found", repo.String(), repo.Status())
+ repo.NewScan()
+ if repo.MergeDevelToMaster() {
+ log.Warn("THINGS SEEM OK fullAutomation() returned true.")
+ } else {
+ log.Warn("last repo:", repo.Path())
+ log.Warn("THINGS FAILED fullAutomation() returned false")
+ return false
+ }
+ repo.NewScan()
+ }
+ log.Warn("EVERYTHING WORKED")
+ return true
+}
+
+func (r *repoWindow) mergeAllUserToDevel() bool {
+ log.Info("merge all here")
+ for _, repo := range r.View.AllRepos() {
+ if repo.ReadOnly() {
+ log.Info("skipping readonly", repo.String(), repo.Status())
+ continue
+ }
+ if repo.Status() != "merge to devel" {
+ log.Info("skipping. not merge to devel", repo.String(), repo.Status())
+ continue
+ }
+ if repo.CheckDirty() {
+ log.Info("skipping dirty", repo.String(), repo.Status())
+ continue
+ }
+ log.Info("found", repo.String(), repo.Status())
+ repo.NewScan()
+ if repo.MergeUserToDevel() {
+ log.Warn("THINGS SEEM OK fullAutomation() returned true.")
+ } else {
+ log.Warn("last repo:", repo.Path())
+ log.Warn("THINGS FAILED fullAutomation() returned false")
+ return false
+ }
+ repo.NewScan()
+ }
+ log.Warn("EVERYTHING WORKED")
+ return true
+}