summaryrefslogtreecommitdiff
path: root/vendor/github.com/Masterminds/semver/v3/version.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/Masterminds/semver/v3/version.go')
-rw-r--r--vendor/github.com/Masterminds/semver/v3/version.go24
1 files changed, 9 insertions, 15 deletions
diff --git a/vendor/github.com/Masterminds/semver/v3/version.go b/vendor/github.com/Masterminds/semver/v3/version.go
index 304edc3..ff499fb 100644
--- a/vendor/github.com/Masterminds/semver/v3/version.go
+++ b/vendor/github.com/Masterminds/semver/v3/version.go
@@ -39,11 +39,9 @@ var (
)
// semVerRegex is the regular expression used to parse a semantic version.
-// This is not the official regex from the semver spec. It has been modified to allow for loose handling
-// where versions like 2.1 are detected.
-const semVerRegex string = `v?(0|[1-9]\d*)(?:\.(0|[1-9]\d*))?(?:\.(0|[1-9]\d*))?` +
- `(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?` +
- `(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?`
+const semVerRegex string = `v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` +
+ `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` +
+ `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?`
// Version represents a single semantic version.
type Version struct {
@@ -148,8 +146,8 @@ func NewVersion(v string) (*Version, error) {
}
sv := &Version{
- metadata: m[5],
- pre: m[4],
+ metadata: m[8],
+ pre: m[5],
original: v,
}
@@ -160,7 +158,7 @@ func NewVersion(v string) (*Version, error) {
}
if m[2] != "" {
- sv.minor, err = strconv.ParseUint(m[2], 10, 64)
+ sv.minor, err = strconv.ParseUint(strings.TrimPrefix(m[2], "."), 10, 64)
if err != nil {
return nil, fmt.Errorf("Error parsing version segment: %s", err)
}
@@ -169,7 +167,7 @@ func NewVersion(v string) (*Version, error) {
}
if m[3] != "" {
- sv.patch, err = strconv.ParseUint(m[3], 10, 64)
+ sv.patch, err = strconv.ParseUint(strings.TrimPrefix(m[3], "."), 10, 64)
if err != nil {
return nil, fmt.Errorf("Error parsing version segment: %s", err)
}
@@ -614,9 +612,7 @@ func containsOnly(s string, comp string) bool {
func validatePrerelease(p string) error {
eparts := strings.Split(p, ".")
for _, p := range eparts {
- if p == "" {
- return ErrInvalidMetadata
- } else if containsOnly(p, num) {
+ if containsOnly(p, num) {
if len(p) > 1 && p[0] == '0' {
return ErrSegmentStartsZero
}
@@ -635,9 +631,7 @@ func validatePrerelease(p string) error {
func validateMetadata(m string) error {
eparts := strings.Split(m, ".")
for _, p := range eparts {
- if p == "" {
- return ErrInvalidMetadata
- } else if !containsOnly(p, allowed) {
+ if !containsOnly(p, allowed) {
return ErrInvalidMetadata
}
}