217 lines
5.4 KiB
Go
217 lines
5.4 KiB
Go
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
|
|
mergeD *gui.Node // the merge button
|
|
mergeM *gui.Node // the merge button
|
|
}
|
|
|
|
// 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())
|
|
|
|
if w.repo.GetCurrentBranchName() == w.repo.GetDevelBranchName() {
|
|
w.mergeD.Enable()
|
|
} else {
|
|
w.mergeD.Disable()
|
|
}
|
|
|
|
if w.repo.GetCurrentBranchName() == w.repo.GetMasterBranchName() {
|
|
w.mergeM.Enable()
|
|
} else {
|
|
w.mergeM.Disable()
|
|
}
|
|
}
|
|
|
|
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() {
|
|
w.Disable()
|
|
defer w.Enable()
|
|
if err := repo.CheckoutUser(); err != nil {
|
|
log.Info(repo.GetFullPath(), err)
|
|
}
|
|
w.repo.Reload()
|
|
w.Update()
|
|
})
|
|
grid.NextRow()
|
|
grid.NewButton("checkout devel", func() {
|
|
w.Disable()
|
|
defer w.Enable()
|
|
repo.CheckoutDevel()
|
|
w.repo.Reload()
|
|
w.Update()
|
|
})
|
|
w.mergeD = grid.NewButton("merge to devel", func() {
|
|
w.Disable()
|
|
defer w.Enable()
|
|
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() {
|
|
w.Disable()
|
|
defer w.Enable()
|
|
repo.CheckoutMaster()
|
|
w.repo.Reload()
|
|
w.Update()
|
|
})
|
|
w.mergeM = grid.NewButton("merge to master", func() {
|
|
w.Disable()
|
|
defer w.Enable()
|
|
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")
|
|
})
|
|
*/
|