mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Fix all possible setting error related storages and added some tests (#23911)
Follow up #22405 Fix #20703 This PR rewrites storage configuration read sequences with some breaks and tests. It becomes more strict than before and also fixed some inherit problems. - Move storage's MinioConfig struct into setting, so after the configuration loading, the values will be stored into the struct but not still on some section. - All storages configurations should be stored on one section, configuration items cannot be overrided by multiple sections. The prioioty of configuration is `[attachment]` > `[storage.attachments]` | `[storage.customized]` > `[storage]` > `default` - For extra override configuration items, currently are `SERVE_DIRECT`, `MINIO_BASE_PATH`, `MINIO_BUCKET`, which could be configured in another section. The prioioty of the override configuration is `[attachment]` > `[storage.attachments]` > `default`. - Add more tests for storages configurations. - Update the storage documentations. --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		@@ -12,20 +12,12 @@ import (
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var _ ObjectStorage = &LocalStorage{}
 | 
			
		||||
 | 
			
		||||
// LocalStorageType is the type descriptor for local storage
 | 
			
		||||
const LocalStorageType Type = "local"
 | 
			
		||||
 | 
			
		||||
// LocalStorageConfig represents the configuration for a local storage
 | 
			
		||||
type LocalStorageConfig struct {
 | 
			
		||||
	Path          string `ini:"PATH"`
 | 
			
		||||
	TemporaryPath string `ini:"TEMPORARY_PATH"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LocalStorage represents a local files storage
 | 
			
		||||
type LocalStorage struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
@@ -34,13 +26,7 @@ type LocalStorage struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewLocalStorage returns a local files
 | 
			
		||||
func NewLocalStorage(ctx context.Context, cfg interface{}) (ObjectStorage, error) {
 | 
			
		||||
	configInterface, err := toConfig(LocalStorageConfig{}, cfg)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	config := configInterface.(LocalStorageConfig)
 | 
			
		||||
 | 
			
		||||
func NewLocalStorage(ctx context.Context, config *setting.Storage) (ObjectStorage, error) {
 | 
			
		||||
	if !filepath.IsAbs(config.Path) {
 | 
			
		||||
		return nil, fmt.Errorf("LocalStorageConfig.Path should have been prepared by setting/storage.go and should be an absolute path, but not: %q", config.Path)
 | 
			
		||||
	}
 | 
			
		||||
@@ -164,5 +150,5 @@ func (l *LocalStorage) IterateObjects(dirName string, fn func(path string, obj O
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	RegisterStorageType(LocalStorageType, NewLocalStorage)
 | 
			
		||||
	RegisterStorageType(setting.LocalStorageType, NewLocalStorage)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user