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 }