summaryrefslogtreecommitdiff
path: root/windowMerge.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-30 13:35:22 -0600
committerJeff Carr <[email protected]>2025-01-30 13:35:22 -0600
commit4484b0b84d88fbad86ca6d202d3edfa9bb4946d0 (patch)
treeeed34ded8af61ac9b46a300ce7bd789d32975b0f /windowMerge.go
parentc079039ffe06a09b8552ffbae40c861c726c0281 (diff)
new window for merge on a single repo
Diffstat (limited to 'windowMerge.go')
-rw-r--r--windowMerge.go197
1 files changed, 197 insertions, 0 deletions
diff --git a/windowMerge.go b/windowMerge.go
new file mode 100644
index 0000000..ee10586
--- /dev/null
+++ b/windowMerge.go
@@ -0,0 +1,197 @@
+package repostatus
+
+import (
+ "go.wit.com/lib/gadgets"
+ "go.wit.com/lib/protobuf/gitpb"
+ "go.wit.com/log"
+
+ "go.wit.com/gui"
+)
+
+type repoMergeWindow struct {
+ repo *gitpb.Repo // the repo protobuf
+ win *gadgets.BasicWindow // the patches window
+ stack *gui.Node // the top box set as vertical
+ lasttag *gadgets.OneLiner // the last tag version
+ mainBranchVersion *gadgets.OneLiner // the primary branch version
+ develBranchVersion *gadgets.OneLiner // the devel branch version
+ userBranchVersion *gadgets.OneLiner // the user branch version
+
+ currentVersion *gadgets.OneLiner // the devel branch version
+ currentBranch *gadgets.OneLiner // the user branch version
+
+ //shelf *gui.Node // the first box in the stack, set as horizontal
+ //grid *gui.Node // the list of available patches
+ //setgrid *gui.Node // the list of each patchset
+}
+
+// todo: autogenerate these or make them standared 'gui' package functions
+// make this an go interface somehow
+
+// is the window hidden right now?
+func (w *repoMergeWindow) Hidden() bool {
+ return w.win.Hidden()
+}
+
+// switches between the window being visable or hidden on the desktop
+func (w *repoMergeWindow) Toggle() {
+ if w.Hidden() {
+ w.Show()
+ } else {
+ w.Hide()
+ }
+}
+
+// hides the window completely
+func (w *repoMergeWindow) Show() {
+ w.win.Show()
+ w.Update()
+}
+
+func (w *repoMergeWindow) Hide() {
+ w.win.Hide()
+}
+
+// should be the first box/widget in the window
+// greys out the window to the user
+func (w *repoMergeWindow) Disable() {
+ w.stack.Disable()
+}
+
+func (w *repoMergeWindow) Enable() {
+ w.stack.Enable()
+}
+
+func (w *repoMergeWindow) Update() {
+ w.lasttag.SetText(w.repo.GetLastTag())
+ w.mainBranchVersion.SetText(w.repo.GetMasterVersion())
+ w.develBranchVersion.SetText(w.repo.GetDevelVersion())
+ w.userBranchVersion.SetText(w.repo.GetUserVersion())
+
+ w.currentBranch.SetText(w.repo.GetCurrentBranchName())
+ w.currentVersion.SetText(w.repo.GetCurrentVersion())
+}
+
+func (rs *RepoStatus) MakeRepoMergeWindow(repo *gitpb.Repo) *repoMergeWindow {
+ w := new(repoMergeWindow)
+ w.repo = repo
+
+ // sync.Once()
+ w.win = gadgets.RawBasicWindow("Merge controls for " + repo.GetGoPath())
+ w.win.Make()
+
+ w.stack = w.win.Box().NewBox("bw vbox", false)
+ // me.reposwin.Draw()
+ w.win.Custom = func() {
+ log.Info("Got close. setting win.Hide()")
+ // sets the hidden flag to false so Toggle() works
+ w.win.Hide()
+ }
+
+ grid := w.stack.NewGrid("", 0, 0)
+
+ grid.NewGroup("Merge Options")
+ grid.NextRow()
+
+ grid.NewButton("checkout user", func() {
+ if err := repo.CheckoutUser(); err != nil {
+ log.Info(repo.GetFullPath(), err)
+ }
+ w.repo.Reload()
+ w.Update()
+ })
+ grid.NextRow()
+ grid.NewButton("checkout devel", func() {
+ repo.CheckoutDevel()
+ w.repo.Reload()
+ w.Update()
+ })
+ grid.NewButton("merge to devel", func() {
+ 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)
+ }
+ }
+ w.repo.Reload()
+ w.Update()
+ })
+ grid.NextRow()
+ grid.NewButton("checkout master", func() {
+ repo.CheckoutMaster()
+ w.repo.Reload()
+ w.Update()
+ })
+ grid.NewButton("merge to master", func() {
+ 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)
+ }
+ }
+ w.repo.Reload()
+ w.Update()
+ })
+ grid.NextRow()
+
+ w.lasttag = gadgets.NewOneLiner(grid, "last tag") // `progname:"LASTTAG"`
+ grid.NextRow()
+
+ w.mainBranchVersion = gadgets.NewOneLiner(grid, "master") // `progname:"MASTERBRANCH"`
+ grid.NextRow()
+ w.develBranchVersion = gadgets.NewOneLiner(grid, "devel") // `progname:"DEVELBRANCH"`
+ grid.NextRow()
+ w.userBranchVersion = gadgets.NewOneLiner(grid, "user") // `progname:"USERBRANCH"`
+ grid.NextRow()
+
+ w.currentBranch = gadgets.NewOneLiner(grid, "current branch") // `progname:"CURRENTBRANCH"`
+ grid.NextRow()
+ w.currentVersion = gadgets.NewOneLiner(grid, "current version") // `progname:"CURRENTVERSION"`
+ grid.NextRow()
+
+ w.Update()
+
+ return w
+}
+
+/*
+ rs.showBranchesButton = newgrid.NewButton("find user and devel", func() {
+ log.Info("redo this")
+ })
+ newgrid.NextRow()
+
+ rs.checkBranchesButton = newgrid.NewButton("CheckBranches()", func() {
+ log.Info("redo this")
+ })
+ newgrid.NextRow()
+
+ newgrid.NewButton("Revert master to devel", func() {
+ log.Info("redo this")
+ })
+*/