diff options
Diffstat (limited to 'modules/storage/storage.go')
-rw-r--r-- | modules/storage/storage.go | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/modules/storage/storage.go b/modules/storage/storage.go index 8528ebc5cb..e355d2459f 100644 --- a/modules/storage/storage.go +++ b/modules/storage/storage.go @@ -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 +} |