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

group_tree_saver.rb « import_export « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 8d2fb881cc0e21055b1cf9a56e04ca069554d735 (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
# frozen_string_literal: true

module Gitlab
  module ImportExport
    class GroupTreeSaver
      attr_reader :full_path

      def initialize(group:, current_user:, shared:, params: {})
        @params       = params
        @current_user = current_user
        @shared       = shared
        @group        = group
        @full_path    = File.join(@shared.export_path, ImportExport.group_filename)
      end

      def save
        group_tree = serialize(@group, reader.group_tree)
        tree_saver.save(group_tree, @shared.export_path, ImportExport.group_filename)

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

      private

      def serialize(group, relations_tree)
        group_tree = tree_saver.serialize(group, relations_tree)

        group.children.each do |child|
          group_tree['children'] ||= []
          group_tree['children'] << serialize(child, relations_tree)
        end

        group_tree
      rescue => e
        @shared.error(e)
      end

      def reader
        @reader ||= Gitlab::ImportExport::Reader.new(
          shared: @shared,
          config: Gitlab::ImportExport::Config.new(
            config: Gitlab::ImportExport.group_config_file
          ).to_h
        )
      end

      def tree_saver
        @tree_saver ||= RelationTreeSaver.new
      end
    end
  end
end