ref(pkg/version): allow comparison of pre-releases

pull/3840/head
Michelle Noorali 8 years ago
parent 50f6fddd99
commit fde2ff97f3

@ -18,6 +18,7 @@ package version // import "k8s.io/helm/pkg/version"
import (
"fmt"
"regexp"
"strings"
"github.com/Masterminds/semver"
@ -53,6 +54,18 @@ func IsCompatibleRange(constraint, ver string) bool {
return false
}
verSuffix := sv.Prerelease()
if verSuffix != "" {
if !IsConstraintPrerelease(constraint) {
constraint = constraint + "-r0"
trimmedVer := strings.TrimSuffix(sv.String(), "-"+verSuffix)
sv, err = semver.NewVersion(trimmedVer)
if err != nil {
return false
}
}
}
c, err := semver.NewConstraint(constraint)
if err != nil {
return false
@ -60,6 +73,27 @@ func IsCompatibleRange(constraint, ver string) bool {
return c.Check(sv)
}
func IsConstraintPrerelease(constraint string) bool {
base := constraint
for _, c := range constraint {
char := string(c)
r := regexp.MustCompile(`^[0-9]+`).MatchString(char)
if !r {
base = strings.TrimPrefix(base, char)
} else {
break
}
}
baseVer, err := semver.NewVersion(base)
if err != nil {
return false
}
if baseVer.Prerelease() == "" {
return false
}
return true
}
func isUnreleased(v string) bool {
return strings.HasSuffix(v, "unreleased")
}

@ -56,6 +56,10 @@ func TestIsCompatibleRange(t *testing.T) {
{"v2", "v2.0.0", true},
{">2.0.0", "v2.1.1", true},
{"v2.1.*", "v2.1.1", true},
{">=1.8.0", "v1.9.4-gke.1", true},
{">=1.8.0", "v1.7.4-gke.1", false},
{"<=1.8.0", "v1.7.4-gke.1", true},
{"~v2.0.0", "v2.0.1-gke1", true},
}
for _, tt := range tests {

Loading…
Cancel
Save