forge/windowPatches.go

284 lines
6.4 KiB
Go
Raw Normal View History

package main
import (
"strconv"
"go.wit.com/gui"
"go.wit.com/lib/gadgets"
2024-02-17 08:38:44 -06:00
"go.wit.com/lib/gui/repolist"
"go.wit.com/log"
)
2024-02-19 21:11:07 -06:00
/*
2024-02-13 16:18:37 -06:00
type patch struct {
ref string
giturl string
comment string
rs *repostatus.RepoStatus
}
2024-02-19 21:11:07 -06:00
*/
2024-02-13 16:18:37 -06:00
type patchSummary struct {
2024-02-13 20:29:14 -06:00
grid *gui.Node
updateB *gui.Node
docsB *gui.Node
gitPushB *gui.Node
gitPullB *gui.Node
checkB *gui.Node
2024-02-18 07:24:56 -06:00
// stats
totalOL *gadgets.OneLiner
// totalGoOL *gadgets.OneLiner
2024-02-18 07:24:56 -06:00
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
2024-02-18 07:24:56 -06:00
// patch set generation
2024-02-20 14:44:12 -06:00
unknownOL *gadgets.BasicEntry
2024-02-13 16:18:37 -06:00
unknownSubmitB *gui.Node
2024-02-18 07:24:56 -06:00
reason *gadgets.BasicEntry
submitB *gui.Node
2024-02-19 21:11:07 -06:00
allp []*repolist.Patch
}
func submitPatchesBox(box *gui.Node) *patchSummary {
s := new(patchSummary)
group1 := box.NewGroup("Patch Summary")
s.grid = group1.RawGrid()
2024-12-23 03:27:29 -06:00
/*
s.grid.NewButton("Update Patch Counts", func() {
var repocount, patchcount int
// broken after move to forge protobuf
all := me.forge.Repos.SortByFullPath()
for all.Scan() {
repo := all.Next()
if repo.GetReadOnly() {
continue
}
i, _ := repo.GetMasterPatches()
patchcount += i
if i > 0 {
repocount += 1
}
}
2024-12-23 03:27:29 -06:00
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
all = me.forge.Repos.SortByFullPath()
for all.Scan() {
repo := all.Next()
if repo.GetReadOnly() {
continue
}
i, _ := repo.GetUserPatches()
patchcount += i
if i > 0 {
repocount += 1
}
}
2024-12-23 03:27:29 -06:00
s.totalUserPatches.SetText(strconv.Itoa(patchcount) + " patches")
s.totalUserRepos.SetText(strconv.Itoa(repocount) + " go repos")
})
*/
2024-02-13 20:29:14 -06:00
/* this used to be the way and should probably be revisited
2024-02-20 14:58:51 -06:00
s.grid.NewButton("Make Patches", func() {
2024-02-20 10:58:58 -06:00
for i, p := range s.allp {
log.Info(i, p.Ref, p.RS.String())
}
2024-02-13 20:29:14 -06:00
})
*/
2024-02-13 20:29:14 -06:00
2024-02-18 07:24:56 -06:00
s.grid.NextRow()
s.totalOL = gadgets.NewOneLiner(s.grid, "Total")
s.grid.NextRow()
// s.totalGoOL = gadgets.NewOneLiner(s.grid, "Total GO")
// s.grid.NextRow()
2024-02-17 15:47:46 -06:00
s.dirtyOL = gadgets.NewOneLiner(s.grid, "dirty")
s.grid.NextRow()
s.readonlyOL = gadgets.NewOneLiner(s.grid, "read-only")
s.grid.NextRow()
2024-02-20 10:58:58 -06:00
// 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")
2024-02-20 10:58:58 -06:00
s.totalUserPatches = s.grid.NewLabel("x patches")
s.totalDevelPatches = s.grid.NewLabel("")
s.totalMasterPatches = s.grid.NewLabel("x patches")
2024-02-18 07:24:56 -06:00
s.grid.NextRow()
2024-12-23 03:27:29 -06:00
/*
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("Submit Patch Set")
2024-02-18 07:24:56 -06:00
s.grid = group1.RawGrid()
s.reason = gadgets.NewBasicEntry(s.grid, "set name:")
s.reason.Custom = func() {
if s.reason.String() != "" {
s.submitB.Enable()
} else {
s.submitB.Disable()
}
}
s.submitB = s.grid.NewButton("Submit", func() {
2024-12-29 21:36:39 -06:00
if err := sendDevelDiff(s.reason.String()); err != nil {
log.Info("sending patches failed", err)
} else {
log.Info("sent patch set ok")
}
})
2025-01-05 02:01:15 -06:00
2025-01-05 04:54:05 -06:00
s.grid.NewButton("List Patchsets", func() {
2024-12-23 11:15:16 -06:00
listPatches()
})
2025-01-05 02:01:15 -06:00
2025-01-05 04:54:05 -06:00
s.grid.NewButton("Show Latest Patchset", func() {
2025-01-05 02:01:15 -06:00
lastp := lastPatch()
pset, err := getPatch(lastp)
if err != nil {
return
}
2025-01-05 04:54:05 -06:00
if !dumpPatchset(pset) {
log.Info("some patches are bad")
return
}
if IsAnythingDirty() {
log.Info("You can't apply patches when repos are dirty")
doCobol()
return
}
})
s.grid.NewButton("Apply Latest Patchset", func() {
lastp := lastPatch()
pset, err := getPatch(lastp)
if err != nil {
return
}
if IsAnythingDirty() {
log.Info("You can't apply patches when repos are dirty")
doCobol()
return
}
applyPatchset(pset)
2025-01-05 02:01:15 -06:00
})
2024-12-23 03:27:29 -06:00
s.grid.NewButton("Show Repos", func() {
s.Update()
if me.repos.Hidden() {
me.repos.Show()
} else {
me.repos.Hide()
}
})
/*
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()
2024-02-20 10:58:58 -06:00
s.grid.NextRow()
2024-12-11 18:50:14 -06:00
// s.unknownOL.Disable()
// s.unknownSubmitB.Disable()
2024-02-20 10:58:58 -06:00
s.grid.NextRow()
return s
}
2024-02-20 10:58:58 -06:00
// does not run any commands
func (s *patchSummary) Update() {
var total, dirty, readonly int
2024-02-18 07:24:56 -06:00
var userT, develT, masterT int
// var userP, develP, masterP int
2024-12-02 15:45:06 -06:00
// broken after move to forge protobuf
2024-12-17 06:36:00 -06:00
all := me.forge.Repos.SortByFullPath()
2024-12-11 19:32:04 -06:00
for all.Scan() {
repo := all.Next()
total += 1
2024-12-02 15:45:06 -06:00
if repo.IsDirty() {
2024-02-20 10:58:58 -06:00
dirty += 1
}
2024-12-02 15:45:06 -06:00
if repo.GetReadOnly() {
readonly += 1
// don't count these in any further stats
continue
}
// compute which GUI repos are out of sync with master
2024-12-02 15:45:06 -06:00
userV := repo.GetUserVersion()
develV := repo.GetDevelVersion()
masterV := repo.GetMasterVersion()
lastV := repo.GetLastTagVersion()
2024-02-18 07:24:56 -06:00
if userV != develV {
userT += 1
}
if develV != masterV {
2024-12-02 15:45:06 -06:00
log.Info("develV != masterV", develV, masterV, repo.GetGoPath())
2024-02-18 07:24:56 -06:00
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")
2024-02-18 07:24:56 -06:00
s.totalUserRepos.SetText(strconv.Itoa(userT) + " repos")
s.totalDevelRepos.SetText(strconv.Itoa(develT) + " repos")
s.totalMasterRepos.SetText(strconv.Itoa(masterT) + " repos")
2024-02-20 14:44:12 -06:00
if dirty == 0 {
s.reason.Enable()
s.submitB.Enable()
2024-12-11 18:50:14 -06:00
// s.unknownOL.Enable()
// s.unknownSubmitB.Enable()
2024-02-20 14:44:12 -06:00
} else {
// s.reason.Disable()
2024-02-20 14:44:12 -06:00
s.submitB.Enable()
2024-12-11 18:50:14 -06:00
// s.unknownOL.Enable()
// s.unknownSubmitB.Enable()
2024-02-20 14:44:12 -06:00
}
}