1
0
mirror of https://github.com/1Panel-dev/1Panel.git synced 2025-03-14 01:34:47 +08:00

fix: 解决部分软件错误判断升级的问题 (#3314)

This commit is contained in:
zhengkunwang 2023-12-14 11:20:11 +08:00 committed by GitHub
parent b93ea93cfe
commit c873c18a42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,44 +17,60 @@ import (
"github.com/mozillazg/go-pinyin" "github.com/mozillazg/go-pinyin"
) )
func CompareVersion(version1 string, version2 string) bool { func CompareVersion(version1, version2 string) bool {
if version1 == version2 { v1s := extractNumbers(version1)
return false v2s := extractNumbers(version2)
}
version1s := strings.Split(version1, ".")
version2s := strings.Split(version2, ".")
if len(version2s) > len(version1s) { maxLen := max(len(v1s), len(v2s))
for i := 0; i < len(version2s)-len(version1s); i++ { v1s = append(v1s, make([]string, maxLen-len(v1s))...)
version1s = append(version1s, "0") v2s = append(v2s, make([]string, maxLen-len(v2s))...)
}
}
if len(version1s) > len(version2s) {
for i := 0; i < len(version1s)-len(version2s); i++ {
version2s = append(version2s, "0")
}
}
n := min(len(version1s), len(version2s)) for i := 0; i < maxLen; i++ {
re := regexp.MustCompile("[0-9]+") v1, err1 := strconv.Atoi(v1s[i])
for i := 0; i < n; i++ { v2, err2 := strconv.Atoi(v2s[i])
sVersion1s := re.FindAllString(version1s[i], -1) if err1 != nil {
sVersion2s := re.FindAllString(version2s[i], -1) v1 = 0
if len(sVersion1s) == 0 {
return false
} }
if len(sVersion2s) == 0 { if err2 != nil {
return false v2 = 0
} }
v1num, _ := strconv.Atoi(sVersion1s[0]) if v1 != v2 {
v2num, _ := strconv.Atoi(sVersion2s[0]) return v1 > v2
if v1num == v2num { }
continue }
return false
}
func extractNumbers(version string) []string {
var numbers []string
start := -1
for i, r := range version {
if isDigit(r) {
if start == -1 {
start = i
}
} else { } else {
return v1num > v2num if start != -1 {
numbers = append(numbers, version[start:i])
start = -1
}
} }
} }
return true if start != -1 {
numbers = append(numbers, version[start:])
}
return numbers
}
func isDigit(r rune) bool {
return r >= '0' && r <= '9'
}
func max(x, y int) int {
if x > y {
return x
}
return y
} }
func GetSortedVersions(versions []string) []string { func GetSortedVersions(versions []string) []string {