|
|
@ -189,6 +189,9 @@ func Parse(s string) (*Version, error) { |
|
|
if !containsOnly(parts[0], NUMBERS) { |
|
|
if !containsOnly(parts[0], NUMBERS) { |
|
|
return nil, fmt.Errorf("Invalid character(s) found in major number %q", parts[0]) |
|
|
return nil, fmt.Errorf("Invalid character(s) found in major number %q", parts[0]) |
|
|
} |
|
|
} |
|
|
|
|
|
if hasLeadingZeroes(parts[0]) { |
|
|
|
|
|
return nil, fmt.Errorf("Major number must not contain leading zeroes %q", parts[0]) |
|
|
|
|
|
} |
|
|
major, err := strconv.ParseUint(parts[0], 10, 64) |
|
|
major, err := strconv.ParseUint(parts[0], 10, 64) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return nil, err |
|
|
return nil, err |
|
|
@ -198,6 +201,9 @@ func Parse(s string) (*Version, error) { |
|
|
if !containsOnly(parts[1], NUMBERS) { |
|
|
if !containsOnly(parts[1], NUMBERS) { |
|
|
return nil, fmt.Errorf("Invalid character(s) found in minor number %q", parts[1]) |
|
|
return nil, fmt.Errorf("Invalid character(s) found in minor number %q", parts[1]) |
|
|
} |
|
|
} |
|
|
|
|
|
if hasLeadingZeroes(parts[1]) { |
|
|
|
|
|
return nil, fmt.Errorf("Minor number must not contain leading zeroes %q", parts[1]) |
|
|
|
|
|
} |
|
|
minor, err := strconv.ParseUint(parts[1], 10, 64) |
|
|
minor, err := strconv.ParseUint(parts[1], 10, 64) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return nil, err |
|
|
return nil, err |
|
|
@ -227,6 +233,9 @@ func Parse(s string) (*Version, error) { |
|
|
if !containsOnly(parts[2][:subVersionIndex], NUMBERS) { |
|
|
if !containsOnly(parts[2][:subVersionIndex], NUMBERS) { |
|
|
return nil, fmt.Errorf("Invalid character(s) found in patch number %q", parts[2][:subVersionIndex]) |
|
|
return nil, fmt.Errorf("Invalid character(s) found in patch number %q", parts[2][:subVersionIndex]) |
|
|
} |
|
|
} |
|
|
|
|
|
if hasLeadingZeroes(parts[2][:subVersionIndex]) { |
|
|
|
|
|
return nil, fmt.Errorf("Patch number must not contain leading zeroes %q", parts[2][:subVersionIndex]) |
|
|
|
|
|
} |
|
|
patch, err := strconv.ParseUint(parts[2][:subVersionIndex], 10, 64) |
|
|
patch, err := strconv.ParseUint(parts[2][:subVersionIndex], 10, 64) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return nil, err |
|
|
return nil, err |
|
|
@ -286,6 +295,9 @@ func NewPRVersion(s string) (*PRVersion, error) { |
|
|
} |
|
|
} |
|
|
v := &PRVersion{} |
|
|
v := &PRVersion{} |
|
|
if containsOnly(s, NUMBERS) { |
|
|
if containsOnly(s, NUMBERS) { |
|
|
|
|
|
if hasLeadingZeroes(s) { |
|
|
|
|
|
return nil, fmt.Errorf("Numeric PreRelease version must not contain leading zeroes %q", s) |
|
|
|
|
|
} |
|
|
num, err := strconv.ParseUint(s, 10, 64) |
|
|
num, err := strconv.ParseUint(s, 10, 64) |
|
|
|
|
|
|
|
|
// Might never be hit, but just in case
|
|
|
// Might never be hit, but just in case
|
|
|
@ -350,6 +362,16 @@ func containsOnly(s string, set string) bool { |
|
|
}) == -1 |
|
|
}) == -1 |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func hasLeadingZeroes(s string) bool { |
|
|
|
|
|
if len(s) <= 1 { |
|
|
|
|
|
return false |
|
|
|
|
|
} |
|
|
|
|
|
if s[0] == '0' { |
|
|
|
|
|
return true |
|
|
|
|
|
} |
|
|
|
|
|
return false |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// Creates a new valid build version
|
|
|
// Creates a new valid build version
|
|
|
func NewBuildVersion(s string) (string, error) { |
|
|
func NewBuildVersion(s string) (string, error) { |
|
|
if len(s) == 0 { |
|
|
if len(s) == 0 { |
|
|
|