diff options
| author | Jeff Carr <[email protected]> | 2024-12-05 12:29:47 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-12-05 12:29:47 -0600 |
| commit | 816760d1372d6d1922a9916f3150e49f3fd562cd (patch) | |
| tree | 0889b24fabb5d35dc0db53d0bbf71a985427c89b /subitPatches.go | |
| parent | 0463030e80f480f0d38989f4231db8b1651b40bc (diff) | |
developing on this now
Diffstat (limited to 'subitPatches.go')
| -rw-r--r-- | subitPatches.go | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/subitPatches.go b/subitPatches.go new file mode 100644 index 0000000..dead524 --- /dev/null +++ b/subitPatches.go @@ -0,0 +1,240 @@ +package main + +import ( + "path/filepath" + "strconv" + + "go.wit.com/gui" + "go.wit.com/lib/gadgets" + "go.wit.com/lib/gui/repolist" + "go.wit.com/lib/gui/shell" + "go.wit.com/log" +) + +/* +type patch struct { + ref string + giturl string + comment string + rs *repostatus.RepoStatus +} +*/ + +type patchSummary struct { + grid *gui.Node + updateB *gui.Node + docsB *gui.Node + gitPushB *gui.Node + gitPullB *gui.Node + checkB *gui.Node + + // stats + totalOL *gadgets.OneLiner + totalGoOL *gadgets.OneLiner + dirtyOL *gadgets.OneLiner + readonlyOL *gadgets.OneLiner + totalPatchesOL *gadgets.OneLiner + totalUserRepos *gui.Node + totalDevelRepos *gui.Node + totalMasterRepos *gui.Node + totalUserPatches *gui.Node + totalDevelPatches *gui.Node + totalMasterPatches *gui.Node + + // patch set generation + unknownOL *gadgets.BasicEntry + unknownSubmitB *gui.Node + reason *gadgets.BasicEntry + submitB *gui.Node + allp []*repolist.Patch +} + +func submitPatchesBox(box *gui.Node) *patchSummary { + s := new(patchSummary) + group1 := box.NewGroup("Submit Patches Summary") + s.grid = group1.RawGrid() + + s.grid.NewButton("Update Patch Counts", func() { + var repocount, patchcount int + // broken after move to forge protobuf + loop := me.forge.Repos.SortByGoPath() + for loop.Scan() { + repo := loop.Next() + if repo.GetReadOnly() { + continue + } + i, _ := repo.GetMasterPatches() + patchcount += i + if i > 0 { + repocount += 1 + } + } + s.totalMasterPatches.SetText(strconv.Itoa(patchcount) + " patches") + s.totalMasterRepos.SetText(strconv.Itoa(repocount) + " go repos") + + repocount = 0 + patchcount = 0 + // broken after move to forge protobuf + loop = me.forge.Repos.SortByGoPath() + for loop.Scan() { + repo := loop.Next() + if repo.GetReadOnly() { + continue + } + i, _ := repo.GetUserPatches() + patchcount += i + if i > 0 { + repocount += 1 + } + } + s.totalUserPatches.SetText(strconv.Itoa(patchcount) + " patches") + s.totalUserRepos.SetText(strconv.Itoa(repocount) + " go repos") + }) + + /* this used to be the way and should probably be revisited + s.grid.NewButton("Make Patches", func() { + for i, p := range s.allp { + log.Info(i, p.Ref, p.RS.String()) + } + }) + */ + + s.grid.NextRow() + + s.totalOL = gadgets.NewOneLiner(s.grid, "Total") + s.grid.NextRow() + + s.totalGoOL = gadgets.NewOneLiner(s.grid, "Total GO") + 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.grid = group1.RawGrid() + s.grid.NewLabel("") + s.grid.NewLabel("") + s.grid.NewLabel("user to devel") + s.grid.NewLabel("devel to master") + s.grid.NewLabel("master to last tag") + s.grid.NextRow() + + s.grid.NewLabel("total modified") + s.grid.NewLabel("") + s.totalUserRepos = s.grid.NewLabel("x go repos") + s.totalDevelRepos = s.grid.NewLabel("") + s.totalMasterRepos = s.grid.NewLabel("x go repos") + s.grid.NextRow() + + s.totalPatchesOL = gadgets.NewOneLiner(s.grid, "total commits") + s.totalUserPatches = s.grid.NewLabel("x patches") + s.totalDevelPatches = s.grid.NewLabel("") + s.totalMasterPatches = s.grid.NewLabel("x patches") + s.grid.NextRow() + + s.grid.NewLabel("") + s.grid.NewLabel("") + s.grid.NewButton("merge from user", func() { + log.Info("this should make a patchset of your patches") + }) + s.grid.NewButton("merge from devel", func() { + log.Info("this probably should not exist") + }) + s.grid.NextRow() + + group1 = box.NewGroup("Create GUI Patch Set") + s.grid = group1.RawGrid() + s.reason = gadgets.NewBasicEntry(s.grid, "patch name:") + s.reason.Custom = func() { + if s.reason.String() != "" { + s.submitB.Enable() + } else { + s.submitB.Disable() + } + } + s.submitB = s.grid.NewButton("Create Patch Set", func() { + dirname := "submit-patchset.quilt" + patchdir := filepath.Join(me.userHomePwd.String(), dirname) + if shell.Exists(patchdir) { + log.Info("patchset dir already exists", patchdir) + shell.PathRun(me.userHomePwd.String(), []string{"rm", "-rf", dirname}) + } + shell.Mkdir(patchdir) + if !shell.Exists(patchdir) { + log.Info("something went wrong making", patchdir) + return + } + me.repos.View.MakePatchset(patchdir) + }) + s.submitB = s.grid.NewButton("Submit quilt", func() { + log.Info("do a submit here") + }) + // disable these until there are not dirty repos + s.reason.Disable() + s.submitB.Disable() + s.grid.NextRow() + + s.unknownOL.Disable() + s.unknownSubmitB.Disable() + s.grid.NextRow() + + return s +} + +// does not run any commands +func (s *patchSummary) Update() { + var total, totalgo, dirty, readonly int + var userT, develT, masterT int + // var userP, develP, masterP int + // broken after move to forge protobuf + loop := me.forge.Repos.SortByGoPath() + for loop.Scan() { + repo := loop.Next() + total += 1 + if repo.IsDirty() { + dirty += 1 + } + if repo.GetReadOnly() { + readonly += 1 + // don't count these in any further stats + continue + } + // compute which GUI repos are out of sync with master + userV := repo.GetUserVersion() + develV := repo.GetDevelVersion() + masterV := repo.GetMasterVersion() + lastV := repo.GetLastTagVersion() + if userV != develV { + userT += 1 + } + if develV != masterV { + log.Info("develV != masterV", develV, masterV, repo.GetGoPath()) + develT += 1 + } + if masterV != lastV { + masterT += 1 + } + } + s.totalOL.SetText(strconv.Itoa(total) + " repos") + s.totalGoOL.SetText(strconv.Itoa(totalgo) + " repos") + s.dirtyOL.SetText(strconv.Itoa(dirty) + " repos") + s.readonlyOL.SetText(strconv.Itoa(readonly) + " repos") + + s.totalUserRepos.SetText(strconv.Itoa(userT) + " repos") + s.totalDevelRepos.SetText(strconv.Itoa(develT) + " repos") + s.totalMasterRepos.SetText(strconv.Itoa(masterT) + " repos") + + if dirty == 0 { + s.reason.Enable() + s.submitB.Enable() + s.unknownOL.Enable() + s.unknownSubmitB.Enable() + } else { + s.reason.Disable() + s.submitB.Enable() + s.unknownOL.Enable() + s.unknownSubmitB.Enable() + } +} |
