Commit 0a1b4ba259a0c8373bd3547f9e72ff6fa83ac2f4
Exists in
spb-stable
and in
2 other branches
Merge branch 'remove-thread-var' into 'master'
Remove thread variables Lets get rid of thread variables. It produces additional complexity and weird stack trace. Also part of !1133 - - - Also it fixes issue/merge_request close and reopen bug via API when no dashboard event and comment was created.
Showing
18 changed files
with
109 additions
and
107 deletions
Show diff stats
app/controllers/application_controller.rb
| @@ -4,7 +4,6 @@ class ApplicationController < ActionController::Base | @@ -4,7 +4,6 @@ class ApplicationController < ActionController::Base | ||
| 4 | before_filter :authenticate_user! | 4 | before_filter :authenticate_user! |
| 5 | before_filter :reject_blocked! | 5 | before_filter :reject_blocked! |
| 6 | before_filter :check_password_expiration | 6 | before_filter :check_password_expiration |
| 7 | - around_filter :set_current_user_for_thread | ||
| 8 | before_filter :add_abilities | 7 | before_filter :add_abilities |
| 9 | before_filter :ldap_security_check | 8 | before_filter :ldap_security_check |
| 10 | before_filter :dev_tools if Rails.env == 'development' | 9 | before_filter :dev_tools if Rails.env == 'development' |
| @@ -53,15 +52,6 @@ class ApplicationController < ActionController::Base | @@ -53,15 +52,6 @@ class ApplicationController < ActionController::Base | ||
| 53 | end | 52 | end |
| 54 | end | 53 | end |
| 55 | 54 | ||
| 56 | - def set_current_user_for_thread | ||
| 57 | - Thread.current[:current_user] = current_user | ||
| 58 | - begin | ||
| 59 | - yield | ||
| 60 | - ensure | ||
| 61 | - Thread.current[:current_user] = nil | ||
| 62 | - end | ||
| 63 | - end | ||
| 64 | - | ||
| 65 | def abilities | 55 | def abilities |
| 66 | @abilities ||= Six.new | 56 | @abilities ||= Six.new |
| 67 | end | 57 | end |
app/controllers/projects/milestones_controller.rb
| @@ -37,7 +37,7 @@ class Projects::MilestonesController < Projects::ApplicationController | @@ -37,7 +37,7 @@ class Projects::MilestonesController < Projects::ApplicationController | ||
| 37 | end | 37 | end |
| 38 | 38 | ||
| 39 | def create | 39 | def create |
| 40 | - @milestone = @project.milestones.new(params[:milestone]) | 40 | + @milestone = Milestones::CreateService.new(project, current_user, params[:milestone]).execute |
| 41 | 41 | ||
| 42 | if @milestone.save | 42 | if @milestone.save |
| 43 | redirect_to project_milestone_path(@project, @milestone) | 43 | redirect_to project_milestone_path(@project, @milestone) |
| @@ -47,7 +47,7 @@ class Projects::MilestonesController < Projects::ApplicationController | @@ -47,7 +47,7 @@ class Projects::MilestonesController < Projects::ApplicationController | ||
| 47 | end | 47 | end |
| 48 | 48 | ||
| 49 | def update | 49 | def update |
| 50 | - @milestone.update_attributes(params[:milestone]) | 50 | + @milestone = Milestones::UpdateService.new(project, current_user, params[:milestone]).execute(milestone) |
| 51 | 51 | ||
| 52 | respond_to do |format| | 52 | respond_to do |format| |
| 53 | format.js | 53 | format.js |
app/observers/base_observer.rb
| @@ -10,12 +10,4 @@ class BaseObserver < ActiveRecord::Observer | @@ -10,12 +10,4 @@ class BaseObserver < ActiveRecord::Observer | ||
| 10 | def log_info message | 10 | def log_info message |
| 11 | Gitlab::AppLogger.info message | 11 | Gitlab::AppLogger.info message |
| 12 | end | 12 | end |
| 13 | - | ||
| 14 | - def current_user | ||
| 15 | - Thread.current[:current_user] | ||
| 16 | - end | ||
| 17 | - | ||
| 18 | - def current_commit | ||
| 19 | - Thread.current[:current_commit] | ||
| 20 | - end | ||
| 21 | end | 13 | end |
app/observers/milestone_observer.rb
| @@ -1,13 +0,0 @@ | @@ -1,13 +0,0 @@ | ||
| 1 | -class MilestoneObserver < BaseObserver | ||
| 2 | - def after_create(milestone) | ||
| 3 | - event_service.open_milestone(milestone, current_user) | ||
| 4 | - end | ||
| 5 | - | ||
| 6 | - def after_close(milestone, transition) | ||
| 7 | - event_service.close_milestone(milestone, current_user) | ||
| 8 | - end | ||
| 9 | - | ||
| 10 | - def after_reopen(milestone, transition) | ||
| 11 | - event_service.reopen_milestone(milestone, current_user) | ||
| 12 | - end | ||
| 13 | -end |
app/observers/note_observer.rb
| @@ -5,7 +5,7 @@ class NoteObserver < BaseObserver | @@ -5,7 +5,7 @@ class NoteObserver < BaseObserver | ||
| 5 | # Skip system notes, like status changes and cross-references. | 5 | # Skip system notes, like status changes and cross-references. |
| 6 | # Skip wall notes to prevent spamming of dashboard | 6 | # Skip wall notes to prevent spamming of dashboard |
| 7 | if note.noteable_type.present? && !note.system | 7 | if note.noteable_type.present? && !note.system |
| 8 | - event_service.leave_note(note, current_user) | 8 | + event_service.leave_note(note, note.author) |
| 9 | end | 9 | end |
| 10 | 10 | ||
| 11 | unless note.system? | 11 | unless note.system? |
| @@ -18,6 +18,6 @@ class NoteObserver < BaseObserver | @@ -18,6 +18,6 @@ class NoteObserver < BaseObserver | ||
| 18 | end | 18 | end |
| 19 | 19 | ||
| 20 | def after_update(note) | 20 | def after_update(note) |
| 21 | - note.notice_added_references(note.project, current_user) | 21 | + note.notice_added_references(note.project, note.author) |
| 22 | end | 22 | end |
| 23 | end | 23 | end |
app/services/issues/update_service.rb
| 1 | module Issues | 1 | module Issues |
| 2 | class UpdateService < Issues::BaseService | 2 | class UpdateService < Issues::BaseService |
| 3 | def execute(issue) | 3 | def execute(issue) |
| 4 | - state = params.delete('state_event') | 4 | + state = params.delete('state_event') || params.delete(:state_event) |
| 5 | 5 | ||
| 6 | case state | 6 | case state |
| 7 | when 'reopen' | 7 | when 'reopen' |
app/services/merge_requests/update_service.rb
| @@ -10,7 +10,7 @@ module MergeRequests | @@ -10,7 +10,7 @@ module MergeRequests | ||
| 10 | params.delete(:source_project_id) | 10 | params.delete(:source_project_id) |
| 11 | params.delete(:target_project_id) | 11 | params.delete(:target_project_id) |
| 12 | 12 | ||
| 13 | - state = params.delete('state_event') | 13 | + state = params.delete('state_event') || params.delete(:state_event) |
| 14 | 14 | ||
| 15 | case state | 15 | case state |
| 16 | when 'reopen' | 16 | when 'reopen' |
| @@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
| 1 | +module Milestones | ||
| 2 | + class CreateService < Milestones::BaseService | ||
| 3 | + def execute | ||
| 4 | + milestone = project.milestones.new(params) | ||
| 5 | + | ||
| 6 | + if milestone.save | ||
| 7 | + event_service.open_milestone(milestone, current_user) | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + milestone | ||
| 11 | + end | ||
| 12 | + end | ||
| 13 | +end |
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +module Milestones | ||
| 2 | + class UpdateService < Milestones::BaseService | ||
| 3 | + def execute(milestone) | ||
| 4 | + state = params.delete('state_event') || params.delete(:state_event) | ||
| 5 | + | ||
| 6 | + case state | ||
| 7 | + when 'activate' | ||
| 8 | + Milestones::ReopenService.new(project, current_user, {}).execute(milestone) | ||
| 9 | + when 'close' | ||
| 10 | + Milestones::CloseService.new(project, current_user, {}).execute(milestone) | ||
| 11 | + end | ||
| 12 | + | ||
| 13 | + if params.present? | ||
| 14 | + milestone.update_attributes(params) | ||
| 15 | + end | ||
| 16 | + | ||
| 17 | + milestone | ||
| 18 | + end | ||
| 19 | + end | ||
| 20 | +end |
config/application.rb
| @@ -19,8 +19,7 @@ module Gitlab | @@ -19,8 +19,7 @@ module Gitlab | ||
| 19 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ] | 19 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ] |
| 20 | 20 | ||
| 21 | # Activate observers that should always be running. | 21 | # Activate observers that should always be running. |
| 22 | - config.active_record.observers = :milestone_observer, | ||
| 23 | - :project_activity_cache_observer, | 22 | + config.active_record.observers = :project_activity_cache_observer, |
| 24 | :note_observer, | 23 | :note_observer, |
| 25 | :project_observer, | 24 | :project_observer, |
| 26 | :system_hook_observer, | 25 | :system_hook_observer, |
lib/api/helpers.rb
| @@ -36,16 +36,6 @@ module API | @@ -36,16 +36,6 @@ module API | ||
| 36 | end | 36 | end |
| 37 | end | 37 | end |
| 38 | 38 | ||
| 39 | - def set_current_user_for_thread | ||
| 40 | - Thread.current[:current_user] = current_user | ||
| 41 | - | ||
| 42 | - begin | ||
| 43 | - yield | ||
| 44 | - ensure | ||
| 45 | - Thread.current[:current_user] = nil | ||
| 46 | - end | ||
| 47 | - end | ||
| 48 | - | ||
| 49 | def user_project | 39 | def user_project |
| 50 | @project ||= find_project(params[:id]) | 40 | @project ||= find_project(params[:id]) |
| 51 | @project || not_found! | 41 | @project || not_found! |
lib/api/merge_requests.rb
| @@ -184,21 +184,18 @@ module API | @@ -184,21 +184,18 @@ module API | ||
| 184 | # POST /projects/:id/merge_request/:merge_request_id/comments | 184 | # POST /projects/:id/merge_request/:merge_request_id/comments |
| 185 | # | 185 | # |
| 186 | post ":id/merge_request/:merge_request_id/comments" do | 186 | post ":id/merge_request/:merge_request_id/comments" do |
| 187 | - set_current_user_for_thread do | ||
| 188 | - required_attributes! [:note] | 187 | + required_attributes! [:note] |
| 189 | 188 | ||
| 190 | - merge_request = user_project.merge_requests.find(params[:merge_request_id]) | ||
| 191 | - note = merge_request.notes.new(note: params[:note], project_id: user_project.id) | ||
| 192 | - note.author = current_user | 189 | + merge_request = user_project.merge_requests.find(params[:merge_request_id]) |
| 190 | + note = merge_request.notes.new(note: params[:note], project_id: user_project.id) | ||
| 191 | + note.author = current_user | ||
| 193 | 192 | ||
| 194 | - if note.save | ||
| 195 | - present note, with: Entities::MRNote | ||
| 196 | - else | ||
| 197 | - not_found! | ||
| 198 | - end | 193 | + if note.save |
| 194 | + present note, with: Entities::MRNote | ||
| 195 | + else | ||
| 196 | + not_found! | ||
| 199 | end | 197 | end |
| 200 | end | 198 | end |
| 201 | - | ||
| 202 | end | 199 | end |
| 203 | end | 200 | end |
| 204 | end | 201 | end |
lib/api/milestones.rb
| @@ -40,17 +40,15 @@ module API | @@ -40,17 +40,15 @@ module API | ||
| 40 | # Example Request: | 40 | # Example Request: |
| 41 | # POST /projects/:id/milestones | 41 | # POST /projects/:id/milestones |
| 42 | post ":id/milestones" do | 42 | post ":id/milestones" do |
| 43 | - set_current_user_for_thread do | ||
| 44 | - authorize! :admin_milestone, user_project | ||
| 45 | - required_attributes! [:title] | 43 | + authorize! :admin_milestone, user_project |
| 44 | + required_attributes! [:title] | ||
| 45 | + attrs = attributes_for_keys [:title, :description, :due_date] | ||
| 46 | + milestone = ::Milestones::CreateService.new(user_project, current_user, attrs).execute | ||
| 46 | 47 | ||
| 47 | - attrs = attributes_for_keys [:title, :description, :due_date] | ||
| 48 | - @milestone = user_project.milestones.new attrs | ||
| 49 | - if @milestone.save | ||
| 50 | - present @milestone, with: Entities::Milestone | ||
| 51 | - else | ||
| 52 | - not_found! | ||
| 53 | - end | 48 | + if milestone.valid? |
| 49 | + present milestone, with: Entities::Milestone | ||
| 50 | + else | ||
| 51 | + not_found! | ||
| 54 | end | 52 | end |
| 55 | end | 53 | end |
| 56 | 54 | ||
| @@ -66,16 +64,15 @@ module API | @@ -66,16 +64,15 @@ module API | ||
| 66 | # Example Request: | 64 | # Example Request: |
| 67 | # PUT /projects/:id/milestones/:milestone_id | 65 | # PUT /projects/:id/milestones/:milestone_id |
| 68 | put ":id/milestones/:milestone_id" do | 66 | put ":id/milestones/:milestone_id" do |
| 69 | - set_current_user_for_thread do | ||
| 70 | - authorize! :admin_milestone, user_project | 67 | + authorize! :admin_milestone, user_project |
| 68 | + attrs = attributes_for_keys [:title, :description, :due_date, :state_event] | ||
| 69 | + milestone = user_project.milestones.find(params[:milestone_id]) | ||
| 70 | + milestone = ::Milestones::UpdateService.new(user_project, current_user, attrs).execute(milestone) | ||
| 71 | 71 | ||
| 72 | - @milestone = user_project.milestones.find(params[:milestone_id]) | ||
| 73 | - attrs = attributes_for_keys [:title, :description, :due_date, :state_event] | ||
| 74 | - if @milestone.update_attributes attrs | ||
| 75 | - present @milestone, with: Entities::Milestone | ||
| 76 | - else | ||
| 77 | - not_found! | ||
| 78 | - end | 72 | + if milestone.valid? |
| 73 | + present milestone, with: Entities::Milestone | ||
| 74 | + else | ||
| 75 | + not_found! | ||
| 79 | end | 76 | end |
| 80 | end | 77 | end |
| 81 | end | 78 | end |
lib/api/notes.rb
| @@ -41,19 +41,17 @@ module API | @@ -41,19 +41,17 @@ module API | ||
| 41 | # Example Request: | 41 | # Example Request: |
| 42 | # POST /projects/:id/notes | 42 | # POST /projects/:id/notes |
| 43 | post ":id/notes" do | 43 | post ":id/notes" do |
| 44 | - set_current_user_for_thread do | ||
| 45 | - required_attributes! [:body] | 44 | + required_attributes! [:body] |
| 46 | 45 | ||
| 47 | - @note = user_project.notes.new(note: params[:body]) | ||
| 48 | - @note.author = current_user | 46 | + @note = user_project.notes.new(note: params[:body]) |
| 47 | + @note.author = current_user | ||
| 49 | 48 | ||
| 50 | - if @note.save | ||
| 51 | - present @note, with: Entities::Note | ||
| 52 | - else | ||
| 53 | - # :note is exposed as :body, but :note is set on error | ||
| 54 | - bad_request!(:note) if @note.errors[:note].any? | ||
| 55 | - not_found! | ||
| 56 | - end | 49 | + if @note.save |
| 50 | + present @note, with: Entities::Note | ||
| 51 | + else | ||
| 52 | + # :note is exposed as :body, but :note is set on error | ||
| 53 | + bad_request!(:note) if @note.errors[:note].any? | ||
| 54 | + not_found! | ||
| 57 | end | 55 | end |
| 58 | end | 56 | end |
| 59 | 57 | ||
| @@ -99,19 +97,17 @@ module API | @@ -99,19 +97,17 @@ module API | ||
| 99 | # POST /projects/:id/issues/:noteable_id/notes | 97 | # POST /projects/:id/issues/:noteable_id/notes |
| 100 | # POST /projects/:id/snippets/:noteable_id/notes | 98 | # POST /projects/:id/snippets/:noteable_id/notes |
| 101 | post ":id/#{noteables_str}/:#{noteable_id_str}/notes" do | 99 | post ":id/#{noteables_str}/:#{noteable_id_str}/notes" do |
| 102 | - set_current_user_for_thread do | ||
| 103 | - required_attributes! [:body] | 100 | + required_attributes! [:body] |
| 104 | 101 | ||
| 105 | - @noteable = user_project.send(:"#{noteables_str}").find(params[:"#{noteable_id_str}"]) | ||
| 106 | - @note = @noteable.notes.new(note: params[:body]) | ||
| 107 | - @note.author = current_user | ||
| 108 | - @note.project = user_project | 102 | + @noteable = user_project.send(:"#{noteables_str}").find(params[:"#{noteable_id_str}"]) |
| 103 | + @note = @noteable.notes.new(note: params[:body]) | ||
| 104 | + @note.author = current_user | ||
| 105 | + @note.project = user_project | ||
| 109 | 106 | ||
| 110 | - if @note.save | ||
| 111 | - present @note, with: Entities::Note | ||
| 112 | - else | ||
| 113 | - not_found! | ||
| 114 | - end | 107 | + if @note.save |
| 108 | + present @note, with: Entities::Note | ||
| 109 | + else | ||
| 110 | + not_found! | ||
| 115 | end | 111 | end |
| 116 | end | 112 | end |
| 117 | end | 113 | end |
lib/gitlab/seeder.rb
| @@ -9,12 +9,7 @@ module Gitlab | @@ -9,12 +9,7 @@ module Gitlab | ||
| 9 | end | 9 | end |
| 10 | 10 | ||
| 11 | def self.by_user(user) | 11 | def self.by_user(user) |
| 12 | - begin | ||
| 13 | - Thread.current[:current_user] = user | ||
| 14 | - yield | ||
| 15 | - ensure | ||
| 16 | - Thread.current[:current_user] = nil | ||
| 17 | - end | 12 | + yield |
| 18 | end | 13 | end |
| 19 | 14 | ||
| 20 | def self.mute_mailer | 15 | def self.mute_mailer |