aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2020-09-08 23:45:10 +0800
committerGitHub <noreply@github.com>2020-09-08 23:45:10 +0800
commit7a5465fc56f79f5fc3c32547c89a80b7ebb24c8f (patch)
treec663ce5f0f37e13d950384fd76428c422adfb06d /models
parente4b3f35b8d68d6409a280a8e644759e10b091cb1 (diff)
downloadgitea-7a5465fc56f79f5fc3c32547c89a80b7ebb24c8f.tar.gz
gitea-7a5465fc56f79f5fc3c32547c89a80b7ebb24c8f.zip
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
Diffstat (limited to 'models')
-rw-r--r--models/lfs.go32
-rw-r--r--models/unit_tests.go1
2 files changed, 33 insertions, 0 deletions
diff --git a/models/lfs.go b/models/lfs.go
index 7a04f799c0..274b32a736 100644
--- a/models/lfs.go
+++ b/models/lfs.go
@@ -10,6 +10,7 @@ import (
"errors"
"fmt"
"io"
+ "path"
"code.gitea.io/gitea/modules/timeutil"
@@ -26,6 +27,15 @@ type LFSMetaObject struct {
CreatedUnix timeutil.TimeStamp `xorm:"created"`
}
+// RelativePath returns the relative path of the lfs object
+func (m *LFSMetaObject) RelativePath() string {
+ if len(m.Oid) < 5 {
+ return m.Oid
+ }
+
+ return path.Join(m.Oid[0:2], m.Oid[2:4], m.Oid[4:])
+}
+
// Pointer returns the string representation of an LFS pointer file
func (m *LFSMetaObject) Pointer() string {
return fmt.Sprintf("%s\n%s%s\nsize %d\n", LFSMetaFileIdentifier, LFSMetaFileOidPrefix, m.Oid, m.Size)
@@ -202,3 +212,25 @@ func LFSAutoAssociate(metas []*LFSMetaObject, user *User, repoID int64) error {
return sess.Commit()
}
+
+// IterateLFS iterates lfs object
+func IterateLFS(f func(mo *LFSMetaObject) error) error {
+ var start int
+ const batchSize = 100
+ for {
+ var mos = make([]*LFSMetaObject, 0, batchSize)
+ if err := x.Limit(batchSize, start).Find(&mos); err != nil {
+ return err
+ }
+ if len(mos) == 0 {
+ return nil
+ }
+ start += len(mos)
+
+ for _, mo := range mos {
+ if err := f(mo); err != nil {
+ return err
+ }
+ }
+ }
+}
diff --git a/models/unit_tests.go b/models/unit_tests.go
index 11b7708ffd..e977f706f8 100644
--- a/models/unit_tests.go
+++ b/models/unit_tests.go
@@ -69,6 +69,7 @@ func MainTest(m *testing.M, pathToGiteaRoot string) {
}
setting.Attachment.Path = filepath.Join(setting.AppDataPath, "attachments")
+ setting.LFS.ContentPath = filepath.Join(setting.AppDataPath, "lfs")
if err = storage.Init(); err != nil {
fatalTestError("storage.Init: %v\n", err)
}