mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 19:06:18 +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:
		| @@ -4,8 +4,26 @@ | |||||||
|  |  | ||||||
| package setting | package setting | ||||||
|  |  | ||||||
|  | import "reflect" | ||||||
|  |  | ||||||
| // GetCronSettings maps the cron subsection to the provided config | // GetCronSettings maps the cron subsection to the provided config | ||||||
| func GetCronSettings(name string, config interface{}) (interface{}, error) { | 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 | 		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) | ||||||
|  |  | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user