Welcome to mirror list, hosted at ThFree Co, Russian Federation.

project_tree_restorer.rb « import_export « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: e598cfc143e7c598fb6c7ecef0709196bbca6e13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# frozen_string_literal: true

module Gitlab
  module ImportExport
    class ProjectTreeRestorer
      attr_reader :user
      attr_reader :shared
      attr_reader :project

      def initialize(user:, shared:, project:)
        @path = File.join(shared.export_path, 'project.json')
        @user = user
        @shared = shared
        @project = project
      end

      def restore
        @tree_hash = read_tree_hash
        @project_members = @tree_hash.delete('project_members')

        RelationRenameService.rename(@tree_hash)

        if relation_tree_restorer.restore
          @project.merge_requests.set_latest_merge_request_diff_ids!

          true
        else
          false
        end
      rescue => e
        @shared.error(e)
        false
      end

      private

      def read_tree_hash
        json = IO.read(@path)
        ActiveSupport::JSON.decode(json)
      rescue => e
        Rails.logger.error("Import/Export error: #{e.message}") # rubocop:disable Gitlab/RailsLogger
        raise Gitlab::ImportExport::Error.new('Incorrect JSON format')
      end

      def relation_tree_restorer
        @relation_tree_restorer ||= RelationTreeRestorer.new(
          user: @user,
          shared: @shared,
          importable: @project,
          tree_hash: @tree_hash,
          object_builder: object_builder,
          members_mapper: members_mapper,
          relation_factory: relation_factory,
          reader: reader
        )
      end

      def members_mapper
        @members_mapper ||= Gitlab::ImportExport::MembersMapper.new(exported_members: @project_members,
                                                                    user: @user,
                                                                    importable: @project)
      end

      def object_builder
        Gitlab::ImportExport::GroupProjectObjectBuilder
      end

      def relation_factory
        Gitlab::ImportExport::ProjectRelationFactory
      end

      def reader
        @reader ||= Gitlab::ImportExport::Reader.new(shared: @shared)
      end
    end
  end
end