summaryrefslogtreecommitdiff
path: root/windowRepos.go
diff options
context:
space:
mode:
Diffstat (limited to 'windowRepos.go')
-rw-r--r--windowRepos.go160
1 files changed, 154 insertions, 6 deletions
diff --git a/windowRepos.go b/windowRepos.go
index d4cd144..6782a21 100644
--- a/windowRepos.go
+++ b/windowRepos.go
@@ -8,15 +8,39 @@ package main
import (
"fmt"
"os"
+ "sync"
"time"
+ "go.wit.com/gui"
+ "go.wit.com/lib/debugger"
"go.wit.com/lib/gadgets"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
-func makeReposWin() *gadgets.GenericWindow {
+type stdReposTableWin struct {
+ sync.Mutex
+ win *gadgets.GenericWindow // the machines gui window
+ boxTB *gui.Node // the machines gui parent box widget
+ TB *gitpb.ReposTable // the gui table buffer
+ pb *gitpb.Repos // the current repos protobuf
+ update bool // if the window should be updated
+}
+
+func (w *stdReposTableWin) Toggle() {
+ if w == nil {
+ return
+ }
+ if w.win == nil {
+ return
+ }
+ w.win.Toggle()
+}
+
+func makeReposWin() *stdReposTableWin {
+ rwin := new(stdReposTableWin)
win := gadgets.NewGenericWindow("git repos", "All about git repos")
+ rwin.win = win
grid := win.Group.RawGrid()
me.repoDirtyB = grid.NewButton("dirty", func() {
@@ -161,9 +185,9 @@ func makeReposWin() *gadgets.GenericWindow {
log.Info("add a forge config window here")
})
- win.Stack.NewGroup("misc (works in progress)")
+ win.Top.NewGroup("misc (works in progress)")
- grid = win.Stack.RawGrid()
+ grid = win.Top.RawGrid()
var found *gitpb.Repos
var txt string
@@ -248,8 +272,13 @@ func makeReposWin() *gadgets.GenericWindow {
t.ShowTable()
})
- grid.NewButton("unknown branches", func() {
- log.Info("unknown branches not done yet")
+ rwin.boxTB = win.Bottom.Box()
+
+ grid.NewButton("dirty on bottom", func() {
+ log.Info("try to show dirty repos on bottom")
+ found := findDirty()
+ rwin.doReposTable(found)
+
})
grid.NextRow()
@@ -269,7 +298,126 @@ func makeReposWin() *gadgets.GenericWindow {
grid.NextRow()
makeHackModeWindow(win)
- return win
+ return rwin
+}
+
+// default window for active running droplets
+func (rwin *stdReposTableWin) doReposTable(pb *gitpb.Repos) {
+ rwin.Lock()
+ defer rwin.Unlock()
+ if rwin.TB != nil {
+ rwin.TB.Delete()
+ rwin.TB = nil
+ }
+
+ rwin.pb = pb
+
+ t := makeStandardReposGrid(pb)
+ t.SetParent(rwin.boxTB)
+ t.ShowTable()
+ rwin.TB = t
+}
+
+func makeHackModeWindow(win *gadgets.GenericWindow) {
+ group := win.Top.NewGroup("This is a work in progress")
+ grid := 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
+ }
+
+ }
+ })
+ })
+ grid.NextRow()
+
+ group2 := win.Top.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.Top.NewGroup("work in progress")
+ grid = group3.RawGrid()
+
+ grid.NewButton("forge ConfigSave()", func() {
+ me.forge.ConfigSave()
+ })
+
+ grid.NewButton("debugger()", func() {
+ debugger.DebugWindow()
+ })
}
func develBehindMasterProblem() *gitpb.Repos {