Skip to content

Commit 7a92d73

Browse files
committed
refactor(tagcmd): improve tag generation logic and exit handling
1 parent 8afbbcc commit 7a92d73

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

cmds/tagcmd/cmd.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,19 @@ func New() *cli.Command {
2222
defer recovery.Exit()
2323
var p = tea.NewProgram(initialModel())
2424
m := assert.Must1(p.Run()).(model)
25-
ver := utils.GetNextTag(m.selected)
25+
var tags = utils.GetGitTags()
26+
ver := utils.GetNextTag(m.selected, tags)
2627
if m.selected == "release" {
27-
ver = ver.Core()
28+
ver = utils.GetNextReleaseTag(tags)
2829
}
2930

3031
tagName := "v" + strings.TrimPrefix(ver.Original(), "v")
3132
var p1 = tea.NewProgram(InitialTextInputModel(tagName))
3233
m1 := assert.Must1(p1.Run()).(model2)
34+
if m1.exit {
35+
return nil
36+
}
37+
3338
tagName = m1.Value()
3439
_, err := semver.NewVersion(tagName)
3540
if err != nil {

cmds/tagcmd/ui.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package tagcmd
33
import (
44
"fmt"
55
"log/slog"
6-
6+
77
"github.com/charmbracelet/bubbles/spinner"
88
"github.com/charmbracelet/bubbles/textinput"
99
tea "github.com/charmbracelet/bubbletea"
@@ -112,6 +112,7 @@ func (m model1) View() string {
112112

113113
type model2 struct {
114114
textInput textinput.Model
115+
exit bool
115116
}
116117

117118
// sanitizeInput verifies that an input text string gets validated
@@ -151,6 +152,7 @@ func (m model2) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
151152
case tea.KeyEnter:
152153
return m, tea.Quit
153154
case tea.KeyCtrlC, tea.KeyEsc:
155+
m.exit = true
154156
return m, tea.Quit
155157
}
156158
}

utils/util.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,15 @@ func GetGitTags() []*semver.Version {
3434
return versions
3535
}
3636

37-
func GetNextTag(pre string) *semver.Version {
38-
var tags = GetGitTags()
39-
var maxVer = GetGitMaxTag(tags)
37+
func GetNextReleaseTag(tags []*semver.Version) *semver.Version {
38+
var curMaxVer = typex.DoBlock1(func() *semver.Version {
39+
return lo.MaxBy(tags, func(a *semver.Version, b *semver.Version) bool { return a.Compare(b) > 0 })
40+
})
41+
42+
return curMaxVer.Core()
43+
}
44+
45+
func GetNextTag(pre string, tags []*semver.Version) *semver.Version {
4046
var preData = fmt.Sprintf("-%s.", pre)
4147
var curMaxVer = typex.DoBlock1(func() *semver.Version {
4248
preTags := lo.Filter(tags, func(item *semver.Version, index int) bool { return strings.Contains(item.String(), preData) })
@@ -45,11 +51,11 @@ func GetNextTag(pre string) *semver.Version {
4551
})
4652

4753
var ver string
48-
if curMaxVer != nil && curMaxVer.GreaterThan(maxVer) {
54+
if curMaxVer != nil {
4955
ver = strings.ReplaceAll(curMaxVer.Prerelease(), fmt.Sprintf("%s.", pre), "")
5056
ver = fmt.Sprintf("v%s-%s.%d", curMaxVer.Core().String(), pre, assert.Must1(strconv.Atoi(ver))+1)
5157
} else {
52-
ver = fmt.Sprintf("v%s-%s.1", maxVer.Core().String(), pre)
58+
ver = fmt.Sprintf("v%s-%s.1", GetNextReleaseTag(tags).String(), pre)
5359
}
5460
return assert.Exit1(semver.NewSemver(ver))
5561
}

0 commit comments

Comments
 (0)