diff --git a/plugin/discovery/version.go b/plugin/discovery/version.go index 50d55635e..dab26b321 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 000000000..e34647b80 --- /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) + } +}