aboutsummaryrefslogtreecommitdiffstats
path: root/models/lfs.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/lfs.go')
-rw-r--r--models/lfs.go32
1 files changed, 32 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
+ }
+ }
+ }
+}