update for new gui API
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
5d21e2f6f8
commit
1248e21394
|
@ -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
182
draw.go
|
@ -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
46
git.go
|
@ -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
20
new.go
|
@ -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
|
||||
}
|
||||
|
|
17
structs.go
17
structs.go
|
@ -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
22
unix.go
|
@ -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
|
||||
}
|
||||
|
|
16
update.go
16
update.go
|
@ -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()
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue