Открыть боковую панель
Захаров Дмитрий Сергеевич
Gitlab
Коммиты
dbd1c33a
Коммит
dbd1c33a
создал
Апр 10, 2023
по автору
Allison Browne
Просмотр файлов
more cleanup
владелец
5cb683f9
Изменения
4
Скрыть пробелы
Построчно
Рядом
ee/app/services/merge_trains/refresh_merge_request_service.rb
Просмотр файла @
dbd1c33a
# 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
)
...
...
ee/app/services/merge_trains/refresh_service.rb
Просмотр файла @
dbd1c33a
...
...
@@ -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
.
use
r
,
require_recreate:
require_next_recreate
)
.
execute
(
car
.
merge_request
)
.
new
(
train_ca
r
,
require_recreate:
require_next_recreate
)
.
execute
require_next_recreate
=
(
result
[
:status
]
==
:error
||
result
[
:pipeline_created
])
end
...
...
ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb
Просмотр файла @
dbd1c33a
...
...
@@ -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
,
maint
ain
er
,
require_recreate:
require_recreate
)
}
let
(
:service
)
{
described_class
.
new
(
merge_request
.
merge_tr
ain
,
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
,
...
...
ee/spec/services/merge_trains/refresh_service_spec.rb
Просмотр файла @
dbd1c33a
...
...
@@ -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.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать