list the patches

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-02-13 12:54:32 -06:00
parent 74ce202f73
commit 6c595d32f7
4 changed files with 120 additions and 10 deletions

View File

@ -32,7 +32,7 @@ func main() {
vbox2 := box.NewVerticalBox("BOX2") vbox2 := box.NewVerticalBox("BOX2")
globalBuildOptions(vbox2) globalBuildOptions(vbox2)
summaryBox(vbox2) me.summary = summaryBox(vbox2)
globalResetOptions(box) globalResetOptions(box)

View File

@ -67,6 +67,11 @@ type autoType struct {
// delete ~/go/src & ~/go/pkg buttons // delete ~/go/src & ~/go/pkg buttons
deleteGoSrcPkgB *gui.Node deleteGoSrcPkgB *gui.Node
// displays a summary of all the repos
// has total dirty, total read-only
// total patches, etc
summary *develSummary
} }
type repo struct { type repo struct {

View File

@ -5,23 +5,48 @@ import (
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
"strconv"
"strings"
"go.wit.com/gui" "go.wit.com/gui"
"go.wit.com/lib/gadgets"
"go.wit.com/lib/gui/repostatus"
"go.wit.com/lib/gui/shell" "go.wit.com/lib/gui/shell"
"go.wit.com/log" "go.wit.com/log"
// "go.wit.com/gui/gadgets" // "go.wit.com/gui/gadgets"
) )
func summaryBox(box *gui.Node) { type develSummary struct {
group1 := box.NewGroup("Repository Summary") grid *gui.Node
grid := group1.RawGrid() updateB *gui.Node
docsB *gui.Node
grid.NewButton("Show Repository Window", func() { totalOL *gadgets.OneLiner
globalDisplaySetRepoState() dirtyOL *gadgets.OneLiner
readonlyOL *gadgets.OneLiner
totalPatchesOL *gadgets.OneLiner
allp []*patch
}
func summaryBox(box *gui.Node) *develSummary {
s := new(develSummary)
group1 := box.NewGroup("Development Branch Summary")
s.grid = group1.RawGrid()
s.updateB = s.grid.NewButton("Update Stats", func() {
// globalDisplaySetRepoState()
// reposwin.Toggle() // reposwin.Toggle()
s.Update()
}) })
grid.NewButton("open docs (localhost:8080)", func() { s.updateB = s.grid.NewButton("List Patches", func() {
for i, p := range s.allp {
log.Info(i, p.ref, p.rs.String())
}
})
s.docsB = s.grid.NewButton("open docs (localhost:8080)", func() {
me.autotypistWindow.Disable() me.autotypistWindow.Disable()
defer me.autotypistWindow.Enable() defer me.autotypistWindow.Enable()
@ -54,4 +79,84 @@ func summaryBox(box *gui.Node) {
shell.Run([]string{"ping", "-c", "3", "git.wit.org"}) shell.Run([]string{"ping", "-c", "3", "git.wit.org"})
shell.OpenBrowser("http://localhost:8080") shell.OpenBrowser("http://localhost:8080")
}) })
s.grid.NextRow()
s.totalOL = gadgets.NewOneLiner(s.grid, "Total")
s.grid.NextRow()
s.dirtyOL = gadgets.NewOneLiner(s.grid, "dirty")
s.grid.NextRow()
s.readonlyOL = gadgets.NewOneLiner(s.grid, "read-only")
s.grid.NextRow()
s.totalPatchesOL = gadgets.NewOneLiner(s.grid, "total commits")
s.grid.NextRow()
return s
}
func (s *develSummary) Update() {
var total, dirty, readonly int
for _, repo := range me.allrepos {
total += 1
if repo.status.CheckDirty() {
dirty += 1
}
if repo.status.ReadOnly() {
readonly += 1
}
}
s.totalOL.SetText(strconv.Itoa(total) + " repos")
s.dirtyOL.SetText(strconv.Itoa(dirty) + " repos")
s.readonlyOL.SetText(strconv.Itoa(readonly) + " repos")
p, allp := s.GetPatches()
if s.allp == nil {
s.allp = make([]*patch, 0, 0)
s.allp = append(s.allp, allp...)
}
s.totalPatchesOL.SetText(strconv.Itoa(p) + " patches")
}
type patch struct {
ref string
comment string
rs *repostatus.RepoStatus
}
func (s *develSummary) GetPatches() (int, []*patch) {
var patchcount int
patches := make([]*patch, 0, 0)
for _, repo := range me.allrepos {
// git log --oneline devel..jcarr
userv := repo.status.GetUserVersion()
develv := repo.status.GetDevelVersion()
usern := repo.status.GetUserBranchName()
develn := repo.status.GetDevelBranchName()
if userv == develv {
// log.Info("skipping unchanged repo", repo.String())
} else {
// log.Info("repo userv, develv", userv, develv)
gitcmd := []string{"git", "log", "--oneline", develn + ".." + usern}
// log.Info("Run:", gitcmd)
err, output := repo.status.RunCmd(gitcmd)
if err == nil {
// patches := strings.Split(output, "\n")
for _, line := range strings.Split(output, "\n") {
parts := strings.Split(line, " ")
newp := new(patch)
newp.rs = repo.status
newp.ref = parts[0]
newp.comment = strings.Join(parts[1:], " ")
log.Info("patch:", line, newp.rs.String())
patchcount += 1
patches = append(patches, newp)
}
} else {
log.Info("git failed err=", err)
}
}
}
return patchcount, patches
} }