From 8ec667151fe29cc2a0758c6f245c0a2c13730c37 Mon Sep 17 00:00:00 2001 From: Evan Short Date: Tue, 10 Nov 2015 14:06:52 -0800 Subject: [PATCH] Use semi-semantic versioning - so we don't ignore tags like v223 [#107756410] --- check_command.go | 11 ++++++----- check_command_test.go | 30 +++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/check_command.go b/check_command.go index 0f63b42..5b46664 100644 --- a/check_command.go +++ b/check_command.go @@ -4,8 +4,9 @@ import ( "sort" "strconv" - "github.com/blang/semver" "github.com/zachgersh/go-github/github" + + "github.com/cppforlife/go-semi-semantic/version" ) type CheckCommand struct { @@ -37,7 +38,7 @@ func (c *CheckCommand) Run(request CheckRequest) ([]Version, error) { if release.TagName == nil { continue } - if _, err := semver.New(determineVersionFromTag(*release.TagName)); err != nil { + if _, err := version.NewVersionFromString(determineVersionFromTag(*release.TagName)); err != nil { continue } @@ -100,15 +101,15 @@ func (r byVersion) Swap(i, j int) { } func (r byVersion) Less(i, j int) bool { - first, err := semver.New(determineVersionFromTag(*r[i].TagName)) + first, err := version.NewVersionFromString(determineVersionFromTag(*r[i].TagName)) if err != nil { return true } - second, err := semver.New(determineVersionFromTag(*r[j].TagName)) + second, err := version.NewVersionFromString(determineVersionFromTag(*r[j].TagName)) if err != nil { return false } - return first.LT(*second) + return first.IsLt(second) } diff --git a/check_command_test.go b/check_command_test.go index c2df979..dff8942 100644 --- a/check_command_test.go +++ b/check_command_test.go @@ -146,6 +146,30 @@ var _ = Describe("Check Command", func() { {Tag: "0.4.0"}, })) }) + + Context("when there are not-quite-semver versions", func() { + BeforeEach(func() { + returnedReleases = append(returnedReleases, newRepositoryRelease(5, "v1")) + returnedReleases = append(returnedReleases, newRepositoryRelease(6, "v0")) + }) + + It("combines them with the semver versions in a reasonable order", func() { + command := resource.NewCheckCommand(githubClient) + + response, err := command.Run(resource.CheckRequest{ + Version: resource.Version{ + Tag: "v0.1.3", + }, + }) + Ω(err).ShouldNot(HaveOccurred()) + + Ω(response).Should(Equal([]resource.Version{ + {Tag: "v0.1.4"}, + {Tag: "0.4.0"}, + {Tag: "v1"}, + })) + }) + }) }) Context("and one of the releases is a draft", func() { @@ -217,8 +241,8 @@ var _ = Describe("Check Command", func() { Context("and non-of them are semver", func() { BeforeEach(func() { returnedReleases = []github.RepositoryRelease{ - newDraftRepositoryRelease(1, "abc"), - newDraftRepositoryRelease(2, "123"), + newDraftRepositoryRelease(1, "abc/d"), + newDraftRepositoryRelease(2, "123*4"), } }) @@ -241,7 +265,7 @@ var _ = Describe("Check Command", func() { newDraftRepositoryRelease(1, "v0.1.4"), newDraftRepositoryRelease(2, ""), newDraftWithNilTagRepositoryRelease(3), - newDraftRepositoryRelease(4, "asdf123"), + newDraftRepositoryRelease(4, "asdf@example.com"), } })