summaryrefslogtreecommitdiff
path: root/draw.go
diff options
context:
space:
mode:
Diffstat (limited to 'draw.go')
-rw-r--r--draw.go264
1 files changed, 204 insertions, 60 deletions
diff --git a/draw.go b/draw.go
index 35e8d4c..fa0edc3 100644
--- a/draw.go
+++ b/draw.go
@@ -2,6 +2,7 @@ package repostatus
import (
"strconv"
+ "strings"
"go.wit.com/log"
"go.wit.com/gui/gadgets"
@@ -12,18 +13,16 @@ import (
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.grid.NewLabel("tags")
- rs.tagsDrop = rs.grid.NewDropdown("tags")
+ 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")
@@ -33,38 +32,14 @@ func draw(rs *RepoStatus) {
rs.speed = gadgets.NewOneLiner(rs.grid, "refresh speed =")
rs.speedActual = gadgets.NewOneLiner(rs.grid, "speed actual =")
- rs.grid.NewButton("update", func() {
+ rs.vgroup = rs.window.Box().NewGroup("git commands")
+ newgrid := rs.vgroup.NewGrid("gridnuts", 2, 2)
+
+ newgrid.NewButton("update", func() {
rs.Update()
})
- rs.grid.NewButton("recommend", func() {
- log.Warn("Is repo dirty?", rs.dirtyLabel.Get())
- log.Warn("list the known tags")
- rs.develMerge.Disable()
- rs.releaseVersion.Disable()
- rs.populateTags()
- log.Warn("Does devel == jcarr?", rs.develBranch.Get(), rs.jcarrBranch.Get())
- if rs.develBranch.Get() != rs.jcarrBranch.Get() {
- log.Warn("devel does not equal jcarr")
- log.Warn("merge or squash?")
- return
- }
- log.Warn("Does master == devel? ", rs.masterBranch.Get(), rs.develBranch.Get())
- if rs.masterBranch.Get() != rs.develBranch.Get() {
- log.Warn("master does not equal devel. merge devel into master")
- rs.develMerge.Enable()
- return
- }
- rs.getLastTagVersion()
- if rs.lasttag.Get() != rs.masterBranch.Get() {
- log.Warn("master does not equal last tag")
- rs.incrementVersion()
- rs.releaseVersion.Enable()
- return
- }
- log.Warn("Is repo pushed upstream? git.wit.org or github?")
- })
- rs.develMerge = rs.grid.NewButton("merge devel to master", func() {
+ rs.develMerge = newgrid.NewButton("merge devel to master", func() {
rs.checkoutBranch("master")
if rs.getCurrentBranchName() != "master" {
log.Warn("something went wrong switching to the master branch. full stop!")
@@ -75,24 +50,100 @@ func draw(rs *RepoStatus) {
log.Warn("devel is merged? merginess is complete. perhaps", out)
rs.develMerge.Disable() // don't let this run twice for now
})
- rs.develMerge.Disable()
- rs.releaseVersion = rs.grid.NewButton("tag and release version", func() {
- a := rs.major.Get()
- b := rs.minor.Get()
- c := rs.revision.Get()
- newver := a + "." + b + "." + c
- log.Warn("Should tag version:", newver)
+ rs.major = gadgets.NewBasicCombobox(newgrid, "master")
+ rs.major.Custom = func () {
+ rs.setTag()
+ rs.generateCmd()
+ }
+ rs.minor = gadgets.NewBasicCombobox(newgrid, "minor")
+ rs.minor.Custom = func () {
+ rs.setTag()
+ rs.generateCmd()
+ }
+ rs.revision = gadgets.NewBasicCombobox(newgrid, "revision")
+ rs.revision.Custom = func () {
+ rs.setTag()
+ rs.generateCmd()
+ }
+ newgrid.NewLabel("new tag version")
+ rs.newversion = newgrid.NewLabel("3.1.4")
+
+ rs.versionMessage = gadgets.NewBasicEntry(newgrid, "tag message")
+ rs.versionMessage.Custom = func () {
+ rs.generateCmd()
+ }
+ rs.versionCmdOutput = gadgets.NewOneLiner(newgrid, "tag cmd")
+
+ rs.releaseVersion = newgrid.NewButton("tag and release new version", func() {
+ if ! rs.generateCmd() {
+ log.Warn("something is wrong. fix the errors first")
+ return
+ }
+ log.Warn("COMMIT IT HERE")
+ rs.runGitCommands()
})
- rs.releaseVersion.Disable()
- rs.vgroup = rs.window.Box().NewGroup("Version")
- rs.major = gadgets.NewBasicCombobox(rs.grid, "master")
- rs.minor = gadgets.NewBasicCombobox(rs.grid, "minor")
- rs.revision = gadgets.NewBasicCombobox(rs.grid, "revision")
+ newgrid.Margin()
+ newgrid.Pad()
- rs.grid.Margin()
- rs.grid.Pad()
+ // figure out what the state of the git repository is
+ rs.Update()
+}
+
+func (rs *RepoStatus) setTag() bool {
+ lasttag := rs.lasttag.Get()
+ var major, minor, revision string
+ major, minor, revision = splitVersion(lasttag)
+
+ olda, _ := strconv.Atoi(major)
+ oldb, _ := strconv.Atoi(minor)
+ oldc, _ := strconv.Atoi(revision)
+
+ log.Warn("current version here", lasttag)
+ log.Warn("current release a,b,c =", major, minor, revision)
+
+ newa, _ := strconv.Atoi(rs.major.Get())
+ newb, _ := strconv.Atoi(rs.minor.Get())
+ newc, _ := strconv.Atoi(rs.revision.Get())
+
+ newver := strconv.Itoa(newa)
+ if newa < olda {
+ log.Warn("new version bad", newver, "vs old version", lasttag)
+ rs.newversion.Set("bad")
+ return false
+ }
+ if newa > olda {
+ log.Warn("new version ok", newver, "vs old version", lasttag)
+ rs.newversion.Set(newver)
+ rs.minor.Set("")
+ rs.revision.Set("")
+ return true
+ }
+
+ newver = strconv.Itoa(newa) + "." + strconv.Itoa(newb)
+ if newb < oldb {
+ log.Warn("new version bad", newver, "vs old version", lasttag)
+ rs.newversion.Set("bad")
+ return false
+ }
+
+ if newb > oldb {
+ log.Warn("new version ok", newver, "vs old version", lasttag)
+ rs.newversion.Set(newver)
+ rs.revision.Set("")
+ return true
+ }
+
+ newver = strconv.Itoa(newa) + "." + strconv.Itoa(newb) + "." + strconv.Itoa(newc)
+ if newc <= oldc {
+ log.Warn("new version bad", newver, "vs old version", lasttag)
+ rs.newversion.Set("bad")
+ return false
+ }
+ log.Warn("new version ok", newver, "vs old version", lasttag)
+ rs.newversion.Set(newver)
+ return true
}
func (rs *RepoStatus) incrementVersion() {
@@ -102,20 +153,113 @@ func (rs *RepoStatus) incrementVersion() {
log.Warn("Should release version here", lasttag)
log.Warn("Should release a,b,c", major, minor, revision)
- rs.a, _ = strconv.Atoi(major)
- rs.b, _ = strconv.Atoi(minor)
- rs.c, _ = strconv.Atoi(revision)
+ a, _ := strconv.Atoi(major)
+ b, _ := strconv.Atoi(minor)
+ c, _ := strconv.Atoi(revision)
- rs.major.Add(rs.a)
- rs.major.Add(rs.a + 1)
- rs.major.Set(rs.a)
+ rs.major.Add(a)
+ rs.major.Add(a + 1)
+ rs.major.Set(a)
- rs.minor.Add(rs.b)
- rs.minor.Add(rs.b + 1)
- rs.minor.Set(rs.b)
+ rs.minor.Add(b)
+ rs.minor.Add(b + 1)
+ rs.minor.Set(b)
// rs.c := strconv.Atoi(revision)
- rs.revision.Add(rs.c + 1)
- rs.revision.Add(rs.c + 2)
- rs.revision.Set(rs.c + 1)
+ rs.revision.Add(c + 1)
+ rs.revision.Add(c + 2)
+ rs.revision.Set(c + 1)
+}
+
+func (rs *RepoStatus) recommend() {
+ log.Warn("Is repo dirty?", rs.dirtyLabel.Get())
+ log.Warn("list the known tags")
+ rs.DisableEverything()
+ rs.populateTags()
+ log.Warn("Does devel == jcarr?", rs.develBranch.Get(), rs.jcarrBranch.Get())
+ if rs.develBranch.Get() != rs.jcarrBranch.Get() {
+ log.Warn("devel does not equal jcarr")
+ log.Warn("merge or squash?")
+ return
+ }
+ log.Warn("Does master == devel? ", rs.masterBranch.Get(), rs.develBranch.Get())
+ if rs.masterBranch.Get() != rs.develBranch.Get() {
+ log.Warn("master does not equal devel. merge devel into master")
+ rs.EnableMergeDevel()
+ return
+ }
+ rs.getLastTagVersion()
+ if rs.lasttag.Get() != rs.masterBranch.Get() {
+ log.Warn("master does not equal last tag")
+ rs.incrementVersion()
+ rs.EnableSelectTag()
+ rs.setTag()
+ return
+ }
+ log.Warn("Is repo pushed upstream? git.wit.org or github?")
+}
+
+func (rs *RepoStatus) generateCmd() bool {
+ // the length of 24 is arbitrary, but should be short
+ // they should be things like perhaps, major release names
+ // or something the users might see.
+ // aka: "Topsy", "Picasso", "Buzz", etc
+
+ if ! rs.setTag() {
+ log.Warn("tag sucked. fix your tag version")
+ rs.versionMessage.SetLabel("tag message (bad version)")
+ rs.releaseVersion.Disable()
+ return false
+ }
+
+ log.Warn("tag is valid!!!!")
+ rs.setGitCommands()
+
+ if rs.versionMessage.Get() == "" {
+ log.Warn("tag message is empty!!!!")
+ rs.releaseVersion.Disable()
+ return false
+ }
+ if len(rs.versionMessage.Get()) > 24 {
+ rs.versionMessage.SetLabel("tag message (too long)")
+ } else {
+ rs.versionMessage.SetLabel("tag message")
+ }
+ rs.releaseVersion.Enable()
+ return true
+}
+
+func (rs *RepoStatus) setGitCommands() {
+ var line1, line2, line3 []string
+ var all [][]string
+
+ newTag := rs.newversion.GetText()
+ line1 = append(line1, "git", "tag", "v" + newTag, "-m", rs.versionMessage.Get())
+ all = append(all, line1)
+ line2 = append(line2, "git", "push", "--tags")
+ all = append(all, line2)
+ line3 = append(line3, "git", "push", "--prune", "--tags")
+ all = append(all, line3)
+
+ rs.versionCmds = all
+
+ var tmp []string
+ // convert to displayable to the user text
+ for _, line := range all {
+ s := strings.Join(line, " ")
+ log.Warn("s =", s)
+ tmp = append(tmp, s)
+ }
+
+ rs.versionCmdOutput.Set(strings.Join(tmp, "\n"))
+}
+func (rs *RepoStatus) runGitCommands() {
+ for _, line := range rs.versionCmds {
+ 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")
+ }
}