From 9145d3d008b1a768eb83b1e28d7c818dc0e4ac2d Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 19 Mar 2021 21:40:27 +0800 Subject: [PATCH 1/4] Fix bug when upload on web --- modules/repofiles/upload.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/repofiles/upload.go b/modules/repofiles/upload.go index 2846e6c44b8c1..33b85af2732bb 100644 --- a/modules/repofiles/upload.go +++ b/modules/repofiles/upload.go @@ -125,7 +125,6 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep return err } infos[i] = uploadInfo - } else if objectHash, err = t.HashObject(file); err != nil { return err } @@ -133,7 +132,6 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep // Add the object to the index if err := t.AddObjectToIndex("100644", objectHash, path.Join(opts.TreePath, uploadInfo.upload.Name)); err != nil { return err - } } @@ -191,6 +189,7 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep // Can't clean up the store, once uploaded there they're there. return cleanUpAfterFailure(&infos, t, err) } + file.Close() } } From 25f20f36153125abe47da2e13f92f1f966931960 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Fri, 19 Mar 2021 19:00:59 +0100 Subject: [PATCH 2/4] rm defer --- modules/repofiles/upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/repofiles/upload.go b/modules/repofiles/upload.go index 33b85af2732bb..c8a1288ee4a2d 100644 --- a/modules/repofiles/upload.go +++ b/modules/repofiles/upload.go @@ -181,10 +181,10 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep if err != nil { return cleanUpAfterFailure(&infos, t, err) } - defer file.Close() // FIXME: Put regenerates the hash and copies the file over. // I guess this strictly ensures the soundness of the store but this is inefficient. if err := contentStore.Put(uploadInfo.lfsMetaObject, file); err != nil { + file.Close() // OK Now we need to cleanup // Can't clean up the store, once uploaded there they're there. return cleanUpAfterFailure(&infos, t, err) From b42af4801de09c9b5f41a0bb8885c527c48f83e4 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Fri, 19 Mar 2021 19:16:57 +0100 Subject: [PATCH 3/4] move into own func --- modules/repofiles/upload.go | 48 +++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/modules/repofiles/upload.go b/modules/repofiles/upload.go index c8a1288ee4a2d..682a0426e97c3 100644 --- a/modules/repofiles/upload.go +++ b/modules/repofiles/upload.go @@ -168,29 +168,10 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep // OK now we can insert the data into the store - there's no way to clean up the store // once it's in there, it's in there. contentStore := &lfs.ContentStore{ObjectStorage: storage.LFS} - for _, uploadInfo := range infos { - if uploadInfo.lfsMetaObject == nil { - continue - } - exist, err := contentStore.Exists(uploadInfo.lfsMetaObject) - if err != nil { + for _, info := range infos { + if err := uploadToLFSContentStore(info, contentStore); err != nil { return cleanUpAfterFailure(&infos, t, err) } - if !exist { - file, err := os.Open(uploadInfo.upload.LocalPath()) - if err != nil { - return cleanUpAfterFailure(&infos, t, err) - } - // FIXME: Put regenerates the hash and copies the file over. - // I guess this strictly ensures the soundness of the store but this is inefficient. - if err := contentStore.Put(uploadInfo.lfsMetaObject, file); err != nil { - file.Close() - // OK Now we need to cleanup - // Can't clean up the store, once uploaded there they're there. - return cleanUpAfterFailure(&infos, t, err) - } - file.Close() - } } // Then push this tree to NewBranch @@ -200,3 +181,28 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep return models.DeleteUploads(uploads...) } + +func uploadToLFSContentStore(info uploadInfo, contentStore *lfs.ContentStore) error { + if info.lfsMetaObject == nil { + return nil + } + exist, err := contentStore.Exists(info.lfsMetaObject) + if err != nil { + return err + } + if !exist { + file, err := os.Open(info.upload.LocalPath()) + if err != nil { + return err + } + + defer file.Close() + // FIXME: Put regenerates the hash and copies the file over. + // I guess this strictly ensures the soundness of the store but this is inefficient. + if err := contentStore.Put(info.lfsMetaObject, file); err != nil { + // OK Now we need to cleanup + // Can't clean up the store, once uploaded there they're there. + return err + } + } +} From de68390920efd2201b1c4774e3da3672fbb4d12d Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Fri, 19 Mar 2021 20:14:40 +0000 Subject: [PATCH 4/4] add missing return Signed-off-by: Andrew Thornton --- modules/repofiles/upload.go | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/repofiles/upload.go b/modules/repofiles/upload.go index 682a0426e97c3..13c89f55b6996 100644 --- a/modules/repofiles/upload.go +++ b/modules/repofiles/upload.go @@ -205,4 +205,5 @@ func uploadToLFSContentStore(info uploadInfo, contentStore *lfs.ContentStore) er return err } } + return nil }