summaryrefslogtreecommitdiff
path: root/draw.go
diff options
context:
space:
mode:
Diffstat (limited to 'draw.go')
-rw-r--r--draw.go182
1 files changed, 146 insertions, 36 deletions
diff --git a/draw.go b/draw.go
index fa0edc3..d52482f 100644
--- a/draw.go
+++ b/draw.go
@@ -1,10 +1,12 @@
package repostatus
import (
+ "io/ioutil"
"strconv"
"strings"
"go.wit.com/log"
+ "go.wit.com/gui/gui"
"go.wit.com/gui/gadgets"
)
@@ -12,46 +14,122 @@ import (
// it's assumed you are always passing in a box
func draw(rs *RepoStatus) {
if ! rs.Ready() {return}
- rs.group = rs.window.Box().NewGroup("What GO Knows It Has")
- rs.grid = rs.group.NewGrid("gridnuts", 2, 2)
- rs.grid.SetNext(1,1)
- rs.grid.Margin()
- rs.grid.Pad()
- rs.path = gadgets.NewOneLiner(rs.grid, "path")
- rs.currentBranch = gadgets.NewOneLiner(rs.grid, "branch")
- rs.lasttag = gadgets.NewOneLiner(rs.grid, "last tag")
- rs.currentVersion = gadgets.NewOneLiner(rs.grid, "Version")
- rs.tagsDrop = gadgets.NewBasicDropdown(rs.grid, "existing tags")
- rs.masterBranch = gadgets.NewOneLiner(rs.grid, "master")
- rs.develBranch = gadgets.NewOneLiner(rs.grid, "devel")
- rs.jcarrBranch = gadgets.NewOneLiner(rs.grid, "jcarr")
+ // display the status of the git repository
+ rs.drawGitStatus()
- rs.dirtyLabel = gadgets.NewOneLiner(rs.grid, "dirty")
+ // display the git branches and options
+ rs.drawGitBranches()
- rs.speed = gadgets.NewOneLiner(rs.grid, "refresh speed =")
- rs.speedActual = gadgets.NewOneLiner(rs.grid, "speed actual =")
+ // show standard git commit and merge controls
+ rs.drawGitCommands()
- rs.vgroup = rs.window.Box().NewGroup("git commands")
- newgrid := rs.vgroup.NewGrid("gridnuts", 2, 2)
+ // figure out what the state of the git repository is
+ rs.Update()
+}
+
+func (rs *RepoStatus) drawGitBranches() {
+ rs.gitBranchesGroup = rs.window.Box().NewGroup("branches")
+ newgrid := rs.gitBranchesGroup.NewGrid("gridnuts", 2, 2)
+
+ rs.masterDrop = gadgets.NewBasicDropdown(newgrid, "main branch")
+ rs.develDrop = gadgets.NewBasicDropdown(newgrid, "devel branch")
+ rs.userDrop = gadgets.NewBasicDropdown(newgrid, "user branch")
+ var master = ""
+ all := rs.getBranches()
+ for _, branch := range all {
+ log.Warn("getBranches()", branch)
+ rs.masterDrop.Add(branch)
+ rs.develDrop.Add(branch)
+ rs.userDrop.Add(branch)
+ if branch == "master" {
+ master = "master"
+ }
+ if branch == "main" {
+ master = "main"
+ }
+ }
+ rs.masterDrop.Set(master)
+ // relabel the various gadgets with the right branch name
+ rs.masterBranch.SetLabel(master)
+ rs.major.SetTitle(master)
+
+ rs.develDrop.Set("devel")
+ rs.userDrop.Set("jcarr")
+
+ var count *gui.Node
+
+ newgrid.NewButton("show branches", func() {
+ all := rs.getBranches()
+ i := len(all)
+ count.Set(strconv.Itoa(i))
+ })
+ count = newgrid.NewLabel("")
+ newgrid.NewButton("check branches", func() {
+ all := rs.getBranches()
+ path := fullpath(rs.repopath + "/.git/refs/")
+ for _, b := range all {
+ parts := strings.Split(b, "/")
+ rdir := "heads"
+ if len(parts) == 2 {
+ rdir = "remotes"
+ }
+ fullfile := path + "/" + rdir + "/" + b
+ content, _ := ioutil.ReadFile(fullfile)
+ hash := strings.TrimSpace(string(content))
+ // log.Warn(fullfile)
+ log.Warn(hash, b)
+ }
+ })
+}
+
+func (rs *RepoStatus) drawGitStatus() {
+ rs.gitStatusGroup = rs.window.Box().NewGroup("What GO Knows It Has")
+ newgrid := rs.gitStatusGroup.NewGrid("gridnuts", 2, 2)
+ newgrid.SetNext(1,1)
+ newgrid.Margin()
+ newgrid.Pad()
+
+ rs.path = gadgets.NewOneLiner(newgrid, "path")
+ rs.currentBranch = gadgets.NewOneLiner(newgrid, "branch")
+ rs.lasttag = gadgets.NewOneLiner(newgrid, "last tag")
+ rs.currentVersion = gadgets.NewOneLiner(newgrid, "Version")
+ rs.tagsDrop = gadgets.NewBasicDropdown(newgrid, "existing tags")
+ rs.masterBranch = gadgets.NewOneLiner(newgrid, "master")
+ rs.develBranch = gadgets.NewOneLiner(newgrid, "devel")
+ rs.jcarrBranch = gadgets.NewOneLiner(newgrid, "jcarr")
+
+ rs.dirtyLabel = gadgets.NewOneLiner(newgrid, "dirty")
+
+ rs.speed = gadgets.NewOneLiner(newgrid, "refresh speed =")
+ rs.speedActual = gadgets.NewOneLiner(newgrid, "speed actual =")
+}
+
+func (rs *RepoStatus) drawGitCommands() {
+ rs.gitCommandsGroup = rs.window.Box().NewGroup("git commands")
+ newgrid := rs.gitCommandsGroup.NewGrid("gridnuts", 2, 2)
newgrid.NewButton("update", func() {
rs.Update()
})
- rs.develMerge = newgrid.NewButton("merge devel to master", func() {
- rs.checkoutBranch("master")
- if rs.getCurrentBranchName() != "master" {
+ label := "merge devel to " + rs.masterDrop.Get()
+ rs.develMerge = newgrid.NewButton(label, func() {
+ master := rs.masterDrop.Get()
+ rs.checkoutBranch("master", master)
+ if rs.getCurrentBranchName() != master {
log.Warn("something went wrong switching to the master branch. full stop!")
return
}
- log.Warn("Should merge devel into master here")
- out := run(rs.repopath, "git", "merge devel")
- log.Warn("devel is merged? merginess is complete. perhaps", out)
+ if rs.runGitCommands() {
+ log.Warn("THINGS SEEM OK")
+ } else {
+ log.Warn("SOMETHING WENT WRONG")
+ }
rs.develMerge.Disable() // don't let this run twice for now
})
- rs.major = gadgets.NewBasicCombobox(newgrid, "master")
+ rs.major = gadgets.NewBasicCombobox(newgrid, "major")
rs.major.Custom = func () {
rs.setTag()
rs.generateCmd()
@@ -81,14 +159,15 @@ func draw(rs *RepoStatus) {
return
}
log.Warn("COMMIT IT HERE")
- rs.runGitCommands()
+ if rs.runGitCommands() {
+ log.Warn("THINGS SEEM OK")
+ } else {
+ log.Warn("SOMETHING WENT WRONG")
+ }
})
newgrid.Margin()
newgrid.Pad()
-
- // figure out what the state of the git repository is
- rs.Update()
}
func (rs *RepoStatus) setTag() bool {
@@ -186,6 +265,7 @@ func (rs *RepoStatus) recommend() {
if rs.masterBranch.Get() != rs.develBranch.Get() {
log.Warn("master does not equal devel. merge devel into master")
rs.EnableMergeDevel()
+ rs.setMergeDevelCommands()
return
}
rs.getLastTagVersion()
@@ -229,6 +309,24 @@ func (rs *RepoStatus) generateCmd() bool {
return true
}
+func (rs *RepoStatus) runGitCommands() bool {
+ for _, line := range rs.versionCmds {
+ s := strings.Join(line, " ")
+ log.Warn("NEED TO RUN:", s)
+ err, b, output := runCmd(rs.repopath, line)
+ if err != nil {
+ log.Warn("ABEND EXECUTION")
+ log.Warn("error =", err)
+ log.Warn("output =", output)
+ return false
+ }
+ log.Warn("Returned with b =", b)
+ log.Warn("output was =", output)
+ log.Warn("RUN DONE")
+ }
+ return true
+}
+
func (rs *RepoStatus) setGitCommands() {
var line1, line2, line3 []string
var all [][]string
@@ -253,13 +351,25 @@ func (rs *RepoStatus) setGitCommands() {
rs.versionCmdOutput.Set(strings.Join(tmp, "\n"))
}
-func (rs *RepoStatus) runGitCommands() {
- for _, line := range rs.versionCmds {
+
+func (rs *RepoStatus) setMergeDevelCommands() {
+ var line1, line2 []string
+ var all [][]string
+
+ line1 = append(line1, "git", "merge", "devel")
+ all = append(all, line1)
+ line2 = append(line2, "git", "push")
+ all = append(all, line2)
+
+ rs.versionCmds = all
+
+ var tmp []string
+ // convert to displayable to the user text
+ for _, line := range all {
s := strings.Join(line, " ")
- log.Warn("NEED TO RUN:", s)
- b, output := runCmd(rs.repopath, line)
- log.Warn("Returned with b =", b)
- log.Warn("output was =", output)
- log.Warn("RUN DONE")
+ log.Warn("s =", s)
+ tmp = append(tmp, s)
}
+
+ rs.versionCmdOutput.Set(strings.Join(tmp, "\n"))
}