diff options
author | David Svantesson <davidsvantesson@gmail.com> | 2019-11-02 08:37:05 +0100 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2019-11-02 15:37:05 +0800 |
commit | 232340f5e3ebe61787021bebea01fd755513c72b (patch) | |
tree | 513182b15c4d977bc64dcabafddd536eab4a8bbc /modules | |
parent | 9d663dfde68f4f3fd6af302aad47439adb1076ae (diff) | |
download | gitea-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.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...) |