summaryrefslogtreecommitdiffstats
path: root/modules/repofiles/upload.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/repofiles/upload.go')
-rw-r--r--modules/repofiles/upload.go24
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...)