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 return rs.ready
} }
func (rs *RepoStatus) Horizontal() {
rs.window.Horizontal()
}
func (rs *RepoStatus) Vertical() {
rs.window.Vertical()
}
func (rs *RepoStatus) Initialized() bool { func (rs *RepoStatus) Initialized() bool {
log.Log(CHANGE, "checking Initialized()") log.Log(CHANGE, "checking Initialized()")
if rs == nil {return false} if rs == nil {return false}

182
draw.go
View File

@ -1,10 +1,12 @@
package repostatus package repostatus
import ( import (
"io/ioutil"
"strconv" "strconv"
"strings" "strings"
"go.wit.com/log" "go.wit.com/log"
"go.wit.com/gui/gui"
"go.wit.com/gui/gadgets" "go.wit.com/gui/gadgets"
) )
@ -12,46 +14,122 @@ import (
// it's assumed you are always passing in a box // it's assumed you are always passing in a box
func draw(rs *RepoStatus) { func draw(rs *RepoStatus) {
if ! rs.Ready() {return} 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") // display the status of the git repository
rs.currentBranch = gadgets.NewOneLiner(rs.grid, "branch") rs.drawGitStatus()
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")
rs.dirtyLabel = gadgets.NewOneLiner(rs.grid, "dirty") // display the git branches and options
rs.drawGitBranches()
rs.speed = gadgets.NewOneLiner(rs.grid, "refresh speed =") // show standard git commit and merge controls
rs.speedActual = gadgets.NewOneLiner(rs.grid, "speed actual =") rs.drawGitCommands()
rs.vgroup = rs.window.Box().NewGroup("git commands") // figure out what the state of the git repository is
newgrid := rs.vgroup.NewGrid("gridnuts", 2, 2) 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() { newgrid.NewButton("update", func() {
rs.Update() rs.Update()
}) })
rs.develMerge = newgrid.NewButton("merge devel to master", func() { label := "merge devel to " + rs.masterDrop.Get()
rs.checkoutBranch("master") rs.develMerge = newgrid.NewButton(label, func() {
if rs.getCurrentBranchName() != "master" { master := rs.masterDrop.Get()
rs.checkoutBranch("master", master)
if rs.getCurrentBranchName() != master {
log.Warn("something went wrong switching to the master branch. full stop!") log.Warn("something went wrong switching to the master branch. full stop!")
return return
} }
log.Warn("Should merge devel into master here") if rs.runGitCommands() {
out := run(rs.repopath, "git", "merge devel") log.Warn("THINGS SEEM OK")
log.Warn("devel is merged? merginess is complete. perhaps", out) } else {
log.Warn("SOMETHING WENT WRONG")
}
rs.develMerge.Disable() // don't let this run twice for now 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.major.Custom = func () {
rs.setTag() rs.setTag()
rs.generateCmd() rs.generateCmd()
@ -81,14 +159,15 @@ func draw(rs *RepoStatus) {
return return
} }
log.Warn("COMMIT IT HERE") log.Warn("COMMIT IT HERE")
rs.runGitCommands() if rs.runGitCommands() {
log.Warn("THINGS SEEM OK")
} else {
log.Warn("SOMETHING WENT WRONG")
}
}) })
newgrid.Margin() newgrid.Margin()
newgrid.Pad() newgrid.Pad()
// figure out what the state of the git repository is
rs.Update()
} }
func (rs *RepoStatus) setTag() bool { func (rs *RepoStatus) setTag() bool {
@ -186,6 +265,7 @@ func (rs *RepoStatus) recommend() {
if rs.masterBranch.Get() != rs.develBranch.Get() { if rs.masterBranch.Get() != rs.develBranch.Get() {
log.Warn("master does not equal devel. merge devel into master") log.Warn("master does not equal devel. merge devel into master")
rs.EnableMergeDevel() rs.EnableMergeDevel()
rs.setMergeDevelCommands()
return return
} }
rs.getLastTagVersion() rs.getLastTagVersion()
@ -229,6 +309,24 @@ func (rs *RepoStatus) generateCmd() bool {
return true 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() { func (rs *RepoStatus) setGitCommands() {
var line1, line2, line3 []string var line1, line2, line3 []string
var all [][]string var all [][]string
@ -253,13 +351,25 @@ func (rs *RepoStatus) setGitCommands() {
rs.versionCmdOutput.Set(strings.Join(tmp, "\n")) 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, " ") s := strings.Join(line, " ")
log.Warn("NEED TO RUN:", s) log.Warn("s =", s)
b, output := runCmd(rs.repopath, line) tmp = append(tmp, s)
log.Warn("Returned with b =", b)
log.Warn("output was =", output)
log.Warn("RUN DONE")
} }
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) // 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 { func (rs *RepoStatus) checkDirty() bool {
out := run(rs.repopath, "git", "diff-index HEAD") out := run(rs.repopath, "git", "diff-index HEAD")
if out == "" { 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() { if rs.checkDirty() {
log.Warn("checkoutBranch() checkDirty() == true for repo", rs.repopath, "looking for branch:", branch) log.Warn("checkoutBranch() checkDirty() == true for repo", rs.repopath, "looking for branch:", branch)
return return
@ -70,13 +99,14 @@ func (rs *RepoStatus) checkoutBranch(branch string) {
realname := rs.getCurrentBranchName() realname := rs.getCurrentBranchName()
realversion := rs.getCurrentBranchVersion() realversion := rs.getCurrentBranchVersion()
log.Warn(rs.repopath, "realname =", realname, "realversion =", realversion) log.Warn(rs.repopath, "realname =", realname, "realversion =", realversion)
if realname == "jcarr" {
rs.jcarrBranch.Set(realversion) switch level {
} case "master":
if realname == "devel" {
rs.develBranch.Set(realversion)
}
if realname == "master" {
rs.masterBranch.Set(realversion) 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 package repostatus
import ( import (
"go.wit.com/log"
"go.wit.com/gui/gui" "go.wit.com/gui/gui"
"go.wit.com/gui/gadgets" "go.wit.com/gui/gadgets"
) )
@ -15,21 +13,7 @@ func New(p *gui.Node, path string) *RepoStatus {
repopath: path, repopath: path,
} }
rs.tags = make(map[string]string) rs.tags = make(map[string]string)
rs.window = gadgets.NewBasicWindow(p, "GO Repo Details")
rs.ready = true
return rs 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 parent *gui.Node
window *gadgets.BasicWindow window *gadgets.BasicWindow
group *gui.Node // group *gui.Node
grid *gui.Node // grid *gui.Node
// status *gadgets.OneLiner // status *gadgets.OneLiner
dirtyLabel *gadgets.OneLiner dirtyLabel *gadgets.OneLiner
@ -36,16 +36,25 @@ type RepoStatus struct {
develMerge *gui.Node develMerge *gui.Node
releaseVersion *gui.Node releaseVersion *gui.Node
vgroup *gui.Node // vgroup *gui.Node
minor *gadgets.BasicCombobox minor *gadgets.BasicCombobox
major *gadgets.BasicCombobox major *gadgets.BasicCombobox
revision *gadgets.BasicCombobox revision *gadgets.BasicCombobox
versionMessage *gadgets.BasicEntry versionMessage *gadgets.BasicEntry
versionCmds [][]string versionCmds [][]string
versionCmdOutput *gadgets.OneLiner versionCmdOutput *gadgets.OneLiner
newversion *gui.Node newversion *gui.Node
gitBranchesGroup *gui.Node
gitStatusGroup *gui.Node
gitCommandsGroup *gui.Node
masterDrop *gadgets.BasicDropdown
develDrop *gadgets.BasicDropdown
userDrop *gadgets.BasicDropdown
speed *gadgets.OneLiner speed *gadgets.OneLiner
speedActual *gadgets.OneLiner speedActual *gadgets.OneLiner
} }

22
unix.go
View File

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

View File

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