Skip to content

Commit fbbbaa3

Browse files
committed
Fix set system setting failure once it cached (go-gitea#22333)
Unfortunately, go-gitea#22295 introduced a bug that when set a cached system setting, it will not affect. This PR make sure to remove the cache key when updating a system setting. Fix go-gitea#22332
1 parent adc0bca commit fbbbaa3

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

models/system/setting.go

+15-12
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313

1414
"code.gitea.io/gitea/models/db"
1515
"code.gitea.io/gitea/modules/cache"
16-
"code.gitea.io/gitea/modules/setting"
16+
setting_module "code.gitea.io/gitea/modules/setting"
1717
"code.gitea.io/gitea/modules/timeutil"
1818

1919
"strk.kbt.io/projects/go/libravatar"
@@ -89,7 +89,7 @@ func GetSettingNoCache(key string) (*Setting, error) {
8989
if len(v) == 0 {
9090
return nil, ErrSettingIsNotExist{key}
9191
}
92-
return v[key], nil
92+
return v[strings.ToLower(key)], nil
9393
}
9494

9595
// GetSetting returns the setting value via the key
@@ -132,7 +132,7 @@ func GetSettings(keys []string) (map[string]*Setting, error) {
132132
type AllSettings map[string]*Setting
133133

134134
func (settings AllSettings) Get(key string) Setting {
135-
if v, ok := settings[key]; ok {
135+
if v, ok := settings[strings.ToLower(key)]; ok {
136136
return *v
137137
}
138138
return Setting{}
@@ -185,14 +185,17 @@ func SetSettingNoVersion(key, value string) error {
185185

186186
// SetSetting updates a users' setting for a specific key
187187
func SetSetting(setting *Setting) error {
188-
_, err := cache.GetString(genSettingCacheKey(setting.SettingKey), func() (string, error) {
189-
return setting.SettingValue, upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version)
190-
})
191-
if err != nil {
188+
if err := upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version); err != nil {
192189
return err
193190
}
194191

195192
setting.Version++
193+
194+
cc := cache.GetCache()
195+
if cc != nil {
196+
return cc.Put(genSettingCacheKey(setting.SettingKey), setting.SettingValue, setting_module.CacheService.TTLSeconds())
197+
}
198+
196199
return nil
197200
}
198201

@@ -244,7 +247,7 @@ func Init() error {
244247
var disableGravatar bool
245248
disableGravatarSetting, err := GetSettingNoCache(KeyPictureDisableGravatar)
246249
if IsErrSettingIsNotExist(err) {
247-
disableGravatar = setting.GetDefaultDisableGravatar()
250+
disableGravatar = setting_module.GetDefaultDisableGravatar()
248251
disableGravatarSetting = &Setting{SettingValue: strconv.FormatBool(disableGravatar)}
249252
} else if err != nil {
250253
return err
@@ -255,24 +258,24 @@ func Init() error {
255258
var enableFederatedAvatar bool
256259
enableFederatedAvatarSetting, err := GetSettingNoCache(KeyPictureEnableFederatedAvatar)
257260
if IsErrSettingIsNotExist(err) {
258-
enableFederatedAvatar = setting.GetDefaultEnableFederatedAvatar(disableGravatar)
261+
enableFederatedAvatar = setting_module.GetDefaultEnableFederatedAvatar(disableGravatar)
259262
enableFederatedAvatarSetting = &Setting{SettingValue: strconv.FormatBool(enableFederatedAvatar)}
260263
} else if err != nil {
261264
return err
262265
} else {
263266
enableFederatedAvatar = disableGravatarSetting.GetValueBool()
264267
}
265268

266-
if setting.OfflineMode {
269+
if setting_module.OfflineMode {
267270
disableGravatar = true
268271
enableFederatedAvatar = false
269272
}
270273

271274
if enableFederatedAvatar || !disableGravatar {
272275
var err error
273-
GravatarSourceURL, err = url.Parse(setting.GravatarSource)
276+
GravatarSourceURL, err = url.Parse(setting_module.GravatarSource)
274277
if err != nil {
275-
return fmt.Errorf("Failed to parse Gravatar URL(%s): %w", setting.GravatarSource, err)
278+
return fmt.Errorf("Failed to parse Gravatar URL(%s): %w", setting_module.GravatarSource, err)
276279
}
277280
}
278281

models/system/setting_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@ func TestSettings(t *testing.T) {
3434
assert.EqualValues(t, newSetting.SettingValue, settings[strings.ToLower(keyName)].SettingValue)
3535

3636
// updated setting
37-
updatedSetting := &system.Setting{SettingKey: keyName, SettingValue: "100", Version: newSetting.Version}
37+
updatedSetting := &system.Setting{SettingKey: keyName, SettingValue: "100", Version: settings[strings.ToLower(keyName)].Version}
3838
err = system.SetSetting(updatedSetting)
3939
assert.NoError(t, err)
4040

41+
value, err := system.GetSetting(keyName)
42+
assert.NoError(t, err)
43+
assert.EqualValues(t, updatedSetting.SettingValue, value)
44+
4145
// get all settings
4246
settings, err = system.GetAllSettings()
4347
assert.NoError(t, err)

0 commit comments

Comments
 (0)