Skip to content

Commit

Permalink
Allow extended config on cron settings (go-gitea#12939) (go-gitea#12943)
Browse files Browse the repository at this point in the history
Backport go-gitea#12939

Fix go-gitea#12934

Signed-off-by: Andrew Thornton <art27@cantab.net>
  • Loading branch information
zeripath authored Sep 25, 2020
1 parent b62e13a commit e9346fc
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 2 deletions.
22 changes: 20 additions & 2 deletions modules/setting/cron.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,26 @@

package setting

import "reflect"

// GetCronSettings maps the cron subsection to the provided config
func GetCronSettings(name string, config interface{}) (interface{}, error) {
err := Cfg.Section("cron." + name).MapTo(config)
return config, err
if err := Cfg.Section("cron." + name).MapTo(config); err != nil {
return config, err
}

typ := reflect.TypeOf(config).Elem()
val := reflect.ValueOf(config).Elem()

for i := 0; i < typ.NumField(); i++ {
field := val.Field(i)
tpField := typ.Field(i)
if tpField.Type.Kind() == reflect.Struct && tpField.Anonymous {
if err := Cfg.Section("cron." + name).MapTo(field.Addr().Interface()); err != nil {
return config, err
}
}
}

return config, nil
}
47 changes: 47 additions & 0 deletions modules/setting/cron_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright 2020 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package setting

import (
"testing"

"github.com/stretchr/testify/assert"
ini "gopkg.in/ini.v1"
)

func Test_GetCronSettings(t *testing.T) {

type BaseStruct struct {
Base bool
Second string
}

type Extended struct {
BaseStruct
Extend bool
}

iniStr := `
[cron.test]
Base = true
Second = white rabbit
Extend = true
`
Cfg, _ = ini.Load([]byte(iniStr))

extended := &Extended{
BaseStruct: BaseStruct{
Second: "queen of hearts",
},
}

_, err := GetCronSettings("test", extended)

assert.NoError(t, err)
assert.True(t, extended.Base)
assert.EqualValues(t, extended.Second, "white rabbit")
assert.True(t, extended.Extend)

}

0 comments on commit e9346fc

Please sign in to comment.