diff options
Diffstat (limited to 'modules/repofiles/upload.go')
-rw-r--r-- | modules/repofiles/upload.go | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/modules/repofiles/upload.go b/modules/repofiles/upload.go index a2e7cc927c..eb1379560d 100644 --- a/modules/repofiles/upload.go +++ b/modules/repofiles/upload.go @@ -55,6 +55,23 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep return fmt.Errorf("GetUploadsByUUIDs [uuids: %v]: %v", opts.Files, err) } + names := make([]string, len(uploads)) + infos := make([]uploadInfo, len(uploads)) + for i, upload := range uploads { + // Check file is not lfs locked, will return nil if lock setting not enabled + filepath := path.Join(opts.TreePath, upload.Name) + lfsLock, err := repo.GetTreePathLock(filepath) + if err != nil { + return err + } + if lfsLock != nil && lfsLock.OwnerID != doer.ID { + return models.ErrLFSFileLocked{RepoID: repo.ID, Path: filepath, UserName: lfsLock.Owner.Name} + } + + names[i] = upload.Name + infos[i] = uploadInfo{upload: upload} + } + t, err := NewTemporaryUploadRepository(repo) if err != nil { return err @@ -67,13 +84,6 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep return err } - names := make([]string, len(uploads)) - infos := make([]uploadInfo, len(uploads)) - for i, upload := range uploads { - names[i] = upload.Name - infos[i] = uploadInfo{upload: upload} - } - var filename2attribute2info map[string]map[string]string if setting.LFS.StartServer { filename2attribute2info, err = t.CheckAttribute("filter", names...) |