summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorDavid Svantesson <davidsvantesson@gmail.com>2019-11-02 08:37:05 +0100
committerLunny Xiao <xiaolunwen@gmail.com>2019-11-02 15:37:05 +0800
commit232340f5e3ebe61787021bebea01fd755513c72b (patch)
tree513182b15c4d977bc64dcabafddd536eab4a8bbc /modules
parent9d663dfde68f4f3fd6af302aad47439adb1076ae (diff)
downloadgitea-232340f5e3ebe61787021bebea01fd755513c72b.tar.gz
gitea-232340f5e3ebe61787021bebea01fd755513c72b.zip
Prevent upload (overwrite) of lfs locked file (#8769)
* Check if file is locked on upload file commit. * Better user message if file is locked. * Check lfs lock before creating temporary repository. fix some errors. * move lines * Add comment that enabled setting is checked.
Diffstat (limited to 'modules')
-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...)