summaryrefslogtreecommitdiff
path: root/windowViewPatch.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-29 11:31:42 -0600
committerJeff Carr <[email protected]>2025-01-29 12:18:16 -0600
commit152a25591d5288c7a2391ddc640bf6a689988b29 (patch)
treec950ba84ef38d95576fb364f28a47aaf7770a35a /windowViewPatch.go
parent54b50299f394b45da0f46bf47715cac79ca837f0 (diff)
make a seperate window to maintain the patches
Diffstat (limited to 'windowViewPatch.go')
-rw-r--r--windowViewPatch.go161
1 files changed, 0 insertions, 161 deletions
diff --git a/windowViewPatch.go b/windowViewPatch.go
deleted file mode 100644
index d4b9689..0000000
--- a/windowViewPatch.go
+++ /dev/null
@@ -1,161 +0,0 @@
-package main
-
-import (
- "sync"
-
- "go.wit.com/lib/gadgets"
- "go.wit.com/lib/protobuf/forgepb"
- "go.wit.com/lib/protobuf/gitpb"
- "go.wit.com/log"
-
- "go.wit.com/gui"
-)
-
-type patchWindow struct {
- once sync.Once // only init() the window once
- win *gadgets.BasicWindow // the patches window
- stack *gui.Node // the top box set as vertical
- shelf *gui.Node // the first box in the stack, set as horizontal
- grid *gui.Node // the list of available patches
- summary *patchSummary // summary of current patches
- setgrid *gui.Node // the list of each patchset
- pset *forgepb.Patchset // the patchset in question
-}
-
-// todo: autogenerate these or make them standared 'gui' package functions
-// make this an go interface somehow
-
-// is the window hidden right now?
-func (w *patchWindow) Hidden() bool {
- return w.win.Hidden()
-}
-
-// switches between the window being visable or hidden on the desktop
-func (w *patchWindow) Toggle() {
- if w.Hidden() {
- w.Show()
- } else {
- w.Hide()
- }
-}
-
-// hides the window completely
-func (w *patchWindow) Show() {
- w.win.Show()
-}
-
-func (w *patchWindow) Hide() {
- w.win.Hide()
-}
-
-// should be the first box/widget in the window
-// greys out the window to the user
-func (w *patchWindow) Disable() {
- w.stack.Disable()
-}
-
-func (w *patchWindow) Enable() {
- w.stack.Enable()
-}
-
-// you can only have one of these
-func makePatchWindow(pset *forgepb.Patchset) *patchWindow {
- pw := new(patchWindow)
-
- // sync.Once()
- pw.win = gadgets.RawBasicWindow("Patcheset for " + pset.Name + " (" + pset.Comment + ")")
- pw.win.Make()
-
- pw.stack = pw.win.Box().NewBox("bw vbox", false)
- // me.reposwin.Draw()
- pw.win.Custom = func() {
- // sets the hidden flag to false so Toggle() works
- pw.win.Hide()
- }
-
- grid := pw.stack.NewGrid("", 0, 0)
-
- grid.NewLabel(pset.GitAuthorName)
- grid.NewLabel(pset.GitAuthorEmail)
- grid.NextRow()
- grid.NewLabel("start branch: " + pset.StartBranchName)
- grid.NewLabel(pset.StartBranchHash)
- grid.NextRow()
- grid.NewLabel("end branch: " + pset.EndBranchName)
- grid.NewLabel(pset.EndBranchHash)
- grid.NextRow()
-
- grid.NewButton("Extract files to disk", func() {
- if err := savePatchset(pset); err != nil {
- log.Info("Save err:", err)
- return
- }
- })
- grid.NewButton("Apply with git am", func() {
- if _, _, _, err := IsEverythingOnDevel(); err != nil {
- log.Info("You can only apply patches to the devel branch")
- return
- }
- if IsAnythingDirty() {
- log.Info("You can't apply patches when repos are dirty")
- me.forge.PrintHumanTable(me.found)
- return
- }
- if argv.Force {
- applyPatchset(pset)
- }
- })
-
- g := pw.stack.NewGroup("PatchSet List")
-
- // make a grid and a header
- filegrid := g.NewGrid("", 0, 0)
- filegrid.NewLabel("repo")
- filegrid.NewLabel("patch name")
- filegrid.NewLabel("Applied in current branch?")
- filegrid.NewLabel("start hash")
- filegrid.NextRow()
-
- // add the patches to the grid
- pw.addPatchset(filegrid, pset)
- return pw
-}
-
-func (r *patchWindow) addPatchset(grid *gui.Node, pset *forgepb.Patchset) {
- repomap := make(map[*gitpb.Repo][]*forgepb.Patch)
- repohash := make(map[*gitpb.Repo]string)
-
- // sort patches by repo namespace
- all := pset.Patches.SortByFilename()
- for all.Scan() {
- p := all.Next()
- s := p.RepoNamespace
- repo := me.forge.FindByGoPath(s)
- if repo == nil {
- log.Info("COULD NOT FIND", s)
- continue
- }
- repomap[repo] = append(repomap[repo], p)
- repohash[repo] = p.StartHash
- }
-
- // var repo *gitpb.Repo
-
- for repo, patches := range repomap {
- log.Info(repo.GetGoPath())
- grid.NewLabel(repo.GetGoPath())
-
- for i, p := range patches {
- log.Info(i, p.Filename)
- grid.NewLabel(p.Comment)
- grid.NewLabel("in current branch?")
- break
- }
- hash := repohash[repo]
- grid.NewLabel(hash)
- grid.NewButton("View", func() {
- log.Info("todo: show patches for repo", repo.GetGoPath())
- })
- grid.NextRow()
- }
-}