mirror of
https://github.com/alist-org/alist.git
synced 2026-06-29 21:02:01 +08:00
Some checks failed
beta release / Beta Release Changelog (1.21, ubuntu-latest) (push) Has been cancelled
build / Build (1.21, ubuntu-latest) (push) Has been cancelled
release_docker / Build Binaries for Docker Release (push) Has been cancelled
beta release / Beta Release (md5, !(*musl*|*windows-arm64*|*android*|*freebsd*)) (push) Has been cancelled
beta release / Beta Release (md5-android, android-*) (push) Has been cancelled
beta release / Beta Release (md5-freebsd, freebsd-*) (push) Has been cancelled
beta release / Beta Release (md5-linux-musl, linux-!(arm*)-musl*) (push) Has been cancelled
beta release / Beta Release (md5-linux-musl-arm, linux-arm*-musl*) (push) Has been cancelled
beta release / Beta Release (md5-windows-arm64, windows-arm64) (push) Has been cancelled
beta release / Beta Release Desktop (push) Has been cancelled
release_docker / Release Docker image (, latest, ) (push) Has been cancelled
release_docker / Release Docker image (INSTALL_ARIA2=true, aria2, suffix=-aria2,onlatest=true) (push) Has been cancelled
release_docker / Release Docker image (INSTALL_FFMPEG=true
INSTALL_ARIA2=true
, aio, suffix=-aio,onlatest=true) (push) Has been cancelled
release_docker / Release Docker image (INSTALL_FFMPEG=true, ffmpeg, suffix=-ffmpeg,onlatest=true) (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
* fix(workflow): use dev version of the web for beta releases * chore(config): check version string by prefix
69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/alist-org/alist/v3/internal/bootstrap/patch"
|
|
"github.com/alist-org/alist/v3/internal/conf"
|
|
"github.com/alist-org/alist/v3/pkg/utils"
|
|
"strings"
|
|
)
|
|
|
|
var LastLaunchedVersion = ""
|
|
|
|
func safeCall(v string, i int, f func()) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
utils.Log.Errorf("Recovered from patch (version: %s, index: %d) panic: %v", v, i, r)
|
|
}
|
|
}()
|
|
|
|
f()
|
|
}
|
|
|
|
func getVersion(v string) (major, minor, patchNum int, err error) {
|
|
_, err = fmt.Sscanf(v, "v%d.%d.%d", &major, &minor, &patchNum)
|
|
return major, minor, patchNum, err
|
|
}
|
|
|
|
func compareVersion(majorA, minorA, patchNumA, majorB, minorB, patchNumB int) bool {
|
|
if majorA != majorB {
|
|
return majorA > majorB
|
|
}
|
|
if minorA != minorB {
|
|
return minorA > minorB
|
|
}
|
|
if patchNumA != patchNumB {
|
|
return patchNumA > patchNumB
|
|
}
|
|
return true
|
|
}
|
|
|
|
func InitUpgradePatch() {
|
|
if !strings.HasPrefix(conf.Version, "v") {
|
|
return
|
|
}
|
|
if LastLaunchedVersion == conf.Version {
|
|
return
|
|
}
|
|
if LastLaunchedVersion == "" {
|
|
LastLaunchedVersion = "v0.0.0"
|
|
}
|
|
major, minor, patchNum, err := getVersion(LastLaunchedVersion)
|
|
if err != nil {
|
|
utils.Log.Warnf("Failed to parse last launched version %s: %v, skipping all patches and rewrite last launched version", LastLaunchedVersion, err)
|
|
return
|
|
}
|
|
for _, vp := range patch.UpgradePatches {
|
|
ma, mi, pn, err := getVersion(vp.Version)
|
|
if err != nil {
|
|
utils.Log.Errorf("Skip invalid version %s patches: %v", vp.Version, err)
|
|
continue
|
|
}
|
|
if compareVersion(ma, mi, pn, major, minor, patchNum) {
|
|
for i, p := range vp.Patches {
|
|
safeCall(vp.Version, i, p)
|
|
}
|
|
}
|
|
}
|
|
}
|