@@ -9,6 +9,7 @@ package semver
9
9
// Version contains the results of parsed version string
10
10
type Version struct {
11
11
raw string
12
+ bytes []byte
12
13
major int
13
14
minor int
14
15
patch int
@@ -70,7 +71,7 @@ func (v *Version) Normalize() {
70
71
}
71
72
}
72
73
73
- func compareNumber (a , b string ) int {
74
+ func compareNumber (a , b [] byte ) int {
74
75
la := len (a )
75
76
lb := len (b )
76
77
if la == lb {
@@ -101,7 +102,7 @@ func compareAlpha(a, b []byte) int {
101
102
return 0
102
103
}
103
104
104
- var zero = "0"
105
+ var zero = [] byte ( "0" )
105
106
106
107
// CompareTo compares the Version with the one passed as parameter.
107
108
// Returns -1, 0 or 1 if the version is respectively less than, equal
@@ -114,23 +115,25 @@ func (v *Version) CompareTo(u *Version) int {
114
115
// comparing each of these identifiers from left to right as follows: Major, minor,
115
116
// and patch versions are always compared numerically.
116
117
// Example: 1.0.0 < 2.0.0 < 2.1.0 < 2.1.1.
117
- vMajor := zero [:]
118
- if v .major > 0 {
119
- vMajor = v .raw [:v .major ]
118
+ vMajorValue := zero [:]
119
+ vMajor := v .major
120
+ if vMajor > 0 {
121
+ vMajorValue = v .bytes [:vMajor ]
120
122
}
121
- uMajor := zero [:]
122
- if u .major > 0 {
123
- uMajor = u .raw [:u .major ]
123
+ uMajorValue := zero [:]
124
+ uMajor := u .major
125
+ if uMajor > 0 {
126
+ uMajorValue = u .bytes [:uMajor ]
124
127
}
125
128
{
126
- la := len (vMajor )
127
- lb := len (uMajor )
129
+ la := len (vMajorValue )
130
+ lb := len (uMajorValue )
128
131
if la == lb {
129
- for i := range vMajor {
130
- if vMajor [i ] == uMajor [i ] {
132
+ for i := range vMajorValue {
133
+ if vMajorValue [i ] == uMajorValue [i ] {
131
134
continue
132
135
}
133
- if vMajor [i ] > uMajor [i ] {
136
+ if vMajorValue [i ] > uMajorValue [i ] {
134
137
return 1
135
138
}
136
139
return - 1
@@ -141,26 +144,25 @@ func (v *Version) CompareTo(u *Version) int {
141
144
return - 1
142
145
}
143
146
}
144
- vMinor := zero [:]
145
- if v .minor > v .major {
146
- vMinor = v .raw [v .major + 1 : v .minor ]
147
+ vMinorValue := zero [:]
148
+ vMinor := v .minor
149
+ if vMinor > vMajor {
150
+ vMinorValue = v .bytes [vMajor + 1 : vMinor ]
147
151
}
148
- uMinor := zero [:]
149
- if u .minor > u .major {
150
- uMinor = u .raw [u .major + 1 : u .minor ]
152
+ uMinorValue := zero [:]
153
+ uMinor := u .minor
154
+ if uMinor > uMajor {
155
+ uMinorValue = u .bytes [uMajor + 1 : uMinor ]
151
156
}
152
- // if cmp := compareNumber(vMinor, uMinor); cmp != 0 {
153
- // return cmp
154
- // }
155
157
{
156
- la := len (vMinor )
157
- lb := len (uMinor )
158
+ la := len (vMinorValue )
159
+ lb := len (uMinorValue )
158
160
if la == lb {
159
- for i := range vMinor {
160
- if vMinor [i ] == uMinor [i ] {
161
+ for i := range vMinorValue {
162
+ if vMinorValue [i ] == uMinorValue [i ] {
161
163
continue
162
164
}
163
- if vMinor [i ] > uMinor [i ] {
165
+ if vMinorValue [i ] > uMinorValue [i ] {
164
166
return 1
165
167
}
166
168
return - 1
@@ -171,26 +173,25 @@ func (v *Version) CompareTo(u *Version) int {
171
173
return - 1
172
174
}
173
175
}
174
- vPatch := zero [:]
175
- if v .patch > v .minor {
176
- vPatch = v .raw [v .minor + 1 : v .patch ]
176
+ vPatchValue := zero [:]
177
+ vPatch := v .patch
178
+ if vPatch > vMinor {
179
+ vPatchValue = v .bytes [vMinor + 1 : vPatch ]
177
180
}
178
- uPatch := zero [:]
179
- if u .patch > u .minor {
180
- uPatch = u .raw [u .minor + 1 : u .patch ]
181
+ uPatchValue := zero [:]
182
+ uPatch := u .patch
183
+ if uPatch > uMinor {
184
+ uPatchValue = u .bytes [uMinor + 1 : uPatch ]
181
185
}
182
- // if cmp := compareNumber(vPatch, uPatch); cmp != 0 {
183
- // return cmp
184
- // }
185
186
{
186
- la := len (vPatch )
187
- lb := len (uPatch )
187
+ la := len (vPatchValue )
188
+ lb := len (uPatchValue )
188
189
if la == lb {
189
- for i := range vPatch {
190
- if vPatch [i ] == uPatch [i ] {
190
+ for i := range vPatchValue {
191
+ if vPatchValue [i ] == uPatchValue [i ] {
191
192
continue
192
193
}
193
- if vPatch [i ] > uPatch [i ] {
194
+ if vPatchValue [i ] > uPatchValue [i ] {
194
195
return 1
195
196
}
196
197
return - 1
@@ -203,7 +204,7 @@ func (v *Version) CompareTo(u *Version) int {
203
204
}
204
205
205
206
// if both versions have no pre-release, they are equal
206
- if v .prerelease == v . patch && u .prerelease == u . patch {
207
+ if v .prerelease == vPatch && u .prerelease == uPatch {
207
208
return 0
208
209
}
209
210
@@ -212,11 +213,11 @@ func (v *Version) CompareTo(u *Version) int {
212
213
// Example: 1.0.0-alpha < 1.0.0.
213
214
214
215
// if v has no pre-release, it's greater than u
215
- if v .prerelease == v . patch {
216
+ if v .prerelease == vPatch {
216
217
return 1
217
218
}
218
219
// if u has no pre-release, it's greater than v
219
- if u .prerelease == u . patch {
220
+ if u .prerelease == uPatch {
220
221
return - 1
221
222
}
222
223
@@ -369,26 +370,26 @@ func (v *Version) CompatibleWith(u *Version) bool {
369
370
}
370
371
vMajor := zero [:]
371
372
if v .major > 0 {
372
- vMajor = v .raw [:v .major ]
373
+ vMajor = v .bytes [:v .major ]
373
374
}
374
375
uMajor := zero [:]
375
376
if u .major > 0 {
376
- uMajor = u .raw [:u .major ]
377
+ uMajor = u .bytes [:u .major ]
377
378
}
378
379
majorEquals := compareNumber (vMajor , uMajor ) == 0
379
- if v .major > 0 && v .raw [0 ] != '0' {
380
+ if v .major > 0 && v .bytes [0 ] != '0' {
380
381
return majorEquals
381
382
}
382
383
if ! majorEquals {
383
384
return false
384
385
}
385
386
vMinor := zero [:]
386
387
if v .minor > v .major {
387
- vMinor = v .raw [v .major + 1 : v .minor ]
388
+ vMinor = v .bytes [v .major + 1 : v .minor ]
388
389
}
389
390
uMinor := zero [:]
390
391
if u .minor > u .major {
391
- uMinor = u .raw [u .major + 1 : u .minor ]
392
+ uMinor = u .bytes [u .major + 1 : u .minor ]
392
393
}
393
394
minorEquals := compareNumber (vMinor , uMinor ) == 0
394
395
if vMinor [0 ] != '0' {
@@ -399,11 +400,11 @@ func (v *Version) CompatibleWith(u *Version) bool {
399
400
}
400
401
vPatch := zero [:]
401
402
if v .patch > v .minor {
402
- vPatch = v .raw [v .minor + 1 : v .patch ]
403
+ vPatch = v .bytes [v .minor + 1 : v .patch ]
403
404
}
404
405
uPatch := zero [:]
405
406
if u .patch > u .minor {
406
- uPatch = u .raw [u .minor + 1 : u .patch ]
407
+ uPatch = u .bytes [u .minor + 1 : u .patch ]
407
408
}
408
409
return compareNumber (vPatch , uPatch ) == 0
409
410
}
0 commit comments