mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09: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:
		| @@ -37,16 +37,15 @@ func IsErrInvalidConfiguration(err error) bool { | ||||
| 	return ok | ||||
| } | ||||
|  | ||||
| // Type is a type of Storage | ||||
| type Type string | ||||
| type Type = setting.StorageType | ||||
|  | ||||
| // NewStorageFunc is a function that creates a storage | ||||
| type NewStorageFunc func(ctx context.Context, cfg interface{}) (ObjectStorage, error) | ||||
| type NewStorageFunc func(ctx context.Context, cfg *setting.Storage) (ObjectStorage, error) | ||||
|  | ||||
| var storageMap = map[Type]NewStorageFunc{} | ||||
|  | ||||
| // RegisterStorageType registers a provided storage type with a function to create it | ||||
| func RegisterStorageType(typ Type, fn func(ctx context.Context, cfg interface{}) (ObjectStorage, error)) { | ||||
| func RegisterStorageType(typ Type, fn func(ctx context.Context, cfg *setting.Storage) (ObjectStorage, error)) { | ||||
| 	storageMap[typ] = fn | ||||
| } | ||||
|  | ||||
| @@ -151,11 +150,11 @@ func Init() error { | ||||
| } | ||||
|  | ||||
| // NewStorage takes a storage type and some config and returns an ObjectStorage or an error | ||||
| func NewStorage(typStr string, cfg interface{}) (ObjectStorage, error) { | ||||
| func NewStorage(typStr Type, cfg *setting.Storage) (ObjectStorage, error) { | ||||
| 	if len(typStr) == 0 { | ||||
| 		typStr = string(LocalStorageType) | ||||
| 		typStr = setting.LocalStorageType | ||||
| 	} | ||||
| 	fn, ok := storageMap[Type(typStr)] | ||||
| 	fn, ok := storageMap[typStr] | ||||
| 	if !ok { | ||||
| 		return nil, fmt.Errorf("Unsupported storage type: %s", typStr) | ||||
| 	} | ||||
| @@ -165,7 +164,7 @@ func NewStorage(typStr string, cfg interface{}) (ObjectStorage, error) { | ||||
|  | ||||
| func initAvatars() (err error) { | ||||
| 	log.Info("Initialising Avatar storage with type: %s", setting.Avatar.Storage.Type) | ||||
| 	Avatars, err = NewStorage(setting.Avatar.Storage.Type, &setting.Avatar.Storage) | ||||
| 	Avatars, err = NewStorage(setting.Avatar.Storage.Type, setting.Avatar.Storage) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -175,7 +174,7 @@ func initAttachments() (err error) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	log.Info("Initialising Attachment storage with type: %s", setting.Attachment.Storage.Type) | ||||
| 	Attachments, err = NewStorage(setting.Attachment.Storage.Type, &setting.Attachment.Storage) | ||||
| 	Attachments, err = NewStorage(setting.Attachment.Storage.Type, setting.Attachment.Storage) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -185,19 +184,19 @@ func initLFS() (err error) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	log.Info("Initialising LFS storage with type: %s", setting.LFS.Storage.Type) | ||||
| 	LFS, err = NewStorage(setting.LFS.Storage.Type, &setting.LFS.Storage) | ||||
| 	LFS, err = NewStorage(setting.LFS.Storage.Type, setting.LFS.Storage) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func initRepoAvatars() (err error) { | ||||
| 	log.Info("Initialising Repository Avatar storage with type: %s", setting.RepoAvatar.Storage.Type) | ||||
| 	RepoAvatars, err = NewStorage(setting.RepoAvatar.Storage.Type, &setting.RepoAvatar.Storage) | ||||
| 	RepoAvatars, err = NewStorage(setting.RepoAvatar.Storage.Type, setting.RepoAvatar.Storage) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func initRepoArchives() (err error) { | ||||
| 	log.Info("Initialising Repository Archive storage with type: %s", setting.RepoArchive.Storage.Type) | ||||
| 	RepoArchives, err = NewStorage(setting.RepoArchive.Storage.Type, &setting.RepoArchive.Storage) | ||||
| 	RepoArchives, err = NewStorage(setting.RepoArchive.Storage.Type, setting.RepoArchive.Storage) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -207,7 +206,7 @@ func initPackages() (err error) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	log.Info("Initialising Packages storage with type: %s", setting.Packages.Storage.Type) | ||||
| 	Packages, err = NewStorage(setting.Packages.Storage.Type, &setting.Packages.Storage) | ||||
| 	Packages, err = NewStorage(setting.Packages.Storage.Type, setting.Packages.Storage) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -218,10 +217,10 @@ func initActions() (err error) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	log.Info("Initialising Actions storage with type: %s", setting.Actions.LogStorage.Type) | ||||
| 	if Actions, err = NewStorage(setting.Actions.LogStorage.Type, &setting.Actions.LogStorage); err != nil { | ||||
| 	if Actions, err = NewStorage(setting.Actions.LogStorage.Type, setting.Actions.LogStorage); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	log.Info("Initialising ActionsArtifacts storage with type: %s", setting.Actions.ArtifactStorage.Type) | ||||
| 	ActionsArtifacts, err = NewStorage(setting.Actions.ArtifactStorage.Type, &setting.Actions.ArtifactStorage) | ||||
| 	ActionsArtifacts, err = NewStorage(setting.Actions.ArtifactStorage.Type, setting.Actions.ArtifactStorage) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user