invoke config listeners when app.UpdateConfig is used (#7773)
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
2acb548615
Коммит
85efdd6b5b
@@ -253,7 +253,9 @@ func (a *App) Config() *model.Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) UpdateConfig(f func(*model.Config)) {
|
func (a *App) UpdateConfig(f func(*model.Config)) {
|
||||||
|
old := utils.Cfg.Clone()
|
||||||
f(utils.Cfg)
|
f(utils.Cfg)
|
||||||
|
utils.InvokeGlobalConfigListeners(old, utils.Cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) PersistConfig() {
|
func (a *App) PersistConfig() {
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ import (
|
|||||||
|
|
||||||
l4g "github.com/alecthomas/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
"github.com/mattermost/mattermost-server/store/storetest"
|
"github.com/mattermost/mattermost-server/store/storetest"
|
||||||
"github.com/mattermost/mattermost-server/utils"
|
"github.com/mattermost/mattermost-server/utils"
|
||||||
)
|
)
|
||||||
@@ -49,3 +52,23 @@ func TestAppRace(t *testing.T) {
|
|||||||
a.Shutdown()
|
a.Shutdown()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUpdateConfig(t *testing.T) {
|
||||||
|
th := Setup()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
prev := *th.App.Config().ServiceSettings.SiteURL
|
||||||
|
defer th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
|
*cfg.ServiceSettings.SiteURL = prev
|
||||||
|
})
|
||||||
|
|
||||||
|
listener := utils.AddConfigListener(func(old, current *model.Config) {
|
||||||
|
assert.Equal(t, prev, *old.ServiceSettings.SiteURL)
|
||||||
|
assert.Equal(t, "foo", *current.ServiceSettings.SiteURL)
|
||||||
|
})
|
||||||
|
defer utils.RemoveConfigListener(listener)
|
||||||
|
|
||||||
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
|
*cfg.ServiceSettings.SiteURL = "foo"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -414,13 +414,17 @@ func LoadGlobalConfig(fileName string) *model.Config {
|
|||||||
SetDefaultRolesBasedOnConfig()
|
SetDefaultRolesBasedOnConfig()
|
||||||
SetSiteURL(*Cfg.ServiceSettings.SiteURL)
|
SetSiteURL(*Cfg.ServiceSettings.SiteURL)
|
||||||
|
|
||||||
for _, listener := range cfgListeners {
|
InvokeGlobalConfigListeners(&oldConfig, config)
|
||||||
listener(&oldConfig, config)
|
|
||||||
}
|
|
||||||
|
|
||||||
return config
|
return config
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func InvokeGlobalConfigListeners(old, current *model.Config) {
|
||||||
|
for _, listener := range cfgListeners {
|
||||||
|
listener(old, current)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func RegenerateClientConfig() {
|
func RegenerateClientConfig() {
|
||||||
ClientCfg = getClientConfig(Cfg)
|
ClientCfg = getClientConfig(Cfg)
|
||||||
}
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user