diff options
author | Max Magorsch <arzano@gentoo.org> | 2020-06-10 16:21:39 +0200 |
---|---|---|
committer | Max Magorsch <arzano@gentoo.org> | 2020-06-10 16:21:39 +0200 |
commit | 9e3545a3f1f3cda4c96ad591f1c8454bcdfd5934 (patch) | |
tree | 9ee42f21b4759bd9577e816507aa54c2c958c434 | |
parent | Add tests for CompareTo. (diff) | |
download | soko-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.go | 4 | ||||
-rw-r--r-- | pkg/models/version.go | 23 | ||||
-rw-r--r-- | pkg/models/version_test.go | 3 | ||||
-rw-r--r-- | pkg/portage/repository/mask.go | 9 |
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) } } |