summaryrefslogtreecommitdiff
path: root/lib/gitlab/import_export
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-05-13 12:33:13 +0200
committerJames Lopez <james@jameslopez.es>2016-05-13 12:33:13 +0200
commit25a1c6541aa3dfb41ef006d42ba280d5a1d4103d (patch)
tree5ca5419641746e035c042c9f7807b02db57e1db8 /lib/gitlab/import_export
parent78cd39e480eea7db7a2e34576c9d6a4446167486 (diff)
downloadgitlab-ce-25a1c6541aa3dfb41ef006d42ba280d5a1d4103d.tar.gz
add message to notes about missing author on import
Diffstat (limited to 'lib/gitlab/import_export')
-rw-r--r--lib/gitlab/import_export/import_export_reader.rb2
-rw-r--r--lib/gitlab/import_export/importer.rb2
-rw-r--r--lib/gitlab/import_export/members_mapper.rb19
-rw-r--r--lib/gitlab/import_export/project_tree_restorer.rb26
-rw-r--r--lib/gitlab/import_export/project_tree_saver.rb2
-rw-r--r--lib/gitlab/import_export/relation_factory.rb20
-rw-r--r--lib/gitlab/import_export/repo_bundler.rb2
-rw-r--r--lib/gitlab/import_export/repo_restorer.rb2
-rw-r--r--lib/gitlab/import_export/saver.rb2
-rw-r--r--lib/gitlab/import_export/shared.rb8
-rw-r--r--lib/gitlab/import_export/wiki_repo_bundler.rb2
11 files changed, 59 insertions, 28 deletions
diff --git a/lib/gitlab/import_export/import_export_reader.rb b/lib/gitlab/import_export/import_export_reader.rb
index 5d218320e23..11a736ecab6 100644
--- a/lib/gitlab/import_export/import_export_reader.rb
+++ b/lib/gitlab/import_export/import_export_reader.rb
@@ -15,7 +15,7 @@ module Gitlab
def project_tree
@attributes_parser.find_included(:project).merge(include: build_hash(@tree))
rescue => e
- @shared.error(e.message)
+ @shared.error(e)
end
private
diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb
index 20a93f7f6de..d73ce43b491 100644
--- a/lib/gitlab/import_export/importer.rb
+++ b/lib/gitlab/import_export/importer.rb
@@ -16,7 +16,7 @@ module Gitlab
FileUtils.mkdir_p(@shared.export_path)
decompress_archive
rescue => e
- @shared.error(e.message)
+ @shared.error(e)
false
end
diff --git a/lib/gitlab/import_export/members_mapper.rb b/lib/gitlab/import_export/members_mapper.rb
index d6124106f57..da8aa475653 100644
--- a/lib/gitlab/import_export/members_mapper.rb
+++ b/lib/gitlab/import_export/members_mapper.rb
@@ -2,18 +2,25 @@ module Gitlab
module ImportExport
class MembersMapper
- def self.map(*args)
- new(*args).map
- end
+ attr_reader :map, :note_member_list
def initialize(exported_members:, user:, project_id:)
@exported_members = exported_members
@user = user
@project_id = project_id
+ @note_member_list = []
+
+ @project_member_map = Hash.new do |_, key|
+ @note_member_list << key
+ default_project_member
+ end
+
+ @map = generate_map
end
- def map
- @project_member_map = Hash.new(default_project_member)
+ private
+
+ def generate_map
@exported_members.each do |member|
existing_user = User.where(find_project_user_query(member)).first
assign_member(existing_user, member) if existing_user
@@ -21,8 +28,6 @@ module Gitlab
@project_member_map
end
- private
-
def assign_member(existing_user, member)
old_user_id = member['user']['id']
member['user'] = existing_user
diff --git a/lib/gitlab/import_export/project_tree_restorer.rb b/lib/gitlab/import_export/project_tree_restorer.rb
index 06bf86a1787..a840c9f9478 100644
--- a/lib/gitlab/import_export/project_tree_restorer.rb
+++ b/lib/gitlab/import_export/project_tree_restorer.rb
@@ -16,7 +16,7 @@ module Gitlab
@project_members = @tree_hash.delete('project_members')
create_relations
rescue => e
- @shared.error(e.message)
+ @shared.error(e)
false
end
@@ -26,9 +26,10 @@ module Gitlab
private
- def members_map
- @members ||= Gitlab::ImportExport::MembersMapper.map(
- exported_members: @project_members, user: @user, project_id: project.id)
+ def members_mapper
+ @members_mapper ||= Gitlab::ImportExport::MembersMapper.new(exported_members: @project_members,
+ user: @user,
+ project_id: project.id)
end
def create_relations(relation_list = default_relation_list, tree_hash = @tree_hash)
@@ -61,11 +62,18 @@ module Gitlab
end
def create_sub_relations(relation, tree_hash)
- tree_hash[relation.keys.first.to_s].each do |relation_item|
+ relation_key = relation.keys.first.to_s
+ tree_hash[relation_key].each do |relation_item|
relation.values.flatten.each do |sub_relation|
- relation_hash = relation_item[sub_relation.to_s]
- next if relation_hash.blank?
- process_sub_relation(relation_hash, relation_item, sub_relation)
+
+ if sub_relation.is_a?(Hash)
+ relation_hash = relation_item[sub_relation.keys.first.to_s]
+ sub_relation = sub_relation.keys.first
+ else
+ relation_hash = relation_item[sub_relation.to_s]
+ end
+
+ process_sub_relation(relation_hash, relation_item, sub_relation) unless relation_hash.blank?
end
end
end
@@ -87,7 +95,7 @@ module Gitlab
def relation_from_factory(relation, relation_hash)
Gitlab::ImportExport::RelationFactory.create(
- relation_sym: relation.to_sym, relation_hash: relation_hash.merge('project_id' => project.id), members_map: members_map)
+ relation_sym: relation.to_sym, relation_hash: relation_hash.merge('project_id' => project.id), members_mapper: members_mapper)
end
end
end
diff --git a/lib/gitlab/import_export/project_tree_saver.rb b/lib/gitlab/import_export/project_tree_saver.rb
index 2287524c8a5..ed8ca31d936 100644
--- a/lib/gitlab/import_export/project_tree_saver.rb
+++ b/lib/gitlab/import_export/project_tree_saver.rb
@@ -14,7 +14,7 @@ module Gitlab
File.write(full_path, project_json_tree)
true
rescue => e
- @shared.error(e.message)
+ @shared.error(e)
false
end
diff --git a/lib/gitlab/import_export/relation_factory.rb b/lib/gitlab/import_export/relation_factory.rb
index dd992ef443e..65e2a935fa9 100644
--- a/lib/gitlab/import_export/relation_factory.rb
+++ b/lib/gitlab/import_export/relation_factory.rb
@@ -6,11 +6,12 @@ module Gitlab
OVERRIDES = { snippets: :project_snippets, ci_commits: 'Ci::Commit', statuses: 'commit_status' }.freeze
USER_REFERENCES = %w(author_id assignee_id updated_by_id).freeze
- def create(relation_sym:, relation_hash:, members_map:)
+ def create(relation_sym:, relation_hash:, members_mapper:)
relation_sym = parse_relation_sym(relation_sym)
klass = parse_relation(relation_hash, relation_sym)
- update_user_references(relation_hash, members_map)
+ update_missing_author(relation_hash, members_mapper) if relation_sym == :notes
+ update_user_references(relation_hash, members_mapper.map)
update_project_references(relation_hash, klass)
imported_object(klass, relation_hash)
@@ -26,6 +27,21 @@ module Gitlab
end
end
+ def update_missing_author(relation_hash, members_map)
+ old_author_id = relation_hash['author_id'].dup
+ relation_hash['author_id'] = members_map.map[old_author_id]
+ return unless members_map.note_member_list.include?(old_author_id)
+
+ relation_hash['note'] = ('*Blank note*') if relation_hash['note'].blank?
+ relation_hash['note'].join(missing_author_note(relation_hash['updated_at'],
+ relation_hash['author']['name']))
+ relation_hash.delete('author')
+ end
+
+ def missing_author_note(updated_at, author_name)
+ "\n\n *By #{author_name} on #{updated_at} (imported from GitLab project)*"
+ end
+
def update_project_references(relation_hash, klass)
project_id = relation_hash.delete('project_id')
diff --git a/lib/gitlab/import_export/repo_bundler.rb b/lib/gitlab/import_export/repo_bundler.rb
index bcf976fb624..af809f4c38c 100644
--- a/lib/gitlab/import_export/repo_bundler.rb
+++ b/lib/gitlab/import_export/repo_bundler.rb
@@ -22,7 +22,7 @@ module Gitlab
FileUtils.mkdir_p(@shared.export_path)
git_bundle(repo_path: path_to_repo, bundle_path: @full_path)
rescue => e
- @shared.error(e.message)
+ @shared.error(e)
false
end
diff --git a/lib/gitlab/import_export/repo_restorer.rb b/lib/gitlab/import_export/repo_restorer.rb
index 3909d447448..36094b95aa4 100644
--- a/lib/gitlab/import_export/repo_restorer.rb
+++ b/lib/gitlab/import_export/repo_restorer.rb
@@ -17,7 +17,7 @@ module Gitlab
git_unbundle(repo_path: path_to_repo, bundle_path: @path_to_bundle)
rescue => e
- @shared.error(e.message)
+ @shared.error(e)
false
end
diff --git a/lib/gitlab/import_export/saver.rb b/lib/gitlab/import_export/saver.rb
index a2ff43a3ce3..f38229c6c59 100644
--- a/lib/gitlab/import_export/saver.rb
+++ b/lib/gitlab/import_export/saver.rb
@@ -20,7 +20,7 @@ module Gitlab
false
end
rescue => e
- @shared.error(e.message)
+ @shared.error(e)
false
end
diff --git a/lib/gitlab/import_export/shared.rb b/lib/gitlab/import_export/shared.rb
index 050b0428f45..01ac332981b 100644
--- a/lib/gitlab/import_export/shared.rb
+++ b/lib/gitlab/import_export/shared.rb
@@ -13,9 +13,11 @@ module Gitlab
@export_path ||= Gitlab::ImportExport.export_path(relative_path: @opts[:relative_path])
end
- def error(message)
- error_out(message, caller[0].dup)
- @errors << message
+ def error(error)
+ error_out(error.message, caller[0].dup)
+ @errors << error.message
+ # Debug:
+ Rails.logger.error(error.backtrace)
end
private
diff --git a/lib/gitlab/import_export/wiki_repo_bundler.rb b/lib/gitlab/import_export/wiki_repo_bundler.rb
index a0000176bb5..e1e7f753720 100644
--- a/lib/gitlab/import_export/wiki_repo_bundler.rb
+++ b/lib/gitlab/import_export/wiki_repo_bundler.rb
@@ -12,7 +12,7 @@ module Gitlab
FileUtils.mkdir_p(@shared.export_path)
git_bundle(repo_path: path_to_repo, bundle_path: @full_path)
rescue => e
- @shared.error(e.message)
+ @shared.error(e)
false
end