We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
2 parents a87b66a + 6049caa commit 9f8fc60Copy full SHA for 9f8fc60
version/git.go
@@ -124,14 +124,25 @@ func getTagMap(repo *git.Repository, match func(string) bool) (map[string]Tag, e
124
if err != nil {
125
return nil
126
}
127
+ tagName := ref.Name().Short()
128
+ if !match(tagName) {
129
+ return nil
130
+ }
131
hash := commit.Hash.String()
- if c, ok := result[hash]; ok && !commit.Committer.When.After(c.When) {
132
+ c, ok := result[hash]
133
+ if !ok {
134
+ result[hash] = Tag{Name: tagName, When: commit.Committer.When}
135
136
- tagName := ref.Name().Short()
- if match(tagName) {
137
+ // two tags on the same commit, select the larger one.
138
+ h0 := RepoHead{c.Name, 0, hash}
139
+ h1 := RepoHead{tagName, 0, hash}
140
+ v0, err0 := NewFromHead(&h0, "")
141
+ v1, err1 := NewFromHead(&h1, "")
142
+ if err0 != nil || (err1 == nil && v1.Compare(&v0) > 0) {
143
result[hash] = Tag{Name: tagName, When: commit.Committer.When}
144
145
146
default:
147
return err
148
version/version.go
@@ -89,6 +89,31 @@ type Version struct {
89
Meta string
90
91
92
+// Return 0 if both versions are equal
93
+// Compares two versions. It returns
94
+// - 0 if both versions are equal
95
+// - some positive number if v > o
96
+// - some negative number if v < o
97
+func (v Version) Compare(o *Version) int {
98
+ if v.Major != o.Major {
99
+ return v.Major - o.Major
100
101
+ if v.Minor != o.Minor {
102
+ return v.Minor - o.Minor
103
104
+ if v.Patch != o.Patch {
105
+ return v.Patch - o.Patch
106
107
+ if v.Commits != o.Commits {
108
+ return v.Commits - o.Commits
109
110
+ if v.Meta != o.Meta {
111
+ return strings.Compare(v.Meta, o.Meta)
112
113
+ // alphabetic order
114
+ return strings.Compare(v.String(), o.String())
115
+}
116
+
117
// BumpTo increases the version to the next patch/minor/major version. The version components with
118
// lower priority than the update target will be reset to zero.
119
//
version/version_test.go
@@ -210,3 +210,16 @@ func TestParseRelease(t *testing.T) {
210
require.NoError(t, target.Set("major"))
211
assert.Equal(t, Major, target)
212
213
214
+func TestVersionCompare(t *testing.T) {
215
+ v := Version{Major: 1, Minor: 2, Patch: 3}
216
+ assert.Equal(t, v.Compare(&Version{Major: 1, Minor: 3, Patch: 0}), -1)
217
+ assert.Equal(t, v.Compare(&Version{Major: 1, Minor: 0, Patch: 0}), 2)
218
+ assert.Equal(t, v.Compare(&Version{Major: 1, Minor: 2, Patch: 3}), 0)
219
220
221
+ v = Version{Major: 1, Minor: 2, Patch: 3, Meta: "dev.2"}
222
+ assert.Equal(t, v.Compare(&Version{Major: 1, Minor: 2, Patch: 3, Meta: "dev.1"}), 1)
223
+ assert.Equal(t, v.Compare(&Version{Major: 1, Minor: 2, Patch: 3, Meta: "dev.5"}), -1)
224
+ assert.Equal(t, v.Compare(&Version{Major: 1, Minor: 2, Patch: 3, Meta: "dev.2"}), 0)
225
0 commit comments