diff options
Diffstat (limited to 'draw.go')
| -rw-r--r-- | draw.go | 264 |
1 files changed, 204 insertions, 60 deletions
@@ -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") + } } |
