debian-mirror-gitlab/lib/gitlab/import_export/project_tree_restorer.rb

73 lines
1.9 KiB
Ruby
Raw Normal View History

2019-02-15 15:39:39 +05:30
# frozen_string_literal: true
2016-06-22 15:30:34 +05:30
module Gitlab
module ImportExport
class ProjectTreeRestorer
2019-12-21 20:55:43 +05:30
attr_reader :user
attr_reader :shared
attr_reader :project
2016-06-22 15:30:34 +05:30
def initialize(user:, shared:, project:)
@path = File.join(shared.export_path, 'project.json')
@user = user
2020-01-01 13:55:28 +05:30
@shared = shared
2016-06-22 15:30:34 +05:30
@project = project
end
def restore
2020-01-01 13:55:28 +05:30
@tree_hash = read_tree_hash
2016-06-22 15:30:34 +05:30
@project_members = @tree_hash.delete('project_members')
2016-08-24 12:49:21 +05:30
2019-02-15 15:39:39 +05:30
RelationRenameService.rename(@tree_hash)
2020-01-01 13:55:28 +05:30
if relation_tree_restorer.restore
@project.merge_requests.set_latest_merge_request_diff_ids!
2019-12-21 20:55:43 +05:30
2020-01-01 13:55:28 +05:30
true
else
false
end
2016-06-22 15:30:34 +05:30
rescue => e
@shared.error(e)
false
end
2019-12-21 20:55:43 +05:30
private
2018-05-09 12:01:36 +05:30
2019-12-21 20:55:43 +05:30
def read_tree_hash
json = IO.read(@path)
ActiveSupport::JSON.decode(json)
2020-01-01 13:55:28 +05:30
rescue => e
Rails.logger.error("Import/Export error: #{e.message}") # rubocop:disable Gitlab/RailsLogger
raise Gitlab::ImportExport::Error.new('Incorrect JSON format')
2016-06-22 15:30:34 +05:30
end
2020-01-01 13:55:28 +05:30
def relation_tree_restorer
@relation_tree_restorer ||= RelationTreeRestorer.new(
2019-12-26 22:10:19 +05:30
user: @user,
2020-01-01 13:55:28 +05:30
shared: @shared,
importable: @project,
tree_hash: @tree_hash,
members_mapper: members_mapper,
relation_factory: relation_factory,
reader: reader
)
2019-12-26 22:10:19 +05:30
end
2020-01-01 13:55:28 +05:30
def members_mapper
@members_mapper ||= Gitlab::ImportExport::MembersMapper.new(exported_members: @project_members,
user: @user,
importable: @project)
2016-06-22 15:30:34 +05:30
end
2020-01-01 13:55:28 +05:30
def relation_factory
Gitlab::ImportExport::RelationFactory
2016-06-22 15:30:34 +05:30
end
2016-11-03 12:29:30 +05:30
2018-05-09 12:01:36 +05:30
def reader
@reader ||= Gitlab::ImportExport::Reader.new(shared: @shared)
end
2016-06-22 15:30:34 +05:30
end
end
end