Коммит dbd1c33a создал по автору Allison Browne's avatar Allison Browne
Просмотр файлов

more cleanup

владелец 5cb683f9
# frozen_string_literal: true
module MergeTrains
class RefreshMergeRequestService < BaseService
class RefreshMergeRequestService
include BaseServiceUtility
include Gitlab::Utils::StrongMemoize
ProcessError = Class.new(StandardError)
attr_reader :merge_request
##
# Arguments:
# merge_request ... The merge request to be refreshed
def execute(merge_request)
@merge_request = merge_request
def initialize(train_car, require_recreate: true)
@train_car = train_car
@require_recreate = require_recreate
end
def execute
validate!
pipeline_created = create_pipeline! if merge_train.requires_new_pipeline? || require_recreate?
merge! if merge_train.mergeable?
pipeline_created = create_pipeline! if @train_car.requires_new_pipeline? || @require_recreate
merge! if @train_car.mergeable?
success(pipeline_created: pipeline_created.present?)
rescue ProcessError => e
......@@ -37,50 +38,53 @@ def validate!
raise ProcessError, 'merge request is not mergeable'
end
unless merge_train.previous_ref_sha.present?
unless @train_car.previous_ref_sha.present?
raise ProcessError, 'previous ref does not exist'
end
if merge_train.pipeline_not_succeeded?
if @train_car.pipeline_not_succeeded?
raise ProcessError, 'pipeline did not succeed'
end
end
def create_pipeline!
result = MergeTrains::CreatePipelineService.new(merge_train.project, merge_train.user)
.execute(merge_train.merge_request, merge_train.previous_ref)
result = MergeTrains::CreatePipelineService.new(project, @train_car.user)
.execute(merge_request, @train_car.previous_ref)
raise ProcessError, result[:message] unless result[:status] == :success
pipeline = result[:pipeline]
merge_train.cancel_pipeline!(pipeline)
merge_train.refresh_pipeline!(pipeline.id)
@train_car.cancel_pipeline!(pipeline)
@train_car.refresh_pipeline!(pipeline.id)
pipeline
end
def merge!
merge_train.start_merge!
@train_car.start_merge!
MergeRequests::MergeService.new(project: project, current_user: merge_user, params: merge_request.merge_params.with_indifferent_access)
.execute(merge_request, skip_discussions_check: true)
raise ProcessError, "failed to merge. #{merge_request.merge_error}" unless merge_request.merged?
merge_train.finish_merge!
@train_car.finish_merge!
end
def merge_train
merge_request.merge_train
def merge_request
@train_car.merge_request
end
strong_memoize_attr :merge_request
def merge_user
merge_request.merge_user
end
strong_memoize_attr :merge_user
def require_recreate?
params[:require_recreate]
def project
@train_car.project
end
strong_memoize_attr :project
def abort(error)
AutoMerge::MergeTrainService.new(project, merge_user)
......
......@@ -28,10 +28,10 @@ def initialize(target_project_id, target_branch)
def execute
require_next_recreate = false
MergeTrains::Car.all_cars(@target_project_id, @target_branch, limit: DEFAULT_CONCURRENCY).each do |car|
MergeTrains::Car.all_cars(@target_project_id, @target_branch, limit: DEFAULT_CONCURRENCY).each do |train_car|
result = MergeTrains::RefreshMergeRequestService
.new(car.target_project, car.user, require_recreate: require_next_recreate)
.execute(car.merge_request)
.new(train_car, require_recreate: require_next_recreate)
.execute
require_next_recreate = (result[:status] == :error || result[:pipeline_created])
end
......
......@@ -2,11 +2,11 @@
require 'spec_helper'
RSpec.describe MergeTrains::RefreshMergeRequestService, feature_category: :source_code_management do
RSpec.describe MergeTrains::RefreshMergeRequestService, feature_category: :merge_trains do
let_it_be(:project) { create(:project, :repository, merge_pipelines_enabled: true, merge_trains_enabled: true) }
let_it_be(:maintainer) { create(:user) }
let(:service) { described_class.new(project, maintainer, require_recreate: require_recreate) }
let(:service) { described_class.new(merge_request.merge_train, require_recreate: require_recreate) }
let(:require_recreate) { false }
before do
......@@ -17,7 +17,7 @@
end
describe '#execute' do
subject { service.execute(merge_request) }
subject { service.execute }
let!(:merge_request) do
create(:merge_request, :on_train,
......
......@@ -40,9 +40,9 @@
before do
allow(MergeTrains::RefreshMergeRequestService)
.to receive(:new).with(project, maintainer_1, anything) { refresh_service_1 }
.to receive(:new).with(merge_request_1.merge_train, anything) { refresh_service_1 }
allow(MergeTrains::RefreshMergeRequestService)
.to receive(:new).with(project, maintainer_2, anything) { refresh_service_2 }
.to receive(:new).with(merge_request_2.merge_train, anything) { refresh_service_2 }
allow(refresh_service_1).to receive(:execute) { refresh_service_1_result }
allow(refresh_service_2).to receive(:execute) { refresh_service_2_result }
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать