mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	LFS support to be stored on minio (#12518)
* LFS support to be stored on minio * Fix test * Fix lint * Fix lint * Fix check * Fix test * Update documents and add migration for LFS * Fix some bugs
This commit is contained in:
		@@ -10,6 +10,7 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
)
 | 
			
		||||
@@ -19,10 +20,24 @@ var (
 | 
			
		||||
	ErrURLNotSupported = errors.New("url method not supported")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Object represents the object on the storage
 | 
			
		||||
type Object interface {
 | 
			
		||||
	io.ReadCloser
 | 
			
		||||
	io.Seeker
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ObjectInfo represents the object info on the storage
 | 
			
		||||
type ObjectInfo interface {
 | 
			
		||||
	Name() string
 | 
			
		||||
	Size() int64
 | 
			
		||||
	ModTime() time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ObjectStorage represents an object storage to handle a bucket and files
 | 
			
		||||
type ObjectStorage interface {
 | 
			
		||||
	Open(path string) (Object, error)
 | 
			
		||||
	Save(path string, r io.Reader) (int64, error)
 | 
			
		||||
	Open(path string) (io.ReadCloser, error)
 | 
			
		||||
	Stat(path string) (ObjectInfo, error)
 | 
			
		||||
	Delete(path string) error
 | 
			
		||||
	URL(path, name string) (*url.URL, error)
 | 
			
		||||
}
 | 
			
		||||
@@ -41,10 +56,21 @@ func Copy(dstStorage ObjectStorage, dstPath string, srcStorage ObjectStorage, sr
 | 
			
		||||
var (
 | 
			
		||||
	// Attachments represents attachments storage
 | 
			
		||||
	Attachments ObjectStorage
 | 
			
		||||
 | 
			
		||||
	// LFS represents lfs storage
 | 
			
		||||
	LFS ObjectStorage
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Init init the stoarge
 | 
			
		||||
func Init() error {
 | 
			
		||||
	if err := initAttachments(); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return initLFS()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func initAttachments() error {
 | 
			
		||||
	var err error
 | 
			
		||||
	switch setting.Attachment.StoreType {
 | 
			
		||||
	case "local":
 | 
			
		||||
@@ -71,3 +97,31 @@ func Init() error {
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func initLFS() error {
 | 
			
		||||
	var err error
 | 
			
		||||
	switch setting.LFS.StoreType {
 | 
			
		||||
	case "local":
 | 
			
		||||
		LFS, err = NewLocalStorage(setting.LFS.ContentPath)
 | 
			
		||||
	case "minio":
 | 
			
		||||
		minio := setting.LFS.Minio
 | 
			
		||||
		LFS, err = NewMinioStorage(
 | 
			
		||||
			context.Background(),
 | 
			
		||||
			minio.Endpoint,
 | 
			
		||||
			minio.AccessKeyID,
 | 
			
		||||
			minio.SecretAccessKey,
 | 
			
		||||
			minio.Bucket,
 | 
			
		||||
			minio.Location,
 | 
			
		||||
			minio.BasePath,
 | 
			
		||||
			minio.UseSSL,
 | 
			
		||||
		)
 | 
			
		||||
	default:
 | 
			
		||||
		return fmt.Errorf("Unsupported LFS store type: %s", setting.LFS.StoreType)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user