diff options
author | Douwe Maan <douwe@gitlab.com> | 2016-07-12 17:52:51 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2016-07-12 17:52:51 +0000 |
commit | d5c715c9cc23a403d908e4686db152d8316ac684 (patch) | |
tree | 79925b83c8d1497592da23613b5492867d701f39 /app/controllers | |
parent | 1ed89d376fc67ae50c5de2f538355fa6d1ab6d5b (diff) | |
parent | c39356998b1850f3dc26fe0b987cb419c1d1afb4 (diff) | |
download | gitlab-ce-d5c715c9cc23a403d908e4686db152d8316ac684.tar.gz |
Merge branch 'lock_for_issuable' into 'master'
Optimistic locking for Issue and Merge Requests
## What does this MR do?
It implements Optimistic Locking http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.html for Issues and MRs but in a bit custom way. We use it for cases when either title or description field is involved in the change.
## Why was this MR needed?
We have to prevent data losing.
## What are the relevant issue numbers?
https://gitlab.com/gitlab-org/gitlab-ce/issues/12940
## Screenshots (if relevant)
![Screen_Shot_2016-07-09_at_15.33.02](/uploads/2efbe547a12fda93bce347fa711438d7/Screen_Shot_2016-07-09_at_15.33.02.png)
See merge request !5146
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/projects/issues_controller.rb | 6 | ||||
-rw-r--r-- | app/controllers/projects/merge_requests_controller.rb | 5 |
2 files changed, 9 insertions, 2 deletions
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index b6e80762e3c..f7ada5cfee4 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -119,6 +119,10 @@ class Projects::IssuesController < Projects::ApplicationController render json: @issue.to_json(include: { milestone: {}, assignee: { methods: :avatar_url }, labels: { methods: :text_color } }) end end + + rescue ActiveRecord::StaleObjectError + @conflict = true + render :edit end def referenced_merge_requests @@ -216,7 +220,7 @@ class Projects::IssuesController < Projects::ApplicationController def issue_params params.require(:issue).permit( :title, :assignee_id, :position, :description, :confidential, - :milestone_id, :due_date, :state_event, :task_num, label_ids: [] + :milestone_id, :due_date, :state_event, :task_num, :lock_version, label_ids: [] ) end diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index df659bb8c3b..2deb7959700 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -196,6 +196,9 @@ class Projects::MergeRequestsController < Projects::ApplicationController else render "edit" end + rescue ActiveRecord::StaleObjectError + @conflict = true + render :edit end def remove_wip @@ -424,7 +427,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController :title, :assignee_id, :source_project_id, :source_branch, :target_project_id, :target_branch, :milestone_id, :state_event, :description, :task_num, :force_remove_source_branch, - label_ids: [] + :lock_version, label_ids: [] ) end |