sort versions semantically

...rather than relying on api order

[#76848252]

Signed-off-by: Alex Suraci <asuraci@pivotal.io>
This commit is contained in:
Chris Brown
2015-02-17 10:35:27 -08:00
committed by Alex Suraci
parent 0deda9939c
commit 7e47c2696e
14 changed files with 1245 additions and 9 deletions

View File

@@ -2,7 +2,9 @@ package resource
import (
"errors"
"sort"
"github.com/blang/semver"
"github.com/google/go-github/github"
)
@@ -26,7 +28,9 @@ func (c *CheckCommand) Run(request CheckRequest) ([]Version, error) {
return []Version{}, errors.New("repository had no releases")
}
latestVersion := *releases[0].TagName
sort.Sort(byVersion(releases))
latestVersion := *releases[len(releases)-1].TagName
if request.Version.Tag == "" {
return []Version{
@@ -40,7 +44,7 @@ func (c *CheckCommand) Run(request CheckRequest) ([]Version, error) {
upToLatest := false
reversedVersions := []Version{}
for _, release := range reverse(releases) {
for _, release := range releases {
version := *release.TagName
if upToLatest {
@@ -53,10 +57,30 @@ func (c *CheckCommand) Run(request CheckRequest) ([]Version, error) {
return reversedVersions, nil
}
func reverse(s []github.RepositoryRelease) []github.RepositoryRelease {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
type byVersion []github.RepositoryRelease
func (r byVersion) Len() int {
return len(r)
}
func (r byVersion) Swap(i, j int) {
r[i], r[j] = r[j], r[i]
}
func (r byVersion) Less(i, j int) bool {
if r[i].TagName == nil || r[j].TagName == nil {
return false
}
return s
first, err := semver.New(*r[i].TagName)
if err != nil {
return true
}
second, err := semver.New(*r[j].TagName)
if err != nil {
return false
}
return first.LT(second)
}