aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Magorsch <arzano@gentoo.org>2020-06-10 16:21:39 +0200
committerMax Magorsch <arzano@gentoo.org>2020-06-10 16:21:39 +0200
commit9e3545a3f1f3cda4c96ad591f1c8454bcdfd5934 (patch)
tree9ee42f21b4759bd9577e816507aa54c2c958c434
parentAdd tests for CompareTo. (diff)
downloadsoko-9e3545a3f1f3cda4c96ad591f1c8454bcdfd5934.tar.gz
soko-9e3545a3f1f3cda4c96ad591f1c8454bcdfd5934.tar.bz2
soko-9e3545a3f1f3cda4c96ad591f1c8454bcdfd5934.zip
Rename the version comparison functions
Signed-off-by: Max Magorsch <arzano@gentoo.org>
-rw-r--r--pkg/app/handler/packages/utils.go4
-rw-r--r--pkg/models/version.go23
-rw-r--r--pkg/models/version_test.go3
-rw-r--r--pkg/portage/repository/mask.go9
4 files changed, 25 insertions, 14 deletions
diff --git a/pkg/app/handler/packages/utils.go b/pkg/app/handler/packages/utils.go
index 040bf72..66e56ea 100644
--- a/pkg/app/handler/packages/utils.go
+++ b/pkg/app/handler/packages/utils.go
@@ -379,14 +379,14 @@ func showRemovalNotice(versions []*models.Version) bool {
// sort the versions in ascending order
func sortVersionsAsc(versions []*models.Version) {
sort.Slice(versions, func(i, j int) bool {
- return !versions[i].CompareTo(*versions[j])
+ return versions[i].SmallerThan(*versions[j])
})
}
// sort the versions in descending order
func sortVersionsDesc(versions []*models.Version) {
sort.Slice(versions, func(i, j int) bool {
- return versions[i].CompareTo(*versions[j])
+ return versions[i].GreaterThan(*versions[j])
})
}
diff --git a/pkg/models/version.go b/pkg/models/version.go
index 904751e..228c963 100644
--- a/pkg/models/version.go
+++ b/pkg/models/version.go
@@ -31,9 +31,9 @@ type Version struct {
PkgCheckResults []*PkgCheckResult `pg:",fk:cpv"`
}
-// Compare two versions strings - compliant to the 'Version Comparison'
-// described in the Package Manager Specification (PMS)
-func (v *Version) CompareTo(other Version) bool {
+// GreaterThan returns true if the version is greater than the given version
+// compliant to the 'Version Comparison' described in the Package Manager Specification (PMS)
+func (v *Version) GreaterThan(other Version) bool {
versionIdentifierA := v.computeVersionIdentifier()
versionIdentifierB := other.computeVersionIdentifier()
@@ -76,9 +76,20 @@ func (v *Version) CompareTo(other Version) bool {
return versionIdentifierA.Revision > versionIdentifierB.Revision
}
- // the versions are equal based on the PMS specification but
- // we have to return a bool, that's why we return true here
- return true
+ // the versions are equal based on the PMS specification
+ return false
+}
+
+// SmallerThan returns true if the version is smaller than the given version
+// compliant to the 'Version Comparison' described in the Package Manager Specification (PMS)
+func (v *Version) SmallerThan(other Version) bool {
+ return other.GreaterThan(*v)
+}
+
+// EqualTo returns true if the version is equal to the given version
+// compliant to the 'Version Comparison' described in the Package Manager Specification (PMS)
+func (v *Version) EqualTo(other Version) bool {
+ return !v.GreaterThan(other) && !v.SmallerThan(other)
}
// utils
diff --git a/pkg/models/version_test.go b/pkg/models/version_test.go
index 2d9d2a8..3c23ab0 100644
--- a/pkg/models/version_test.go
+++ b/pkg/models/version_test.go
@@ -51,8 +51,7 @@ func TestVersionCompare(t *testing.T) {
t.Run(testname, func(t *testing.T) {
left := Version{Version: tt.left}
right := Version{Version: tt.right}
- // CompareTo is really >=, not Equality Comparison.
- ret := left.CompareTo(right)
+ ret := left.GreaterThan(right)
if ret != tt.want {
t.Errorf("got %t, want %t", ret, tt.want)
}
diff --git a/pkg/portage/repository/mask.go b/pkg/portage/repository/mask.go
index ce689dc..a722d54 100644
--- a/pkg/portage/repository/mask.go
+++ b/pkg/portage/repository/mask.go
@@ -211,20 +211,21 @@ func comparedVersions(operator string, versionSpecifier string, packageAtom stri
Select()
for _, v := range versions {
+ givenVersion := models.Version{ Version: versionSpecifier }
if operator == ">" {
- if v.Version != versionSpecifier && v.CompareTo(models.Version{ Version: versionSpecifier }){
+ if v.GreaterThan(givenVersion){
results = append(results, v)
}
}else if operator == ">=" {
- if v.Version == versionSpecifier || v.CompareTo(models.Version{ Version: versionSpecifier }){
+ if v.GreaterThan(givenVersion) == v.EqualTo(givenVersion) {
results = append(results, v)
}
}else if operator == "<" {
- if v.Version != versionSpecifier && (&models.Version{ Version: versionSpecifier }).CompareTo(*v){
+ if (&givenVersion).SmallerThan(*v){
results = append(results, v)
}
}else if operator == "<=" {
- if v.Version == versionSpecifier || (&models.Version{ Version: versionSpecifier }).CompareTo(*v) {
+ if (&givenVersion).SmallerThan(*v) || (&givenVersion).EqualTo(*v) {
results = append(results, v)
}
}