Skip to content

Commit 78e8f62

Browse files
6543zeripath
andauthored
[Refactor] remove possible resource leak (#15067)
* move "copy uploaded lfs files 2 repo" to own function for "defer file.Close()" * rm type overload * Update modules/repofiles/upload.go Co-authored-by: zeripath <[email protected]>
1 parent 9ed9ed9 commit 78e8f62

File tree

1 file changed

+38
-35
lines changed

1 file changed

+38
-35
lines changed

modules/repofiles/upload.go

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -99,38 +99,8 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
9999
}
100100

101101
// Copy uploaded files into repository.
102-
for i, uploadInfo := range infos {
103-
file, err := os.Open(uploadInfo.upload.LocalPath())
104-
if err != nil {
105-
return err
106-
}
107-
defer file.Close()
108-
109-
var objectHash string
110-
if setting.LFS.StartServer && filename2attribute2info[uploadInfo.upload.Name] != nil && filename2attribute2info[uploadInfo.upload.Name]["filter"] == "lfs" {
111-
// Handle LFS
112-
// FIXME: Inefficient! this should probably happen in models.Upload
113-
oid, err := models.GenerateLFSOid(file)
114-
if err != nil {
115-
return err
116-
}
117-
fileInfo, err := file.Stat()
118-
if err != nil {
119-
return err
120-
}
121-
122-
uploadInfo.lfsMetaObject = &models.LFSMetaObject{Oid: oid, Size: fileInfo.Size(), RepositoryID: t.repo.ID}
123-
124-
if objectHash, err = t.HashObject(strings.NewReader(uploadInfo.lfsMetaObject.Pointer())); err != nil {
125-
return err
126-
}
127-
infos[i] = uploadInfo
128-
} else if objectHash, err = t.HashObject(file); err != nil {
129-
return err
130-
}
131-
132-
// Add the object to the index
133-
if err := t.AddObjectToIndex("100644", objectHash, path.Join(opts.TreePath, uploadInfo.upload.Name)); err != nil {
102+
for i := range infos {
103+
if err := copyUploadedLFSFileIntoRepository(&infos[i], filename2attribute2info, t, opts.TreePath); err != nil {
134104
return err
135105
}
136106
}
@@ -152,11 +122,11 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
152122
}
153123

154124
// Now deal with LFS objects
155-
for _, uploadInfo := range infos {
156-
if uploadInfo.lfsMetaObject == nil {
125+
for i := range infos {
126+
if infos[i].lfsMetaObject == nil {
157127
continue
158128
}
159-
uploadInfo.lfsMetaObject, err = models.NewLFSMetaObject(uploadInfo.lfsMetaObject)
129+
infos[i].lfsMetaObject, err = models.NewLFSMetaObject(infos[i].lfsMetaObject)
160130
if err != nil {
161131
// OK Now we need to cleanup
162132
return cleanUpAfterFailure(&infos, t, err)
@@ -182,6 +152,39 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
182152
return models.DeleteUploads(uploads...)
183153
}
184154

155+
func copyUploadedLFSFileIntoRepository(info *uploadInfo, filename2attribute2info map[string]map[string]string, t *TemporaryUploadRepository, treePath string) error {
156+
file, err := os.Open(info.upload.LocalPath())
157+
if err != nil {
158+
return err
159+
}
160+
defer file.Close()
161+
162+
var objectHash string
163+
if setting.LFS.StartServer && filename2attribute2info[info.upload.Name] != nil && filename2attribute2info[info.upload.Name]["filter"] == "lfs" {
164+
// Handle LFS
165+
// FIXME: Inefficient! this should probably happen in models.Upload
166+
oid, err := models.GenerateLFSOid(file)
167+
if err != nil {
168+
return err
169+
}
170+
fileInfo, err := file.Stat()
171+
if err != nil {
172+
return err
173+
}
174+
175+
info.lfsMetaObject = &models.LFSMetaObject{Oid: oid, Size: fileInfo.Size(), RepositoryID: t.repo.ID}
176+
177+
if objectHash, err = t.HashObject(strings.NewReader(info.lfsMetaObject.Pointer())); err != nil {
178+
return err
179+
}
180+
} else if objectHash, err = t.HashObject(file); err != nil {
181+
return err
182+
}
183+
184+
// Add the object to the index
185+
return t.AddObjectToIndex("100644", objectHash, path.Join(treePath, info.upload.Name))
186+
}
187+
185188
func uploadToLFSContentStore(info uploadInfo, contentStore *lfs.ContentStore) error {
186189
if info.lfsMetaObject == nil {
187190
return nil

0 commit comments

Comments
 (0)