update for new gui API

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-01-11 15:56:50 -06:00
parent 5d21e2f6f8
commit 1248e21394
7 changed files with 233 additions and 78 deletions

View File

@ -65,6 +65,14 @@ func (rs *RepoStatus) Ready() bool {
return rs.ready
}
func (rs *RepoStatus) Horizontal() {
rs.window.Horizontal()
}
func (rs *RepoStatus) Vertical() {
rs.window.Vertical()
}
func (rs *RepoStatus) Initialized() bool {
log.Log(CHANGE, "checking Initialized()")
if rs == nil {return false}

182
draw.go
View File

@ -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"))
}

46
git.go
View File

@ -45,6 +45,35 @@ func (rs *RepoStatus) populateTags() {
// rs.tagsDrop.Set(rs.lasttagrev)
}
/*
.git/refs/remotes
.git/refs/remotes/github
.git/refs/remotes/github/devel
.git/refs/remotes/github/main
.git/refs/remotes/origin
.git/refs/remotes/origin/devel
.git/refs/remotes/origin/main
.git/refs/remotes/origin/jcarr
.git/refs/heads
*/
func (rs *RepoStatus) getBranches() []string {
var all []string
var heads []string
var remotes []string
heads = listFiles(fullpath(rs.repopath + "/.git/refs/heads"))
remotes = listFiles(fullpath(rs.repopath + "/.git/refs/remotes"))
all = heads
all = append(all, remotes...)
for _, branch := range all {
log.Warn("getBranches()", branch)
}
return all
}
func (rs *RepoStatus) checkDirty() bool {
out := run(rs.repopath, "git", "diff-index HEAD")
if out == "" {
@ -59,7 +88,7 @@ func (rs *RepoStatus) checkDirty() bool {
}
func (rs *RepoStatus) checkoutBranch(branch string) {
func (rs *RepoStatus) checkoutBranch(level string, branch string) {
if rs.checkDirty() {
log.Warn("checkoutBranch() checkDirty() == true for repo", rs.repopath, "looking for branch:", branch)
return
@ -70,13 +99,14 @@ func (rs *RepoStatus) checkoutBranch(branch string) {
realname := rs.getCurrentBranchName()
realversion := rs.getCurrentBranchVersion()
log.Warn(rs.repopath, "realname =", realname, "realversion =", realversion)
if realname == "jcarr" {
rs.jcarrBranch.Set(realversion)
}
if realname == "devel" {
rs.develBranch.Set(realversion)
}
if realname == "master" {
switch level {
case "master":
rs.masterBranch.Set(realversion)
case "devel":
rs.develBranch.Set(realversion)
case "user":
rs.jcarrBranch.Set(realversion)
default:
}
}

20
new.go
View File

@ -1,8 +1,6 @@
package repostatus
import (
"go.wit.com/log"
"go.wit.com/gui/gui"
"go.wit.com/gui/gadgets"
)
@ -15,21 +13,7 @@ func New(p *gui.Node, path string) *RepoStatus {
repopath: path,
}
rs.tags = make(map[string]string)
rs.window = gadgets.NewBasicWindow(p, "GO Repo Details")
rs.ready = true
return rs
}
func (rs *RepoStatus) InitWindow() {
if ! rs.Initialized() {
log.Log(WARN, "not initalized yet (no parent for the window?)")
return
}
if rs.window != nil {
log.Log(WARN, "You already have a window")
rs.ready = true
return
}
log.Log(WARN, "Creating the Window")
rs.window = gadgets.NewBasicWindow(rs.parent, "GO Repo Details")
rs.ready = true
}

View File

@ -17,8 +17,8 @@ type RepoStatus struct {
parent *gui.Node
window *gadgets.BasicWindow
group *gui.Node
grid *gui.Node
// group *gui.Node
// grid *gui.Node
// status *gadgets.OneLiner
dirtyLabel *gadgets.OneLiner
@ -36,16 +36,25 @@ type RepoStatus struct {
develMerge *gui.Node
releaseVersion *gui.Node
vgroup *gui.Node
// vgroup *gui.Node
minor *gadgets.BasicCombobox
major *gadgets.BasicCombobox
revision *gadgets.BasicCombobox
versionMessage *gadgets.BasicEntry
versionCmds [][]string
versionCmdOutput *gadgets.OneLiner
versionCmdOutput *gadgets.OneLiner
newversion *gui.Node
gitBranchesGroup *gui.Node
gitStatusGroup *gui.Node
gitCommandsGroup *gui.Node
masterDrop *gadgets.BasicDropdown
develDrop *gadgets.BasicDropdown
userDrop *gadgets.BasicDropdown
speed *gadgets.OneLiner
speedActual *gadgets.OneLiner
}

22
unix.go
View File

@ -6,6 +6,7 @@ import (
"os/exec"
"strings"
"regexp"
"errors"
"go.wit.com/log"
)
@ -37,6 +38,7 @@ func run(path string, thing string, cmdline string) string {
return tmp
}
// goes in one directory so it gets remote branch names
func listFiles(directory string) []string {
var files []string
fileInfo, err := os.ReadDir(directory)
@ -46,7 +48,15 @@ func listFiles(directory string) []string {
}
for _, file := range fileInfo {
if !file.IsDir() {
if file.IsDir() {
dirname := file.Name()
newdir, _ := os.ReadDir(directory + "/" + dirname)
for _, file := range newdir {
if ! file.IsDir() {
files = append(files, dirname + "/" + file.Name())
}
}
} else {
files = append(files, file.Name())
}
}
@ -103,14 +113,14 @@ func splitVersion(version string) (a, b, c string) {
}
}
func runCmd(path string, parts []string) (bool, string) {
func runCmd(path string, parts []string) (error, bool, string) {
if len(parts) == 0 {
log.Warn("command line was empty")
return false, ""
return errors.New("empty"), false, ""
}
if parts[0] == "" {
log.Warn("command line was empty")
return false, ""
return errors.New("empty"), false, ""
}
thing := parts[0]
parts = parts[1:]
@ -128,12 +138,12 @@ func runCmd(path string, parts []string) (bool, string) {
log.Error(err)
log.Warn("output was", output)
log.Warn("cmd exited with error", err)
return false, string(output)
return err, false, string(output)
}
tmp := string(output)
tmp = strings.TrimSpace(tmp)
// Print the output
return true, tmp
return nil, true, tmp
}

View File

@ -38,16 +38,20 @@ func (rs *RepoStatus) Update() {
return
}
master := rs.masterDrop.Get()
devel := rs.develDrop.Get()
user := rs.userDrop.Get()
// rs.checkDirty() this runs
log.Log(WARN, "")
log.Log(WARN, "checkoutBranch master")
rs.checkoutBranch("master")
log.Log(WARN, "checkoutBranch", master)
rs.checkoutBranch("master", master)
log.Log(WARN, "")
log.Log(WARN, "checkoutBranch devel")
rs.checkoutBranch("devel")
log.Log(WARN, "checkoutBranch", devel)
rs.checkoutBranch("devel", devel)
log.Log(WARN, "")
log.Log(WARN, "checkoutBranch jcarr")
rs.checkoutBranch("jcarr")
log.Log(WARN, "checkoutBranch", user)
rs.checkoutBranch("user", user)
rs.recommend()
})