blob: c842798ca74bc77a523956517ec094eb1174743d (
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
78
79
|
# frozen_string_literal: true
module Gitlab
module PhabricatorImport
class ProjectCreator
def initialize(current_user, params)
@current_user = current_user
@params = params.dup
end
def execute
return unless import_url.present? && api_token.present?
project = Projects::CreateService.new(current_user, create_params).execute
return project unless project.persisted?
project.project_feature.update!(project_feature_attributes)
project
end
private
attr_reader :current_user, :params
def create_params
{
name: project_name,
path: project_path,
namespace_id: namespace_id,
import_type: 'phabricator',
import_url: Project::UNKNOWN_IMPORT_URL,
import_data: import_data
}
end
def project_name
params[:name]
end
def project_path
params[:path]
end
def namespace_id
params[:namespace_id] || current_user.namespace_id
end
def import_url
params[:phabricator_server_url]
end
def api_token
params[:api_token]
end
def project_feature_attributes
@project_features_attributes ||=
begin
# everything disabled except for issues
ProjectFeature::FEATURES.to_h do |feature|
[ProjectFeature.access_level_attribute(feature), ProjectFeature::DISABLED]
end.merge(ProjectFeature.access_level_attribute(:issues) => ProjectFeature::ENABLED)
end
end
def import_data
{
data: {
phabricator_url: import_url
},
credentials: {
api_token: params.fetch(:api_token)
}
}
end
end
end
end
|