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
					
				
					 2 changed files with 67 additions and 2 deletions
				
			
		|  | @ -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) | ||||||
|  | 
 | ||||||
|  | } | ||||||
		Loading…
	
		Reference in a new issue