Assign stage and pipeline to a status when importing
This commit is contained in:
parent
099a59e8fd
commit
05ddb25995
5 changed files with 418 additions and 360 deletions
|
@ -79,7 +79,7 @@ module Ci
|
||||||
before_save :ensure_token
|
before_save :ensure_token
|
||||||
before_destroy { unscoped_project }
|
before_destroy { unscoped_project }
|
||||||
|
|
||||||
after_create do |build|
|
after_create unless: :importing? do |build|
|
||||||
run_after_commit { BuildHooksWorker.perform_async(build.id) }
|
run_after_commit { BuildHooksWorker.perform_async(build.id) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ project_tree:
|
||||||
- :author
|
- :author
|
||||||
- events:
|
- events:
|
||||||
- :push_event_payload
|
- :push_event_payload
|
||||||
- :stages
|
- stages:
|
||||||
- :statuses
|
- :statuses
|
||||||
- :auto_devops
|
- :auto_devops
|
||||||
- :triggers
|
- :triggers
|
||||||
|
|
|
@ -62,6 +62,7 @@ module Gitlab
|
||||||
when :notes then setup_note
|
when :notes then setup_note
|
||||||
when :project_label, :project_labels then setup_label
|
when :project_label, :project_labels then setup_label
|
||||||
when :milestone, :milestones then setup_milestone
|
when :milestone, :milestones then setup_milestone
|
||||||
|
when 'Ci::Pipeline' then setup_pipeline
|
||||||
else
|
else
|
||||||
@relation_hash['project_id'] = @project.id
|
@relation_hash['project_id'] = @project.id
|
||||||
end
|
end
|
||||||
|
@ -112,9 +113,7 @@ module Gitlab
|
||||||
@relation_hash.delete('trace') # old export files have trace
|
@relation_hash.delete('trace') # old export files have trace
|
||||||
@relation_hash.delete('token')
|
@relation_hash.delete('token')
|
||||||
|
|
||||||
imported_object do |object|
|
imported_object
|
||||||
object.commit_id = nil
|
|
||||||
end
|
|
||||||
elsif @relation_name == :merge_requests
|
elsif @relation_name == :merge_requests
|
||||||
MergeRequestParser.new(@project, @relation_hash.delete('diff_head_sha'), imported_object, @relation_hash).parse!
|
MergeRequestParser.new(@project, @relation_hash.delete('diff_head_sha'), imported_object, @relation_hash).parse!
|
||||||
else
|
else
|
||||||
|
@ -182,8 +181,9 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def imported_object
|
def imported_object
|
||||||
yield(existing_or_new_object) if block_given?
|
if existing_or_new_object.respond_to?(:importing)
|
||||||
existing_or_new_object.importing = true if existing_or_new_object.respond_to?(:importing)
|
existing_or_new_object.importing = true
|
||||||
|
end
|
||||||
|
|
||||||
existing_or_new_object
|
existing_or_new_object
|
||||||
rescue ActiveRecord::RecordNotUnique
|
rescue ActiveRecord::RecordNotUnique
|
||||||
|
@ -211,6 +211,14 @@ module Gitlab
|
||||||
@relation_hash['diff'] = @relation_hash.delete('utf8_diff')
|
@relation_hash['diff'] = @relation_hash.delete('utf8_diff')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setup_pipeline
|
||||||
|
@relation_hash.fetch('stages').each do |stage|
|
||||||
|
stage.statuses.each do |status|
|
||||||
|
status.pipeline = imported_object
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def existing_or_new_object
|
def existing_or_new_object
|
||||||
# Only find existing records to avoid mapping tables such as milestones
|
# Only find existing records to avoid mapping tables such as milestones
|
||||||
# Otherwise always create the record, skipping the extra SELECT clause.
|
# Otherwise always create the record, skipping the extra SELECT clause.
|
||||||
|
|
|
@ -6473,18 +6473,7 @@
|
||||||
"name": "test",
|
"name": "test",
|
||||||
"status": 1,
|
"status": 1,
|
||||||
"created_at": "2016-03-22T15:44:44.772Z",
|
"created_at": "2016-03-22T15:44:44.772Z",
|
||||||
"updated_at": "2016-03-29T06:44:44.634Z"
|
"updated_at": "2016-03-29T06:44:44.634Z",
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 12,
|
|
||||||
"project_id": 5,
|
|
||||||
"pipeline_id": 36,
|
|
||||||
"name": "deploy",
|
|
||||||
"status": 2,
|
|
||||||
"created_at": "2016-03-22T15:45:45.772Z",
|
|
||||||
"updated_at": "2016-03-29T06:45:45.634Z"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"statuses": [
|
"statuses": [
|
||||||
{
|
{
|
||||||
"id": 71,
|
"id": 71,
|
||||||
|
@ -6562,6 +6551,17 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"project_id": 5,
|
||||||
|
"pipeline_id": 36,
|
||||||
|
"name": "deploy",
|
||||||
|
"status": 2,
|
||||||
|
"created_at": "2016-03-22T15:45:45.772Z",
|
||||||
|
"updated_at": "2016-03-29T06:45:45.634Z"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": 37,
|
"id": 37,
|
||||||
"project_id": 5,
|
"project_id": 5,
|
||||||
|
@ -6578,6 +6578,15 @@
|
||||||
"started_at": null,
|
"started_at": null,
|
||||||
"finished_at": null,
|
"finished_at": null,
|
||||||
"duration": null,
|
"duration": null,
|
||||||
|
"stages": [
|
||||||
|
{
|
||||||
|
"id": 21,
|
||||||
|
"project_id": 5,
|
||||||
|
"pipeline_id": 37,
|
||||||
|
"name": "test",
|
||||||
|
"status": 1,
|
||||||
|
"created_at": "2016-03-22T15:44:44.772Z",
|
||||||
|
"updated_at": "2016-03-29T06:44:44.634Z",
|
||||||
"statuses": [
|
"statuses": [
|
||||||
{
|
{
|
||||||
"id": 74,
|
"id": 74,
|
||||||
|
@ -6650,6 +6659,8 @@
|
||||||
"erased_at": null
|
"erased_at": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 38,
|
"id": 38,
|
||||||
|
@ -6667,6 +6678,15 @@
|
||||||
"started_at": null,
|
"started_at": null,
|
||||||
"finished_at": null,
|
"finished_at": null,
|
||||||
"duration": null,
|
"duration": null,
|
||||||
|
"stages": [
|
||||||
|
{
|
||||||
|
"id": 22,
|
||||||
|
"project_id": 5,
|
||||||
|
"pipeline_id": 38,
|
||||||
|
"name": "test",
|
||||||
|
"status": 1,
|
||||||
|
"created_at": "2016-03-22T15:44:44.772Z",
|
||||||
|
"updated_at": "2016-03-29T06:44:44.634Z",
|
||||||
"statuses": [
|
"statuses": [
|
||||||
{
|
{
|
||||||
"id": 76,
|
"id": 76,
|
||||||
|
@ -6739,6 +6759,8 @@
|
||||||
"erased_at": null
|
"erased_at": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 39,
|
"id": 39,
|
||||||
|
@ -6756,6 +6778,15 @@
|
||||||
"started_at": null,
|
"started_at": null,
|
||||||
"finished_at": null,
|
"finished_at": null,
|
||||||
"duration": null,
|
"duration": null,
|
||||||
|
"stages": [
|
||||||
|
{
|
||||||
|
"id": 23,
|
||||||
|
"project_id": 5,
|
||||||
|
"pipeline_id": 39,
|
||||||
|
"name": "test",
|
||||||
|
"status": 1,
|
||||||
|
"created_at": "2016-03-22T15:44:44.772Z",
|
||||||
|
"updated_at": "2016-03-29T06:44:44.634Z",
|
||||||
"statuses": [
|
"statuses": [
|
||||||
{
|
{
|
||||||
"id": 78,
|
"id": 78,
|
||||||
|
@ -6828,6 +6859,8 @@
|
||||||
"erased_at": null
|
"erased_at": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 40,
|
"id": 40,
|
||||||
|
@ -6845,6 +6878,15 @@
|
||||||
"started_at": null,
|
"started_at": null,
|
||||||
"finished_at": null,
|
"finished_at": null,
|
||||||
"duration": null,
|
"duration": null,
|
||||||
|
"stages": [
|
||||||
|
{
|
||||||
|
"id": 24,
|
||||||
|
"project_id": 5,
|
||||||
|
"pipeline_id": 40,
|
||||||
|
"name": "test",
|
||||||
|
"status": 1,
|
||||||
|
"created_at": "2016-03-22T15:44:44.772Z",
|
||||||
|
"updated_at": "2016-03-29T06:44:44.634Z",
|
||||||
"statuses": [
|
"statuses": [
|
||||||
{
|
{
|
||||||
"id": 79,
|
"id": 79,
|
||||||
|
@ -6918,6 +6960,8 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"triggers": [
|
"triggers": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -181,14 +181,20 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when restoring hierarchy of pipeline, stages and jobs' do
|
context 'when restoring hierarchy of pipeline, stages and jobs' do
|
||||||
let(:pipeline) { Ci::Pipeline.first }
|
it 'restores statuses' do
|
||||||
|
expect(CommitStatus.all.count).to be 10
|
||||||
|
end
|
||||||
|
|
||||||
it 'restores pipeline stages' do
|
it 'restores pipeline stages' do
|
||||||
expect(pipeline.stages.count).to be 2
|
expect(Ci::Stage.all.count).to be 6
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'correctly restores association between a stage and a job' do
|
it 'correctly restores association between a stage and a job' do
|
||||||
expect(pipeline.statuses).to all(have_attributes(stage_id: a_value > 0))
|
expect(CommitStatus.all).to all(have_attributes(stage_id: a_value > 0))
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'correctly restores association between a stage and a pipeline' do
|
||||||
|
expect(CommitStatus.all).to all(have_attributes(pipeline_id: a_value > 0))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue