Skip to content

Commit 4c649db

Browse files
committed
add fetchingMetaObjectsSet
1 parent 61599e8 commit 4c649db

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

models/lfs.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ type LFSMetaObject struct {
3434

3535
// LFSMetaObjectBasic represents basic LFS metadata.
3636
type LFSMetaObjectBasic struct {
37-
Oid string `xorm:"UNIQUE(s) INDEX NOT NULL"`
38-
Size int64 `xorm:"NOT NULL"`
37+
Oid string `xorm:"UNIQUE(s) INDEX NOT NULL"`
38+
Size int64 `xorm:"NOT NULL"`
3939
}
4040

4141
// IsPointerFile will return a partially filled LFSMetaObject if the provided byte slice is a pointer file

modules/repository/repo.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func MigrateRepositoryGitData(ctx context.Context, u *models.User, repo *models.
100100
defer gitRepo.Close()
101101

102102
if opts.LFS {
103-
err := FetchLFSFilesToContentStore(ctx, repo, u.Name, gitRepo, opts.LFSServer, opts.LFSFetchOlder)
103+
err := FetchMissingLFSFilesToContentStore(ctx, repo, u.Name, gitRepo, opts.LFSServer, opts.LFSFetchOlder)
104104
if err != nil {
105105
return repo, fmt.Errorf("Failed to fetch LFS files: %v", err)
106106
}
@@ -174,15 +174,15 @@ func MigrateRepositoryGitData(ctx context.Context, u *models.User, repo *models.
174174
return repo, err
175175
}
176176

177-
func FetchLFSFilesToContentStore(ctx context.Context, repo *models.Repository, userName string, gitRepo *git.Repository, LFSServer string, LFSFetchOlder bool) error {
178-
fetchingMetaObjects := []*models.LFSMetaObject{}
177+
func FetchMissingLFSFilesToContentStore(ctx context.Context, repo *models.Repository, userName string, gitRepo *git.Repository, LFSServer string, LFSFetchOlder bool) error {
178+
fetchingMetaObjectsSet := make(map[string]*models.LFSMetaObject)
179179
var err error
180180

181181
// scan repo for pointer files
182182
headBranch, _ := gitRepo.GetHEADBranch()
183183
headCommit, _ := gitRepo.GetCommit(headBranch.Name)
184184

185-
err = FindLFSMetaObjectsBelowMaxFileSize(headCommit, userName, repo, &fetchingMetaObjects)
185+
err = FindLFSMetaObjectsBelowMaxFileSizeWithMissingFiles(headCommit, userName, repo, &fetchingMetaObjectsSet)
186186
if err != nil {
187187
log.Error("Failed to access git LFS meta objects on commit %s: %v", headCommit.ID.String(), err)
188188
return err
@@ -199,14 +199,19 @@ func FetchLFSFilesToContentStore(ctx context.Context, repo *models.Repository, u
199199

200200
for e := commitsList.Front(); e != nil; e = e.Next() {
201201
commit := e.Value.(*git.Commit)
202-
err = FindLFSMetaObjectsBelowMaxFileSize(commit, userName, repo, &fetchingMetaObjects)
202+
err = FindLFSMetaObjectsBelowMaxFileSizeWithMissingFiles(commit, userName, repo, &fetchingMetaObjectsSet)
203203
if err != nil {
204204
log.Error("Failed to access git LFS meta objects on commit %s: %v", commit.ID.String(), err)
205205
return err
206206
}
207207
}
208208
}
209209

210+
fetchingMetaObjects := []*models.LFSMetaObject{}
211+
for metaID := range fetchingMetaObjectsSet {
212+
fetchingMetaObjects = append(fetchingMetaObjects, fetchingMetaObjectsSet[metaID])
213+
}
214+
210215
// fetch LFS files from external server
211216
err = lfsclient.FetchLFSFilesToContentStore(ctx, fetchingMetaObjects, userName, repo, LFSServer)
212217
if err != nil {
@@ -217,7 +222,7 @@ func FetchLFSFilesToContentStore(ctx context.Context, repo *models.Repository, u
217222
return nil
218223
}
219224

220-
func FindLFSMetaObjectsBelowMaxFileSize(commit *git.Commit, userName string, repo *models.Repository, fetchingMetaObjects *[]*models.LFSMetaObject) error {
225+
func FindLFSMetaObjectsBelowMaxFileSizeWithMissingFiles(commit *git.Commit, userName string, repo *models.Repository, fetchingMetaObjectsSet *map[string]*models.LFSMetaObject) error {
221226
entries, err := commit.Tree.ListEntriesRecursive()
222227
if err != nil {
223228
log.Error("Failed to access git commit %s tree: %v", commit.ID.String(), err)
@@ -241,7 +246,7 @@ func FindLFSMetaObjectsBelowMaxFileSize(commit *git.Commit, userName string, rep
241246
log.Error("Unable to write LFS OID[%s] size %d meta object in %v/%v to database. Error: %v", meta.Oid, meta.Size, userName, repo.Name, err)
242247
return err
243248
}
244-
*fetchingMetaObjects = append(*fetchingMetaObjects, meta)
249+
(*fetchingMetaObjectsSet)[meta.Oid] = meta
245250
}
246251
return nil
247252
}

0 commit comments

Comments
 (0)