Commit d31ff28c authored by Robert Speicher's avatar Robert Speicher

Merge branch 'fix/import-mr-source' into 'master'

Fix importing with an invalid MR source project

Source project shouldn't be -1 when both source and target are the same in the original export.

Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/20611

See merge request !5679
parents c7302216 f8e85479
...@@ -83,6 +83,7 @@ v 8.11.0 (unreleased) ...@@ -83,6 +83,7 @@ v 8.11.0 (unreleased)
- Adds support for pending invitation project members importing projects - Adds support for pending invitation project members importing projects
- Update devise initializer to turn on changed password notification emails. !5648 (tombell) - Update devise initializer to turn on changed password notification emails. !5648 (tombell)
- Avoid to show the original password field when password is automatically set. !5712 (duduribeiro) - Avoid to show the original password field when password is automatically set. !5712 (duduribeiro)
- Fix importing GitLab projects with an invalid MR source project
v 8.10.5 (unreleased) v 8.10.5 (unreleased)
......
...@@ -102,17 +102,19 @@ module Gitlab ...@@ -102,17 +102,19 @@ module Gitlab
def update_project_references def update_project_references
project_id = @relation_hash.delete('project_id') project_id = @relation_hash.delete('project_id')
# If source and target are the same, populate them with the new project ID.
if @relation_hash['source_project_id']
@relation_hash['source_project_id'] = same_source_and_target? ? project_id : -1
end
# project_id may not be part of the export, but we always need to populate it if required. # project_id may not be part of the export, but we always need to populate it if required.
@relation_hash['project_id'] = project_id @relation_hash['project_id'] = project_id
@relation_hash['gl_project_id'] = project_id if @relation_hash['gl_project_id'] @relation_hash['gl_project_id'] = project_id if @relation_hash['gl_project_id']
@relation_hash['target_project_id'] = project_id if @relation_hash['target_project_id'] @relation_hash['target_project_id'] = project_id if @relation_hash['target_project_id']
@relation_hash['source_project_id'] = -1 if @relation_hash['source_project_id']
# If source and target are the same, populate them with the new project ID.
if @relation_hash['source_project_id'] && @relation_hash['target_project_id'] &&
@relation_hash['target_project_id'] == @relation_hash['source_project_id']
@relation_hash['source_project_id'] = project_id
end end
def same_source_and_target?
@relation_hash['target_project_id'] && @relation_hash['target_project_id'] == @relation_hash['source_project_id']
end end
def reset_ci_tokens def reset_ci_tokens
......
...@@ -2393,7 +2393,7 @@ ...@@ -2393,7 +2393,7 @@
"source_project_id": 5, "source_project_id": 5,
"author_id": 1, "author_id": 1,
"assignee_id": null, "assignee_id": null,
"title": "Cannot be automatically merged", "title": "MR1",
"created_at": "2016-06-14T15:02:36.568Z", "created_at": "2016-06-14T15:02:36.568Z",
"updated_at": "2016-06-14T15:02:56.815Z", "updated_at": "2016-06-14T15:02:56.815Z",
"state": "opened", "state": "opened",
...@@ -2827,10 +2827,10 @@ ...@@ -2827,10 +2827,10 @@
"id": 26, "id": 26,
"target_branch": "master", "target_branch": "master",
"source_branch": "feature", "source_branch": "feature",
"source_project_id": 5, "source_project_id": 4,
"author_id": 1, "author_id": 1,
"assignee_id": null, "assignee_id": null,
"title": "Can be automatically merged", "title": "MR2",
"created_at": "2016-06-14T15:02:36.418Z", "created_at": "2016-06-14T15:02:36.418Z",
"updated_at": "2016-06-14T15:02:57.013Z", "updated_at": "2016-06-14T15:02:57.013Z",
"state": "opened", "state": "opened",
......
...@@ -71,6 +71,28 @@ describe Gitlab::ImportExport::ProjectTreeRestorer, services: true do ...@@ -71,6 +71,28 @@ describe Gitlab::ImportExport::ProjectTreeRestorer, services: true do
expect(Milestone.find_by_description('test milestone').issues).not_to be_empty expect(Milestone.find_by_description('test milestone').issues).not_to be_empty
end end
context 'Merge requests' do
before do
restored_project_json
end
it 'always has the new project as a target' do
expect(MergeRequest.find_by_title('MR1').target_project).to eq(project)
end
it 'has the same source project as originally if source/target are the same' do
expect(MergeRequest.find_by_title('MR1').source_project).to eq(project)
end
it 'has the new project as target if source/target differ' do
expect(MergeRequest.find_by_title('MR2').target_project).to eq(project)
end
it 'has no source if source/target differ' do
expect(MergeRequest.find_by_title('MR2').source_project_id).to eq(-1)
end
end
end end
end end
end end
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