@@ -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+
185188func uploadToLFSContentStore (info uploadInfo , contentStore * lfs.ContentStore ) error {
186189 if info .lfsMetaObject == nil {
187190 return nil
0 commit comments