Skip to content

Commit e04a866

Browse files
authored
remove reflection dependency (#91)
1 parent 94bab9e commit e04a866

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

constraint.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package version
55

66
import (
77
"fmt"
8-
"reflect"
98
"regexp"
109
"sort"
1110
"strings"
@@ -202,7 +201,7 @@ func prereleaseCheck(v, c *Version) bool {
202201
case cPre && vPre:
203202
// A constraint with a pre-release can only match a pre-release version
204203
// with the same base segments.
205-
return reflect.DeepEqual(c.Segments64(), v.Segments64())
204+
return v.equalSegments(c)
206205

207206
case !cPre && vPre:
208207
// A constraint without a pre-release can only match a version without a

version.go

+18-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package version
66
import (
77
"bytes"
88
"fmt"
9-
"reflect"
109
"regexp"
1110
"strconv"
1211
"strings"
@@ -120,11 +119,8 @@ func (v *Version) Compare(other *Version) int {
120119
return 0
121120
}
122121

123-
segmentsSelf := v.Segments64()
124-
segmentsOther := other.Segments64()
125-
126122
// If the segments are the same, we must compare on prerelease info
127-
if reflect.DeepEqual(segmentsSelf, segmentsOther) {
123+
if v.equalSegments(other) {
128124
preSelf := v.Prerelease()
129125
preOther := other.Prerelease()
130126
if preSelf == "" && preOther == "" {
@@ -140,6 +136,8 @@ func (v *Version) Compare(other *Version) int {
140136
return comparePrereleases(preSelf, preOther)
141137
}
142138

139+
segmentsSelf := v.Segments64()
140+
segmentsOther := other.Segments64()
143141
// Get the highest specificity (hS), or if they're equal, just use segmentSelf length
144142
lenSelf := len(segmentsSelf)
145143
lenOther := len(segmentsOther)
@@ -183,6 +181,21 @@ func (v *Version) Compare(other *Version) int {
183181
return 0
184182
}
185183

184+
func (v *Version) equalSegments(other *Version) bool {
185+
segmentsSelf := v.Segments64()
186+
segmentsOther := other.Segments64()
187+
188+
if len(segmentsSelf) != len(segmentsOther) {
189+
return false
190+
}
191+
for i, v := range segmentsSelf {
192+
if v != segmentsOther[i] {
193+
return false
194+
}
195+
}
196+
return true
197+
}
198+
186199
func allZero(segs []int64) bool {
187200
for _, s := range segs {
188201
if s != 0 {

0 commit comments

Comments
 (0)