Browse Source

Allow extended config on cron settings (#12939) (#12943)

Backport #12939

Fix #12934

Signed-off-by: Andrew Thornton <art27@cantab.net>
tags/v1.12.5
zeripath 3 years ago
parent
commit
e9346fc4a9
No account linked to committer's email address
2 changed files with 67 additions and 2 deletions
  1. 20
    2
      modules/setting/cron.go
  2. 47
    0
      modules/setting/cron_test.go

+ 20
- 2
modules/setting/cron.go View File

@@ -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
- 0
modules/setting/cron_test.go View File

@@ -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)

}

Loading…
Cancel
Save