summaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2016-07-12 17:52:51 +0000
committerDouwe Maan <douwe@gitlab.com>2016-07-12 17:52:51 +0000
commitd5c715c9cc23a403d908e4686db152d8316ac684 (patch)
tree79925b83c8d1497592da23613b5492867d701f39 /app/controllers
parent1ed89d376fc67ae50c5de2f538355fa6d1ab6d5b (diff)
parentc39356998b1850f3dc26fe0b987cb419c1d1afb4 (diff)
downloadgitlab-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.rb6
-rw-r--r--app/controllers/projects/merge_requests_controller.rb5
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