summaryrefslogtreecommitdiff
path: root/tagWindow.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-02-12 06:23:31 -0600
committerJeff Carr <[email protected]>2024-02-12 06:23:31 -0600
commitba4051cb0c0f253a41d2b7675fc4e37872230df4 (patch)
treee9c4612fe97d91a00cfd69b81869fd5efdbca2fe /tagWindow.go
parent2b172338f61d0f0b003b5c8198b979b24d3b60ac (diff)
smarter tag window
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'tagWindow.go')
-rw-r--r--tagWindow.go63
1 files changed, 45 insertions, 18 deletions
diff --git a/tagWindow.go b/tagWindow.go
index 5e51782..1431312 100644
--- a/tagWindow.go
+++ b/tagWindow.go
@@ -23,6 +23,9 @@ type repoTag struct {
// the .git/ref date
date *gui.Node
+ // the tag comment
+ subject *gui.Node
+
// a button to delete the tag
deleteB *gui.Node
}
@@ -43,17 +46,27 @@ type repoTags struct {
tags []*repoTag
}
+func (tw *repoTags) Hidden() bool {
+ return tw.window.Hidden()
+}
+
+func (tw *repoTags) Show() {
+ log.Info("tw *repoTags Show()")
+ tw.window.Show()
+}
+
+func (tw *repoTags) Hide() {
+ log.Info("tw *repoTags Hide()")
+ tw.window.Hide()
+}
+
func (rs *RepoStatus) TagWindow() *repoTags {
// return the window if it was already created
- if rs.TagsW != nil {
- rs.TagsW.window.Toggle()
- return rs.TagsW
- }
tags := new(repoTags)
rs.TagsW = tags
tags.rs = rs
- tags.window = gadgets.RawBasicWindow("tags " + rs.String())
+ tags.window = gadgets.RawBasicWindow("tags " + rs.String()).Make()
vbox := tags.window.Box()
tags.newTagBox(vbox)
@@ -63,14 +76,21 @@ func (rs *RepoStatus) TagWindow() *repoTags {
func (tagW *repoTags) newTagBox(box *gui.Node) {
tagW.group = box.NewGroup(".git tags for " + tagW.rs.String())
- tagW.group.NewButton("prune tags", func() {
- tagW.Prune()
- })
- tagW.group.NewButton("show all", func() {
- for _, t := range tagW.tags {
- t.Show()
+ // tagW.group.NewButton("prune tags", func() {
+ // tagW.Prune()
+ // })
+ var dups *gui.Node
+
+ dups = tagW.group.NewCheckbox("Show duplicate tags").SetChecked(false)
+ dups.Custom = func() {
+ if dups.Checked() {
+ tagW.Prune()
+ } else {
+ for _, t := range tagW.tags {
+ t.Show()
+ }
}
- })
+ }
tagW.group.NewButton("delete all", func() {
for i, t := range tagW.tags {
if t.hidden {
@@ -82,22 +102,22 @@ func (tagW *repoTags) newTagBox(box *gui.Node) {
}
})
- grid := tagW.group.NewGrid("tags", 4, 1)
+ grid := tagW.group.NewGrid("tags", 0, 0)
tagW.grid = grid
grid.NewLabel("version")
grid.NewLabel("ref")
grid.NewLabel("date")
- grid.NewLabel("delete")
+ grid.NewLabel("release subject")
// works like a typerwriter
- // grid.NextRow()
+ grid.NextRow()
// git tag --list --sort=taggerdate
// git for-each-ref --sort=taggerdate --format '%(tag) %(*objectname) %(taggerdate)'
// git rev-parse HEAD
// if last tag == HEAD, then remove it
- tags := []string{"%(tag)", "%(*objectname)", "%(taggerdate:raw)"}
+ tags := []string{"%(tag)", "%(*objectname)", "%(taggerdate:raw)", "%(subject)"}
format := strings.Join(tags, "_,,,_")
err, output := tagW.rs.RunCmd([]string{"git", "for-each-ref", "--sort=taggerdate", "--format", format})
if err != nil {
@@ -120,14 +140,19 @@ func (tagW *repoTags) newTagBox(box *gui.Node) {
rTag := new(repoTag)
rTag.tag = grid.NewLabel(parts[0])
rTag.ref = grid.NewEntrybox(parts[1])
- rTag.date = grid.NewLabel(parts[2])
+
+ stamp, dur := getDateStamp(parts[2]) //
+ rTag.date = grid.NewLabel(stamp)
+ grid.NewLabel(dur)
+
+ rTag.subject = grid.NewLabel(parts[3])
rTag.deleteB = grid.NewButton("delete", func() {
log.Info("remove tag")
})
tagW.tags = append(tagW.tags, rTag)
// works like a typerwriter
- // grid.NextRow()
+ grid.NextRow()
}
// reverse the git order
// slices.Reverse(rtags.tags)
@@ -260,6 +285,7 @@ func (rt *repoTag) Hide() {
rt.tag.Hide()
rt.ref.Hide()
rt.date.Hide()
+ rt.subject.Hide()
rt.deleteB.Hide()
}
@@ -268,5 +294,6 @@ func (rt *repoTag) Show() {
rt.tag.Show()
rt.ref.Show()
rt.date.Show()
+ rt.subject.Show()
rt.deleteB.Show()
}