BigW Consortium Gitlab

Commit 0df21ac7 by James Lopez

revert changes as builds are related to statuses which are already there

parent 4d894a7a
module Gitlab
module ImportExport
class CommitMapper
def initialize(commits:, members_map:, project_id:, relation_factory: Gitlab::ImportExport::RelationFactory, user_admin:)
@commits = commits
@members_map = members_map
@project_id = project_id
@relation_factory = relation_factory
@user_admin = user_admin
end
def ids_map
@ids_map ||= map_commits
end
def map_commits
@id_map = Hash.new(-1)
@commits.each do |commit_hash|
@relation_factory.update_user_references(commit_hash, @members_map)
commit_hash['project_id'] = @project_id
@relation_factory.update_project_references(commit_hash, Ci::Commit)
create_commit_statuses(commit_hash)
create_commit(commit_hash)
end
@id_map
end
def create_commit(commit_hash)
old_id = commit_hash.delete('id')
commit = Ci::Commit.new(commit_hash)
commit.save!
@id_map[old_id] = commit.id
end
def create_commit_statuses(commit_hash)
commit_hash['statuses'].map! do |status_hash|
@relation_factory.create(relation_sym: :statuses,
relation_hash: status_hash.merge('project_id' => @project_id,
'commit_id' => nil),
members_mapper: @members_map,
commits_mapper: nil,
user_admin: @user_admin)
end
end
end
end
end
...@@ -14,7 +14,6 @@ module Gitlab ...@@ -14,7 +14,6 @@ module Gitlab
json = IO.read(@path) json = IO.read(@path)
@tree_hash = ActiveSupport::JSON.decode(json) @tree_hash = ActiveSupport::JSON.decode(json)
@project_members = @tree_hash.delete('project_members') @project_members = @tree_hash.delete('project_members')
@commits = @tree_hash.delete('ci_commits')
create_relations create_relations
rescue => e rescue => e
@shared.error(e) @shared.error(e)
...@@ -33,13 +32,6 @@ module Gitlab ...@@ -33,13 +32,6 @@ module Gitlab
project: project) project: project)
end end
def commits_mapper
@commits_mapper ||= Gitlab::ImportExport::CommitMapper.new(commits: @commits,
members_map: members_mapper.map,
project_id: project.id,
user_admin: @user.is_admin?)
end
def create_relations(relation_list = default_relation_list, tree_hash = @tree_hash) def create_relations(relation_list = default_relation_list, tree_hash = @tree_hash)
saved = [] saved = []
relation_list.each do |relation| relation_list.each do |relation|
...@@ -55,7 +47,7 @@ module Gitlab ...@@ -55,7 +47,7 @@ module Gitlab
def default_relation_list def default_relation_list
Gitlab::ImportExport::ImportExportReader.new(shared: @shared).tree.reject do |model| Gitlab::ImportExport::ImportExportReader.new(shared: @shared).tree.reject do |model|
model.is_a?(Hash) && (model[:project_members] || model[:ci_commits]) model.is_a?(Hash) && model[:project_members]
end end
end end
...@@ -73,8 +65,9 @@ module Gitlab ...@@ -73,8 +65,9 @@ module Gitlab
relation_key = relation.keys.first.to_s relation_key = relation.keys.first.to_s
tree_hash[relation_key].each do |relation_item| tree_hash[relation_key].each do |relation_item|
relation.values.flatten.each do |sub_relation| relation.values.flatten.each do |sub_relation|
if sub_relation.is_a?(Hash) if sub_relation.is_a?(Hash)
relation_hash = relation_item[sub_relation.keys.first.to_s] relation_hash = relation_item[sub_relation.keys.first.to_s]
sub_relation = sub_relation.keys.first sub_relation = sub_relation.keys.first
else else
relation_hash = relation_item[sub_relation.to_s] relation_hash = relation_item[sub_relation.to_s]
...@@ -104,7 +97,6 @@ module Gitlab ...@@ -104,7 +97,6 @@ module Gitlab
Gitlab::ImportExport::RelationFactory.create(relation_sym: relation.to_sym, Gitlab::ImportExport::RelationFactory.create(relation_sym: relation.to_sym,
relation_hash: relation_hash.merge('project_id' => project.id), relation_hash: relation_hash.merge('project_id' => project.id),
members_mapper: members_mapper, members_mapper: members_mapper,
commits_mapper: commits_mapper,
user_admin: @user.is_admin?) user_admin: @user.is_admin?)
end end
end end
......
...@@ -3,27 +3,21 @@ module Gitlab ...@@ -3,27 +3,21 @@ module Gitlab
module RelationFactory module RelationFactory
extend self extend self
OVERRIDES = { snippets: :project_snippets, OVERRIDES = { snippets: :project_snippets, ci_commits: 'Ci::Commit', statuses: 'commit_status' }.freeze
ci_commits: 'Ci::Commit', USER_REFERENCES = %w(author_id assignee_id updated_by_id).freeze
statuses: 'commit_status',
variables: 'Ci::Variable', def create(relation_sym:, relation_hash:, members_mapper:, user_admin:)
triggers: 'Ci::Trigger',
builds: 'Ci::Build',
hooks: 'ProjectHook' }.freeze
USER_REFERENCES = %w(author_id assignee_id updated_by_id user_id).freeze
def create(relation_sym:, relation_hash:, members_mapper:, commits_mapper:, user_admin:)
relation_sym = parse_relation_sym(relation_sym) relation_sym = parse_relation_sym(relation_sym)
klass = parse_relation(relation_hash, relation_sym) klass = parse_relation(relation_hash, relation_sym)
update_missing_author(relation_hash, members_mapper, user_admin) if relation_sym == :notes update_missing_author(relation_hash, members_mapper, user_admin) if relation_sym == :notes
update_user_references(relation_hash, members_mapper.map) update_user_references(relation_hash, members_mapper.map)
update_project_references(relation_hash, klass) update_project_references(relation_hash, klass)
update_commit_references(relation_hash, commits_mapper.ids_map) if commits_mapper
generate_imported_object(klass, relation_hash, relation_sym) imported_object(klass, relation_hash)
end end
private
def update_user_references(relation_hash, members_map) def update_user_references(relation_hash, members_map)
USER_REFERENCES.each do |reference| USER_REFERENCES.each do |reference|
...@@ -33,32 +27,6 @@ module Gitlab ...@@ -33,32 +27,6 @@ module Gitlab
end end
end end
def update_project_references(relation_hash, klass)
project_id = relation_hash.delete('project_id')
if relation_hash['source_project_id'] && relation_hash['target_project_id']
# If source and target are the same, populate them with the new project ID.
if relation_hash['target_project_id'] == relation_hash['source_project_id']
relation_hash['source_project_id'] = project_id
else
relation_hash['source_project_id'] = -1
end
end
relation_hash['target_project_id'] = project_id if relation_hash['target_project_id']
# project_id may not be part of the export, but we always need to populate it if required.
relation_hash['project_id'] = project_id if klass.column_names.include?('project_id')
relation_hash['gl_project_id'] = project_id if relation_hash['gl_project_id']
end
private
def update_commit_references(relation_hash, commit_ids_map)
return unless relation_hash['commit_id']
old_commit_id = relation_hash['commit_id']
relation_hash['commit_id'] = commit_ids_map[old_commit_id]
end
def update_missing_author(relation_hash, members_map, user_admin) def update_missing_author(relation_hash, members_map, user_admin)
old_author_id = relation_hash['author_id'] old_author_id = relation_hash['author_id']
...@@ -82,15 +50,22 @@ module Gitlab ...@@ -82,15 +50,22 @@ module Gitlab
"\n\n *By #{author_name} on #{timestamp} (imported from GitLab project)*" "\n\n *By #{author_name} on #{timestamp} (imported from GitLab project)*"
end end
def generate_imported_object(klass, relation_hash, relation_sym) def update_project_references(relation_hash, klass)
if relation_sym == 'Ci::Build' # call #trace= method after assigning the other attributes project_id = relation_hash.delete('project_id')
trace = relation_hash.delete('trace')
imported_object(klass, relation_hash) do |imported_object| if relation_hash['source_project_id'] && relation_hash['target_project_id']
imported_object.trace = trace # If source and target are the same, populate them with the new project ID.
if relation_hash['target_project_id'] == relation_hash['source_project_id']
relation_hash['source_project_id'] = project_id
else
relation_hash['source_project_id'] = -1
end end
else
imported_object(klass, relation_hash)
end end
relation_hash['target_project_id'] = project_id if relation_hash['target_project_id']
# project_id may not be part of the export, but we always need to populate it if required.
relation_hash['project_id'] = project_id if klass.column_names.include?('project_id')
relation_hash['gl_project_id'] = project_id if relation_hash ['gl_project_id']
end end
def relation_class(relation_sym) def relation_class(relation_sym)
...@@ -103,7 +78,6 @@ module Gitlab ...@@ -103,7 +78,6 @@ module Gitlab
def imported_object(klass, relation_hash) def imported_object(klass, relation_hash)
imported_object = klass.new(relation_hash) imported_object = klass.new(relation_hash)
yield(imported_object) if block_given?
imported_object.importing = true if imported_object.respond_to?(:importing) imported_object.importing = true if imported_object.respond_to?(:importing)
imported_object imported_object
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