diff options
| -rw-r--r-- | branchesBox.go | 73 | ||||
| -rw-r--r-- | commandsBox.go | 97 | ||||
| -rw-r--r-- | draw.go | 171 | ||||
| -rw-r--r-- | git.go | 4 | ||||
| -rw-r--r-- | revert.go | 45 | ||||
| -rw-r--r-- | structs.go | 2 | ||||
| -rw-r--r-- | tagWindow.go | 16 | ||||
| -rw-r--r-- | unix.go | 13 |
8 files changed, 259 insertions, 162 deletions
diff --git a/branchesBox.go b/branchesBox.go new file mode 100644 index 0000000..38c1d26 --- /dev/null +++ b/branchesBox.go @@ -0,0 +1,73 @@ +package repostatus + +import ( + "go.wit.com/lib/gadgets" + "go.wit.com/log" +) + +func (rs *RepoStatus) makeBranchesBox() { + rs.gitBranchesGroup = rs.window.Box().NewGroup("branches") + newgrid := rs.gitBranchesGroup.NewGrid("gridnuts", 2, 2) + + rs.lasttag = gadgets.NewOneLiner(newgrid, "last tag") + + rs.masterBranchVersion = gadgets.NewOneLiner(newgrid, "master") + rs.develBranchVersion = gadgets.NewOneLiner(newgrid, "devel") + rs.userBranchVersion = gadgets.NewOneLiner(newgrid, "user") + + rs.currentBranch = gadgets.NewOneLiner(newgrid, "current branch") + rs.currentVersion = gadgets.NewOneLiner(newgrid, "current version") + + rs.showBranchesButton = newgrid.NewButton("getBranches()", func() { + all := rs.getBranches() + i := len(all) + log.Log(WARN, "branch count =", i) + }) + + rs.checkBranchesButton = newgrid.NewButton("CheckBranches()", func() { + if rs.CheckBranches() { + log.Log(WARN, "Branches are perfect") + } else { + log.Log(WARN, "Branches are not perfect") + } + }) + + newgrid.NewButton("show .git/config", func() { + if rs.gitConfig == nil { + log.Log(WARN, "Nonexistant or damaged .git/config", rs.String()) + return + } + log.Log(WARN, ".git/config:", rs.realPath.String()) + + // The info: + for name, remote := range rs.gitConfig.remotes { + log.Log(WARN, " ", name, "url:", remote.url) + } + for name, branch := range rs.gitConfig.branches { + log.Log(WARN, " ", name, "remote:", branch.remote, "merge", branch.merge) + } + }) + + newgrid.NewButton("CheckDirty()", func() { + if rs.CheckDirty() { + log.Log(WARN, "is dirty") + } else { + log.Log(WARN, "is not dirty") + } + }) + + // rs.TagsW = rs.TagWindow() + + newgrid.NewButton("Show tags", func() { + if rs.TagsW == nil { + log.Warn("error: found rs.TagsW == nil") + rs.TagsW = rs.TagWindow() + return + } + if rs.TagsW.Hidden() { + rs.TagsW.Show() + } else { + rs.TagsW.Show() + } + }) +} diff --git a/commandsBox.go b/commandsBox.go new file mode 100644 index 0000000..865e4b0 --- /dev/null +++ b/commandsBox.go @@ -0,0 +1,97 @@ +package repostatus + +import ( + "go.wit.com/lib/gadgets" + "go.wit.com/log" +) + +func (rs *RepoStatus) drawGitCommands() { + rs.gitCommandsGroup = rs.window.Box().NewGroup("git commands") + newgrid := rs.gitCommandsGroup.NewGrid("gridnuts", 0, 0) + + newgrid.NewButton("update", func() { + rs.Update() + }) + newgrid.NextRow() + + newgrid.NewButton("git pull", func() { + var cmd []string + cmd = append(cmd, "git", "pull") + err, b, output := RunCmd(rs.realPath.String(), cmd) + log.Warn("Did git pull here", err, b, output) + }) + newgrid.NextRow() + + label := "merge " + rs.userWorkingName.String() + " to " + rs.develWorkingName.String() + rs.develMergeB = newgrid.NewButton(label, func() { + rs.Disable() + if rs.RunDevelMergeB() { + log.Warn("THINGS SEEM OK fullAutomation() returned true.") + } else { + log.Warn("THINGS FAILED fullAutomation() returned false") + } + rs.Enable() + }) + + label = "merge " + rs.develWorkingName.String() + " to " + rs.mainWorkingName.String() + rs.mainMergeB = newgrid.NewButton(label, func() { + rs.Disable() + if rs.RunDevelMergeB() { + log.Warn("THINGS SEEM OK fullAutomation() returned true.") + } else { + log.Warn("THINGS FAILED fullAutomation() returned false") + } + rs.Enable() + }) + newgrid.NextRow() + + rs.major = gadgets.NewBasicCombobox(newgrid, "major") + rs.major.Custom = func() { + rs.setTag() + rs.generateCmd() + } + rs.major.Hide() + newgrid.NextRow() + + rs.minor = gadgets.NewBasicCombobox(newgrid, "minor") + rs.minor.Custom = func() { + rs.setTag() + rs.generateCmd() + } + rs.minor.Hide() + newgrid.NextRow() + + rs.revision = gadgets.NewBasicCombobox(newgrid, "revision") + rs.revision.Custom = func() { + rs.setTag() + rs.generateCmd() + } + rs.revision.Hide() + newgrid.NextRow() + + // newgrid.NewLabel("new tag version") + rs.newversion = newgrid.NewLabel("0.0.1") + rs.newversion.Hide() + newgrid.NextRow() + + rs.versionMessage = gadgets.NewBasicEntry(newgrid, "tag message") + rs.versionMessage.Custom = func() { + rs.generateCmd() + } + rs.versionMessage.Hide() + newgrid.NextRow() + + rs.versionCmdOutput = gadgets.NewOneLiner(newgrid, "tag cmd") + rs.versionCmdOutput.Hide() + newgrid.NextRow() + + rs.releaseVersion = newgrid.NewButton("tag and release new version", func() { + rs.Disable() + rs.runReleaseVersionB() + }) + rs.releaseVersion.Hide() + newgrid.NextRow() + + newgrid.Margin() + newgrid.Pad() +} @@ -20,81 +20,14 @@ func (rs *RepoStatus) draw() { rs.drawGitStatus() // display the git branches and options - rs.drawGitBranches() + rs.makeBranchesBox() // show standard git commit and merge controls rs.drawGitCommands() } -func (rs *RepoStatus) drawGitBranches() { - rs.gitBranchesGroup = rs.window.Box().NewGroup("branches") - newgrid := rs.gitBranchesGroup.NewGrid("gridnuts", 2, 2) - - rs.lasttag = gadgets.NewOneLiner(newgrid, "last tag") - - rs.masterBranchVersion = gadgets.NewOneLiner(newgrid, "master") - rs.develBranchVersion = gadgets.NewOneLiner(newgrid, "devel") - rs.userBranchVersion = gadgets.NewOneLiner(newgrid, "user") - - rs.currentBranch = gadgets.NewOneLiner(newgrid, "current branch") - rs.currentVersion = gadgets.NewOneLiner(newgrid, "current version") - - rs.showBranchesButton = newgrid.NewButton("getBranches()", func() { - all := rs.getBranches() - i := len(all) - log.Log(WARN, "branch count =", i) - }) - - rs.checkBranchesButton = newgrid.NewButton("CheckBranches()", func() { - if rs.CheckBranches() { - log.Log(WARN, "Branches are perfect") - } else { - log.Log(WARN, "Branches are not perfect") - } - }) - - newgrid.NewButton("show .git/config", func() { - if rs.gitConfig == nil { - log.Log(WARN, "Nonexistant or damaged .git/config", rs.String()) - return - } - log.Log(WARN, ".git/config:", rs.realPath.String()) - - // The info: - for name, remote := range rs.gitConfig.remotes { - log.Log(WARN, " ", name, "url:", remote.url) - } - for name, branch := range rs.gitConfig.branches { - log.Log(WARN, " ", name, "remote:", branch.remote, "merge", branch.merge) - } - }) - - newgrid.NewButton("CheckDirty()", func() { - if rs.CheckDirty() { - log.Log(WARN, "is dirty") - } else { - log.Log(WARN, "is not dirty") - } - }) - - rs.TagsW = rs.TagWindow() - - newgrid.NewButton("Show tags", func() { - if rs.TagsW == nil { - log.Warn("error: found rs.TagsW == nil") - rs.TagsW = rs.TagWindow() - return - } - if rs.TagsW.Hidden() { - rs.TagsW.Show() - } else { - rs.TagsW.Show() - } - }) -} - func (rs *RepoStatus) drawGitStatus() { - rs.gitStatusGroup = rs.window.Box().NewGroup("What GO Knows It Has") + rs.gitStatusGroup = rs.window.Box().NewGroup("What GIT Knows It Has") newgrid := rs.gitStatusGroup.NewGrid("gridnuts", 2, 2) newgrid.Margin() newgrid.Pad() @@ -109,16 +42,19 @@ func (rs *RepoStatus) drawGitStatus() { rs.develWorkingName.SetValue("devel") rs.userWorkingName = gadgets.NewOneLiner(newgrid, "user working branch") rs.userWorkingName.SetValue("uid") - rs.tagsDrop = gadgets.NewBasicDropdown(newgrid, "all releases") - // git for-each-ref --sort=taggerdate --format '%(tag) ,,,_,,, %(subject)' refs/tags - var cmd []string - cmd = append(cmd, "git", "for-each-ref", "--sort=taggerdate", "--format", "%(tag) %(subject)", "refs/tags") - _, _, output := RunCmd(rs.realPath.String(), cmd) - log.Log(INFO, output) - for _, line := range strings.Split(output, "\n") { - rs.tagsDrop.AddText(line) - } + /* + rs.tagsDrop = gadgets.NewBasicDropdown(newgrid, "all releases") + + // git for-each-ref --sort=taggerdate --format '%(tag) ,,,_,,, %(subject)' refs/tags + var cmd []string + cmd = append(cmd, "git", "for-each-ref", "--sort=taggerdate", "--format", "%(tag) %(subject)", "refs/tags") + _, _, output := rs.RunCmd(cmd) + log.Log(INFO, output) + for _, line := range strings.Split(output, "\n") { + rs.tagsDrop.AddText(line) + } + */ rs.dirtyLabel = gadgets.NewOneLiner(newgrid, "dirty") rs.readOnly = gadgets.NewOneLiner(newgrid, "read only") @@ -202,85 +138,6 @@ func (rs *RepoStatus) runFullAutomation() bool { return true } -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() - }) - - newgrid.NewButton("git pull", func() { - var cmd []string - cmd = append(cmd, "git", "pull") - err, b, output := RunCmd(rs.realPath.String(), cmd) - log.Warn("Did git pull here", err, b, output) - }) - - label := "merge " + rs.userWorkingName.String() + " to " + rs.develWorkingName.String() - rs.develMergeB = newgrid.NewButton(label, func() { - rs.Disable() - if rs.RunDevelMergeB() { - log.Warn("THINGS SEEM OK fullAutomation() returned true.") - } else { - log.Warn("THINGS FAILED fullAutomation() returned false") - } - rs.Enable() - }) - - label = "merge " + rs.develWorkingName.String() + " to " + rs.mainWorkingName.String() - rs.mainMergeB = newgrid.NewButton(label, func() { - rs.Disable() - if rs.RunDevelMergeB() { - log.Warn("THINGS SEEM OK fullAutomation() returned true.") - } else { - log.Warn("THINGS FAILED fullAutomation() returned false") - } - rs.Enable() - }) - - rs.major = gadgets.NewBasicCombobox(newgrid, "major") - rs.major.Custom = func() { - rs.setTag() - rs.generateCmd() - } - rs.major.Hide() - rs.minor = gadgets.NewBasicCombobox(newgrid, "minor") - rs.minor.Custom = func() { - rs.setTag() - rs.generateCmd() - } - rs.minor.Hide() - rs.revision = gadgets.NewBasicCombobox(newgrid, "revision") - rs.revision.Custom = func() { - rs.setTag() - rs.generateCmd() - } - rs.revision.Hide() - - // newgrid.NewLabel("new tag version") - rs.newversion = newgrid.NewLabel("0.0.1") - rs.newversion.Hide() - - rs.versionMessage = gadgets.NewBasicEntry(newgrid, "tag message") - rs.versionMessage.Custom = func() { - rs.generateCmd() - } - rs.versionMessage.Hide() - - rs.versionCmdOutput = gadgets.NewOneLiner(newgrid, "tag cmd") - rs.versionCmdOutput.Hide() - - rs.releaseVersion = newgrid.NewButton("tag and release new version", func() { - rs.Disable() - rs.runReleaseVersionB() - }) - rs.releaseVersion.Hide() - - newgrid.Margin() - newgrid.Pad() -} - var releaseRevision string = "" // over ride the computation of this if a release is being created @@ -54,7 +54,7 @@ func (rs *RepoStatus) getLastTagVersion() string { // out = run(r.path, "git", "describe --tags c871d5ecf051a7dc4e3a77157cdbc0a457eb9ae1") out = run(rs.realPath.String(), "git", lastreal) rs.lasttag.SetValue(out) - rs.tagsDrop.SetText(out) + // rs.tagsDrop.SetText(out) // rs.lastLabel.SetText(out) return out } @@ -65,7 +65,7 @@ func (rs *RepoStatus) populateTags() { for _, tag := range listFiles(tmp) { if rs.tags[tag] == "" { log.Log(INFO, "populateTags() Adding new tag", tag) - rs.tagsDrop.AddText(tag) + // rs.tagsDrop.AddText(tag) rs.tags[tag] = "origin" } } diff --git a/revert.go b/revert.go new file mode 100644 index 0000000..22a6041 --- /dev/null +++ b/revert.go @@ -0,0 +1,45 @@ +package repostatus + +import "go.wit.com/log" + +// reverts master to devel +// used in the unwind process of making GUI releases +func (rs *RepoStatus) RevertMasterToDevel() bool { + if rs.CheckDirty() { + log.Info("sorry, it's still dirty") + return false + } + + curName := rs.GetCurrentBranchName() + mName := rs.GetMasterBranchName() + if curName != mName { + log.Info("repo is not working from main branch", curName, "!=", mName) + return false + } + + log.Info("reset master to devel", curName, rs.String()) + + // git checkout devel + // git branch -D master + // git branch master + // git checkout master + // git push --set-upstream --force origin master + + var all [][]string + all = append(all, []string{"git", "checkout", "devel"}) + all = append(all, []string{"git", "branch", "-D", mName}) + all = append(all, []string{"git", "branch", mName}) + all = append(all, []string{"git", "checkout", mName}) + all = append(all, []string{"git", "push", "--set-upstream", "--force", "origin", mName}) + + // all = append(all, []string{"git", "tag", "--delete", release.version.String()}) + // all = append(all, []string{"git", "push", "--delete", "origin", release.version.String()}) + + if rs.DoAll(all) { + log.Info("EVERYTHING OK. RERELEASED", rs.String()) + return true + } + + log.Info("SOMETHING FAILED") + return false +} @@ -29,7 +29,7 @@ type RepoStatus struct { currentBranch *gadgets.OneLiner currentVersion *gadgets.OneLiner - tagsDrop *gadgets.BasicDropdown + // tagsDrop *gadgets.BasicDropdown lasttag *gadgets.OneLiner masterBranchVersion *gadgets.OneLiner diff --git a/tagWindow.go b/tagWindow.go index 1431312..c92e961 100644 --- a/tagWindow.go +++ b/tagWindow.go @@ -119,7 +119,9 @@ func (tagW *repoTags) newTagBox(box *gui.Node) { tags := []string{"%(tag)", "%(*objectname)", "%(taggerdate:raw)", "%(subject)"} format := strings.Join(tags, "_,,,_") - err, output := tagW.rs.RunCmd([]string{"git", "for-each-ref", "--sort=taggerdate", "--format", format}) + cmd := []string{"git", "for-each-ref", "--sort=taggerdate", "--format", format} + log.Info("RUNNING:", strings.Join(cmd, " ")) + err, output := tagW.rs.RunCmd(cmd) if err != nil { output = "git error_,,,_a_,,,_b_,,,c" } @@ -147,7 +149,17 @@ func (tagW *repoTags) newTagBox(box *gui.Node) { rTag.subject = grid.NewLabel(parts[3]) rTag.deleteB = grid.NewButton("delete", func() { - log.Info("remove tag") + tagversion := parts[0] + log.Info("remove tag", tagversion) + var all [][]string + all = append(all, []string{"git", "tag", "--delete", tagversion}) + all = append(all, []string{"git", "push", "--delete", "origin", tagversion}) + + if tagW.rs.DoAll(all) { + log.Info("TAG DELETED", tagW.rs.String(), tagversion) + } else { + log.Info("TAG DELETE FAILED", tagW.rs.String(), tagversion) + } }) tagW.tags = append(tagW.tags, rTag) @@ -411,3 +411,16 @@ func (rs *RepoStatus) XtermHold(args []string) { log.Info("cmd = xterm", argsX) } } + +func (rs *RepoStatus) DoAll(all [][]string) bool { + for _, cmd := range all { + log.Info("doAll() RUNNING: cmd =", cmd) + err, out := rs.RunCmd(cmd) + log.Info("doAll() err =", err) + log.Info("doAll() out =", out) + if err != nil { + return false + } + } + return true +} |
