summaryrefslogtreecommitdiff
path: root/lib/gitlab/manifest_import/project_creator.rb
blob: b5967c93735a4bfd40d41944a0d69a46af1be904 (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
module Gitlab
  module ManifestImport
    class ProjectCreator
      attr_reader :repository, :destination, :current_user

      def initialize(repository, destination, current_user)
        @repository = repository
        @destination = destination
        @current_user = current_user
      end

      def execute
        group_full_path, _, project_path = repository[:path].rpartition('/')
        group_full_path = File.join(destination.full_path, group_full_path) if destination
        group = create_group_with_parents(group_full_path)

        params = {
          import_url: repository[:url],
          import_type: 'manifest',
          namespace_id: group.id,
          path: project_path,
          name: project_path,
          visibility_level: destination.visibility_level
        }

        Projects::CreateService.new(current_user, params).execute
      end

      private

      def create_group_with_parents(full_path)
        params = {
          group_path: full_path,
          visibility_level: destination.visibility_level
        }

        Groups::NestedCreateService.new(current_user, params).execute
      end
    end
  end
end