diff --git a/backend/app/service/upgrade.go b/backend/app/service/upgrade.go index 39fe59d03..f4732dc67 100644 --- a/backend/app/service/upgrade.go +++ b/backend/app/service/upgrade.go @@ -43,7 +43,7 @@ func (u *UpgradeService) SearchUpgrade() (*dto.UpgradeInfo, error) { global.LOG.Infof("load latest version failed, err: %v", err) return nil, err } - if !common.CompareVersion(string(latestVersion), currentVersion.Value) { + if !common.ComparePanelVersion(string(latestVersion), currentVersion.Value) { return nil, err } upgrade.LatestVersion = latestVersion diff --git a/backend/utils/common/common.go b/backend/utils/common/common.go index 10e320fc6..ecffb38b9 100644 --- a/backend/utils/common/common.go +++ b/backend/utils/common/common.go @@ -45,6 +45,35 @@ func CompareVersion(version1, version2 string) bool { return false } +func ComparePanelVersion(version1, version2 string) bool { + if version1 == version2 { + return false + } + version1s := strings.Split(version1, ".") + version2s := strings.Split(version2, ".") + + if len(version2s) > len(version1s) { + for i := 0; i < len(version2s)-len(version1s); i++ { + version1s = append(version1s, "0") + } + } + 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 < n; i++ { + if version1s[i] == version2s[i] { + continue + } else { + return version1s[i] > version2s[i] + } + } + return true +} + func extractNumbers(version string) []string { var numbers []string start := -1