From fdeb3d929cebc30ffa12fee04babf6e1170f0fad Mon Sep 17 00:00:00 2001 From: James Bardin Date: Wed, 31 May 2017 16:08:56 -0400 Subject: [PATCH] Add Versions.Sort Sort versions from newest to oldest. --- plugin/discovery/version.go | 11 +++++++++ plugin/discovery/version_test.go | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 plugin/discovery/version_test.go diff --git a/plugin/discovery/version.go b/plugin/discovery/version.go index 50d55635e6..dab26b3218 100644 --- a/plugin/discovery/version.go +++ b/plugin/discovery/version.go @@ -1,6 +1,8 @@ package discovery import ( + "sort" + version "github.com/hashicorp/go-version" ) @@ -45,3 +47,12 @@ func (v Version) String() string { func (v Version) NewerThan(other Version) bool { return v.raw.GreaterThan(other.raw) } + +type Versions []Version + +// Sort sorts version from newest to oldest. +func (v Versions) Sort() { + sort.Slice(v, func(i, j int) bool { + return v[i].NewerThan(v[j]) + }) +} diff --git a/plugin/discovery/version_test.go b/plugin/discovery/version_test.go new file mode 100644 index 0000000000..e34647b803 --- /dev/null +++ b/plugin/discovery/version_test.go @@ -0,0 +1,39 @@ +package discovery + +import ( + "reflect" + "testing" +) + +func TestSortVersions(t *testing.T) { + versions := Versions{ + VersionStr("4").MustParse(), + VersionStr("3.1").MustParse(), + VersionStr("1.2").MustParse(), + VersionStr("1.2.3").MustParse(), + VersionStr("2.2.3").MustParse(), + VersionStr("3.2.1").MustParse(), + VersionStr("2.3.2").MustParse(), + } + + expected := []string{ + "4.0.0", + "3.2.1", + "3.1.0", + "2.3.2", + "2.2.3", + "1.2.3", + "1.2.0", + } + + versions.Sort() + + var sorted []string + for _, v := range versions { + sorted = append(sorted, v.String()) + } + + if !reflect.DeepEqual(sorted, expected) { + t.Fatal("versions aren't sorted:", sorted) + } +}