mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 05:25:15 +01:00 
			
		
		
		
	Allow extended config on cron settings (#12939)
* Allow extended config on cron settings Fix #12934 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
							parent
							
								
									3c360801b3
								
							
						
					
					
						commit
						f1ab1c532b
					
				@ -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)
 | 
			
		||||
	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
									
								
								modules/setting/cron_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								modules/setting/cron_test.go
									
									
									
									
									
										Normal 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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user