require_relative 'base_service' require_relative 'reopen_service' require_relative 'close_service' module MergeRequests class UpdateService < MergeRequests::BaseService def execute(merge_request) # We dont allow change of source/target projects # after merge request was created params.except!(:source_project_id) params.except!(:target_project_id) state = params[:state_event] case state when 'reopen' MergeRequests::ReopenService.new(project, current_user, {}).execute(merge_request) when 'close' MergeRequests::CloseService.new(project, current_user, {}).execute(merge_request) when 'task_check' merge_request.update_nth_task(params[:task_num].to_i, true) when 'task_uncheck' merge_request.update_nth_task(params[:task_num].to_i, false) end if params.present? && merge_request.update_attributes( params.except(:state_event, :task_num) ) merge_request.reset_events_cache if merge_request.previous_changes.include?('milestone_id') create_milestone_note(merge_request) end if merge_request.previous_changes.include?('assignee_id') notification_service.reassigned_merge_request(merge_request, current_user) create_assignee_note(merge_request) end merge_request.notice_added_references(merge_request.project, current_user) execute_hooks(merge_request, 'update') end merge_request end end end