Commit b55f8aeb authored by Douglas Barbosa Alexandre's avatar Douglas Barbosa Alexandre

Merge branch '51747-gitlab-com-unable-to-import-a-project-that-was-just-exported' into 'master'

Resolve "gitlab.com: Unable to import a project that was just exported"

Closes #43840, #43896, and #51747

See merge request gitlab-org/gitlab-ce!21875
parents 959386eb 6691194a
---
title: Fix NULL pipeline import problem and pipeline user mapping issue
merge_request: 21875
author:
type: fixed
......@@ -136,9 +136,18 @@ module Gitlab
return if tree_hash[relation_key].blank?
tree_array = [tree_hash[relation_key]].flatten
null_iid_pipelines = []
# Avoid keeping a possible heavy object in memory once we are done with it
while relation_item = tree_array.shift
while relation_item = (tree_array.shift || null_iid_pipelines.shift)
if nil_iid_pipeline?(relation_key, relation_item) && tree_array.any?
# Move pipelines with NULL IIDs to the end
# so they don't clash with existing IIDs.
null_iid_pipelines << relation_item
next
end
# The transaction at this level is less speedy than one single transaction
# But we can't have it in the upper level or GC won't get rid of the AR objects
# after we save the batch.
......@@ -201,6 +210,10 @@ module Gitlab
def excluded_keys_for_relation(relation)
reader.attributes_finder.find_excluded_keys(relation)
end
def nil_iid_pipeline?(relation_key, relation_item)
relation_key == 'pipelines' && relation_item['iid'].nil?
end
end
end
end
......@@ -86,7 +86,6 @@ module Gitlab
case @relation_name
when :merge_request_diff_files then setup_diff
when :notes then setup_note
when 'Ci::Pipeline' then setup_pipeline
end
update_user_references
......@@ -94,6 +93,8 @@ module Gitlab
update_group_references
remove_duplicate_assignees
setup_pipeline if @relation_name == 'Ci::Pipeline'
reset_tokens!
remove_encrypted_attributes!
end
......
......@@ -6143,7 +6143,7 @@
"id": 36,
"project_id": 5,
"ref": "master",
"sha": "be93687618e4b132087f430a4d8fc3a609c9b77c",
"sha": "sha-notes",
"before_sha": null,
"push_data": null,
"created_at": "2016-03-22T15:20:35.755Z",
......@@ -6154,6 +6154,7 @@
"status": "failed",
"started_at": null,
"finished_at": null,
"user_id": 9999,
"duration": null,
"notes": [
{
......@@ -6353,6 +6354,7 @@
},
{
"id": 38,
"iid": 1,
"project_id": 5,
"ref": "master",
"sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
......
......@@ -59,7 +59,11 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end
it 'creates a valid pipeline note' do
expect(Ci::Pipeline.first.notes).not_to be_empty
expect(Ci::Pipeline.find_by_sha('sha-notes').notes).not_to be_empty
end
it 'pipeline has the correct user ID' do
expect(Ci::Pipeline.find_by_sha('sha-notes').user_id).to eq(@user.id)
end
it 'restores pipelines with missing ref' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment