diff options
Diffstat (limited to 'submitPatches.go')
| -rw-r--r-- | submitPatches.go | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/submitPatches.go b/submitPatches.go new file mode 100644 index 0000000..510479c --- /dev/null +++ b/submitPatches.go @@ -0,0 +1,134 @@ +package main + +import ( + "strconv" + "strings" + + "go.wit.com/gui" + "go.wit.com/lib/gadgets" + "go.wit.com/lib/gui/repostatus" + "go.wit.com/log" +) + +type develSummary struct { + grid *gui.Node + updateB *gui.Node + docsB *gui.Node + + totalOL *gadgets.OneLiner + dirtyOL *gadgets.OneLiner + readonlyOL *gadgets.OneLiner + totalPatchesOL *gadgets.OneLiner + + allp []*patch +} + +func submitPatchesBox(box *gui.Node) *develSummary { + s := new(develSummary) + group1 := box.NewGroup("Submit Patches Summary") + s.grid = group1.RawGrid() + + s.updateB = s.grid.NewButton("Update Stats", func() { + // globalDisplaySetRepoState() + // reposwin.Toggle() + s.Update() + }) + + s.updateB = s.grid.NewButton("List Patches", func() { + for i, p := range s.allp { + log.Info(i, p.ref, p.rs.String()) + } + }) + + s.updateB = s.grid.NewButton("Check repos are working", func() { + for _, repo := range me.allrepos { + log.Info("Check repo here:", repo.String()) + return + } + }) + + 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...) + } + if dirty == 0 { + s.totalPatchesOL.SetText(strconv.Itoa(p) + " patches") + } else { + s.totalPatchesOL.SetText(strconv.Itoa(p) + " patches + ? dirty") + } +} + +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 +} |
