2
2
// Use of this source code is governed by a MIT-style
3
3
// license that can be found in the LICENSE file.
4
4
5
- package models
5
+ package updatechecker
6
6
7
7
import (
8
8
"encoding/json"
9
- "fmt"
10
9
"io/ioutil"
11
10
"net/http"
12
11
13
- "code.gitea.io/gitea/models/db "
12
+ "code.gitea.io/gitea/modules/appstate "
14
13
"code.gitea.io/gitea/modules/proxy"
15
14
"code.gitea.io/gitea/modules/setting"
16
15
17
16
"github.com/hashicorp/go-version"
18
17
)
19
18
20
- // RemoteVersion stores the remote version from the JSON endpoint
21
- type RemoteVersion struct {
22
- ID int64 `xorm:"pk autoincr"`
23
- Version string `xorm:"VARCHAR(50)"`
19
+ // CheckerState stores the remote version from the JSON endpoint
20
+ type CheckerState struct {
21
+ LatestVersion string
24
22
}
25
23
26
- func init () {
27
- db .RegisterModel (new (RemoteVersion ))
24
+ // Name returns the name of the state item for update checker
25
+ func (r * CheckerState ) Name () string {
26
+ return "update-checker"
28
27
}
29
28
30
29
// GiteaUpdateChecker returns error when new version of Gitea is available
@@ -49,60 +48,33 @@ func GiteaUpdateChecker(httpEndpoint string) error {
49
48
return err
50
49
}
51
50
52
- type v struct {
51
+ type respType struct {
53
52
Latest struct {
54
53
Version string `json:"version"`
55
54
} `json:"latest"`
56
55
}
57
- ver := v {}
58
- err = json .Unmarshal (body , & ver )
56
+ respData := respType {}
57
+ err = json .Unmarshal (body , & respData )
59
58
if err != nil {
60
59
return err
61
60
}
62
61
63
- return UpdateRemoteVersion (ver .Latest .Version )
62
+ return UpdateRemoteVersion (respData .Latest .Version )
64
63
65
64
}
66
65
67
66
// UpdateRemoteVersion updates the latest available version of Gitea
68
67
func UpdateRemoteVersion (version string ) (err error ) {
69
- sess := db .NewSession (db .DefaultContext )
70
- defer sess .Close ()
71
- if err = sess .Begin (); err != nil {
72
- return err
73
- }
74
-
75
- currentVersion := & RemoteVersion {ID : 1 }
76
- has , err := sess .Get (currentVersion )
77
- if err != nil {
78
- return fmt .Errorf ("get: %v" , err )
79
- } else if ! has {
80
- currentVersion .ID = 1
81
- currentVersion .Version = version
82
-
83
- if _ , err = sess .InsertOne (currentVersion ); err != nil {
84
- return fmt .Errorf ("insert: %v" , err )
85
- }
86
- return nil
87
- }
88
-
89
- if _ , err = sess .Update (& RemoteVersion {ID : 1 , Version : version }); err != nil {
90
- return err
91
- }
92
-
93
- return sess .Commit ()
68
+ return appstate .AppState .Set (& CheckerState {LatestVersion : version })
94
69
}
95
70
96
71
// GetRemoteVersion returns the current remote version (or currently installed verson if fail to fetch from DB)
97
72
func GetRemoteVersion () string {
98
- e := db .GetEngine (db .DefaultContext )
99
- v := & RemoteVersion {ID : 1 }
100
- _ , err := e .Get (& v )
101
- if err != nil {
102
- // return current version if fail to fetch from DB
103
- return setting .AppVer
73
+ item := new (CheckerState )
74
+ if err := appstate .AppState .Get (item ); err != nil {
75
+ return ""
104
76
}
105
- return v . Version
77
+ return item . LatestVersion
106
78
}
107
79
108
80
// GetNeedUpdate returns true whether a newer version of Gitea is available
@@ -112,7 +84,12 @@ func GetNeedUpdate() bool {
112
84
// return false to fail silently
113
85
return false
114
86
}
115
- remoteVer , err := version .NewVersion (GetRemoteVersion ())
87
+ remoteVerStr := GetRemoteVersion ()
88
+ if remoteVerStr == "" {
89
+ // no remote version is known
90
+ return false
91
+ }
92
+ remoteVer , err := version .NewVersion (remoteVerStr )
116
93
if err != nil {
117
94
// return false to fail silently
118
95
return false
0 commit comments