@ -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,34 +163,42 @@ 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
return cleanUpAfterFailure ( & infos , t , err )
}
}
// Then push this tree to NewBranch
if err := t . Push ( doer , commitHash , opts . NewBranch ) ; err != nil {
return err
}
return models . DeleteUploads ( uploads ... )
}
func uploadToLFSContentStore ( info uploadInfo , contentStore * lfs . ContentStore ) error {
if info . lfsMetaObject == nil {
return nil
}
}
exist , err := contentStore . Exists ( uploadInfo . lfsMetaObject )
exist , err := contentStore . Exists ( i nfo. lfsMetaObject )
if err != nil {
if err != nil {
return cleanUpAfterFailure ( & infos , t , err )
return err
}
}
if ! exist {
if ! exist {
file , err := os . Open ( uploadInfo . upload . LocalPath ( ) )
file , err := os . Open ( i nfo. upload . LocalPath ( ) )
if err != nil {
if err != nil {
return cleanUpAfterFailure ( & infos , t , err )
return err
}
}
defer file . Close ( )
defer file . Close ( )
// FIXME: Put regenerates the hash and copies the file over.
// FIXME: Put regenerates the hash and copies the file over.
// I guess this strictly ensures the soundness of the store but this is inefficient.
// I guess this strictly ensures the soundness of the store but this is inefficient.
if err := contentStore . Put ( uploadInfo . lfsMetaObject , file ) ; err != nil {
if err := contentStore . Put ( i nfo. lfsMetaObject , file ) ; err != nil {
// OK Now we need to cleanup
// OK Now we need to cleanup
// Can't clean up the store, once uploaded there they're there.
// Can't clean up the store, once uploaded there they're there.
return cleanUpAfterFailure ( & infos , t , err )
}
}
}
// Then push this tree to NewBranch
if err := t . Push ( doer , commitHash , opts . NewBranch ) ; err != nil {
return err
return err
}
}
}
return models . DeleteUploads ( uploads ... )
return nil
}
}