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() loop := me.repos.View.ReposSortByName() for loop.Scan() { repo := loop.Repo() allTags := repo.AllTags() for _, t := range allTags { log.Info("found tag:", t.TagString(), "from", repo.Name()) } } }).SetProgName("TAGSLISTALL") topGrid.NewButton("delete all dup tags", func() { me.autotypistWindow.Disable() defer me.autotypistWindow.Enable() loop := me.repos.View.ReposSortByName() for loop.Scan() { repo := loop.Repo() if repo.GoPath() == "go.wit.com/lib/gadgets" { // only do log for now } else { // continue } tagsW := repo.TagsBox() tagsW.PruneSmart() deleteTags := tagsW.List() for _, t := range deleteTags { tagW.grid.NewLabel(t.TagString()) tagW.grid.NewLabel(repo.Name()) tagW.grid.NewButton("delete", func() { repo.DeleteTag(t) }) tagW.grid.NextRow() if me.autoDryRun.Checked() { log.Info("delete tag --dry-run:", t.TagString(), "from", repo.Name()) } else { log.Info("Deleting tag:", t.TagString(), "from", repo.Name()) go repo.DeleteTag(t) log.Sleep(1) } } } }) return tagW } func (t *gitTag) Hide() { t.hidden = true }