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