mattermost/plugin/checker/internal/version/version.go
Jesús Espino a63684fcb5
Consistent license message for all the go files (#13235)
* Consistent license message for all the go files

* Fixing the last set of unconsistencies with the license headers

* Addressing PR review comments

* Fixing busy.go and busy_test.go license header
2019-11-29 12:59:40 +01:00

80 lines
1.3 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package version
import (
"regexp"
"strconv"
"strings"
)
type V string
func (v V) GreaterThanOrEqualTo(other V) bool {
return !v.LessThan(other)
}
func (v V) LessThan(other V) bool {
leftParts, leftCount := split(v)
rightParts, rightCount := split(other)
var length int
if leftCount < rightCount {
length = rightCount
} else {
length = leftCount
}
for i := 0; i < length; i++ {
var left, right string
if i < leftCount {
left = leftParts[i]
}
if i < rightCount {
right = rightParts[i]
}
if left == right {
continue
}
leftInt := parseInt(left)
rightInt := parseInt(right)
isNumericalComparison := leftInt != nil && rightInt != nil
if isNumericalComparison {
return *leftInt < *rightInt
}
return left < right
}
return false
}
func split(v V) ([]string, int) {
var chunks []string
for _, part := range strings.Split(string(v), ".") {
chunks = append(chunks, splitNumericalChunks(part)...)
}
return chunks, len(chunks)
}
var numericalOrAlphaRE = regexp.MustCompile(`(\d+|\D+)`)
func splitNumericalChunks(s string) []string {
return numericalOrAlphaRE.FindAllString(s, -1)
}
func parseInt(s string) *int64 {
if n, err := strconv.ParseInt(s, 10, 64); err == nil {
return &n
}
return nil
}