submit-patchset/tagWindow.go

105 lines
2.2 KiB
Go

package main
import (
"go.wit.com/gui"
"go.wit.com/log"
"go.wit.com/lib/gadgets"
"go.wit.com/lib/gui/repostatus"
)
var tagW *tagWindow
type tagWindow struct {
win *gadgets.BasicWindow
box *gui.Node
grid *gui.Node
group *gui.Node
allTags []*gitTag
}
type gitTag struct {
rs *repostatus.RepoStatus
hidden bool
}
func makeTagWindow() *tagWindow {
if tagW != nil {
tagW.win.Toggle()
return tagW
}
tagW = new(tagWindow)
tagW.win = gadgets.NewBasicWindow(me.myGui, "git tag tasks")
tagW.win.Custom = func() {
log.Warn("got to close")
}
tagW.win.Make()
tagW.win.StandardClose()
tagW.win.Draw()
tagW.box = tagW.win.Box()
topGrid := tagW.box.RawGrid()
tagW.group = tagW.box.NewGroup("tags")
tagW.grid = tagW.box.RawGrid()
topGrid.NewButton("list all tags", func() {
me.autotypistWindow.Disable()
defer me.autotypistWindow.Enable()
for _, repo := range me.allrepos {
tagsW := repo.status.TagsW
if tagsW == nil {
repo.status.TagWindow()
tagsW = repo.status.TagsW
// tagsW.Prune()
continue
}
allTags := tagsW.ListAll()
for _, t := range allTags {
log.Info("found tag:", t.TagString(), "from", repo.status.String())
}
}
}).SetProgName("TAGSLISTALL")
topGrid.NewButton("delete all dup tags", func() {
me.autotypistWindow.Disable()
defer me.autotypistWindow.Enable()
for _, repo := range me.allrepos {
if repo.String() == "go.wit.com/lib/gadgets" {
// only do log for now
} else {
// continue
}
tagsW := repo.status.TagsW
if tagsW == nil {
repo.status.TagWindow()
tagsW = repo.status.TagsW
continue
}
tagsW.PruneSmart()
deleteTags := tagsW.List()
for _, t := range deleteTags {
tagW.grid.NewLabel(t.TagString())
tagW.grid.NewLabel(repo.status.String())
tagW.grid.NewButton("delete", func() {
tagsW.Delete(t)
})
tagW.grid.NextRow()
if me.autoDryRun.Checked() {
log.Info("delete tag --dry-run:", t.TagString(), "from", repo.status.String())
} else {
log.Info("Deleting tag:", t.TagString(), "from", repo.status.String())
go tagsW.Delete(t)
log.Sleep(1)
}
}
}
})
return tagW
}
func (t *gitTag) Hide() {
t.hidden = true
}