Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/internal/bootstrap/patch.go
1560 views
1
package bootstrap
2
3
import (
4
"fmt"
5
6
"github.com/alist-org/alist/v3/internal/bootstrap/patch"
7
"github.com/alist-org/alist/v3/internal/conf"
8
"github.com/alist-org/alist/v3/pkg/utils"
9
"strings"
10
)
11
12
var LastLaunchedVersion = ""
13
14
func safeCall(v string, i int, f func()) {
15
defer func() {
16
if r := recover(); r != nil {
17
utils.Log.Errorf("Recovered from patch (version: %s, index: %d) panic: %v", v, i, r)
18
}
19
}()
20
21
f()
22
}
23
24
func getVersion(v string) (major, minor, patchNum int, err error) {
25
_, err = fmt.Sscanf(v, "v%d.%d.%d", &major, &minor, &patchNum)
26
return major, minor, patchNum, err
27
}
28
29
func compareVersion(majorA, minorA, patchNumA, majorB, minorB, patchNumB int) bool {
30
if majorA != majorB {
31
return majorA > majorB
32
}
33
if minorA != minorB {
34
return minorA > minorB
35
}
36
if patchNumA != patchNumB {
37
return patchNumA > patchNumB
38
}
39
return true
40
}
41
42
func InitUpgradePatch() {
43
if !strings.HasPrefix(conf.Version, "v") {
44
for _, vp := range patch.UpgradePatches {
45
for i, p := range vp.Patches {
46
safeCall(vp.Version, i, p)
47
}
48
}
49
return
50
}
51
if LastLaunchedVersion == conf.Version {
52
return
53
}
54
if LastLaunchedVersion == "" {
55
LastLaunchedVersion = "v0.0.0"
56
}
57
major, minor, patchNum, err := getVersion(LastLaunchedVersion)
58
if err != nil {
59
utils.Log.Warnf("Failed to parse last launched version %s: %v, skipping all patches and rewrite last launched version", LastLaunchedVersion, err)
60
return
61
}
62
for _, vp := range patch.UpgradePatches {
63
ma, mi, pn, err := getVersion(vp.Version)
64
if err != nil {
65
utils.Log.Errorf("Skip invalid version %s patches: %v", vp.Version, err)
66
continue
67
}
68
if compareVersion(ma, mi, pn, major, minor, patchNum) {
69
for i, p := range vp.Patches {
70
safeCall(vp.Version, i, p)
71
}
72
}
73
}
74
}
75
76