* Fix bug when upload on web * move into own function Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
parent
70e4134130
commit
a461d90415
1 changed files with 28 additions and 22 deletions
|
@ -120,7 +120,6 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
infos[i] = uploadInfo
|
infos[i] = uploadInfo
|
||||||
|
|
||||||
} else if objectHash, err = t.HashObject(file); err != nil {
|
} else if objectHash, err = t.HashObject(file); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -128,7 +127,6 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
|
||||||
// Add the object to the index
|
// Add the object to the index
|
||||||
if err := t.AddObjectToIndex("100644", objectHash, path.Join(opts.TreePath, uploadInfo.upload.Name)); err != nil {
|
if err := t.AddObjectToIndex("100644", objectHash, path.Join(opts.TreePath, uploadInfo.upload.Name)); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,28 +163,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
|
// 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.
|
// once it's in there, it's in there.
|
||||||
contentStore := &lfs.ContentStore{ObjectStorage: storage.LFS}
|
contentStore := &lfs.ContentStore{ObjectStorage: storage.LFS}
|
||||||
for _, uploadInfo := range infos {
|
for _, info := range infos {
|
||||||
if uploadInfo.lfsMetaObject == nil {
|
if err := uploadToLFSContentStore(info, contentStore); err != nil {
|
||||||
continue
|
|
||||||
}
|
|
||||||
exist, err := contentStore.Exists(uploadInfo.lfsMetaObject)
|
|
||||||
if err != nil {
|
|
||||||
return cleanUpAfterFailure(&infos, t, err)
|
return cleanUpAfterFailure(&infos, t, err)
|
||||||
}
|
}
|
||||||
if !exist {
|
|
||||||
file, err := os.Open(uploadInfo.upload.LocalPath())
|
|
||||||
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 {
|
|
||||||
// OK Now we need to cleanup
|
|
||||||
// Can't clean up the store, once uploaded there they're there.
|
|
||||||
return cleanUpAfterFailure(&infos, t, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then push this tree to NewBranch
|
// Then push this tree to NewBranch
|
||||||
|
@ -196,3 +176,29 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
|
||||||
|
|
||||||
return models.DeleteUploads(uploads...)
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue