in app/services/projects/create_service.rb [26:103]
def execute
params[:wiki_enabled] = params[:wiki_access_level] if params[:wiki_access_level]
params[:builds_enabled] = params[:builds_access_level] if params[:builds_access_level]
params[:snippets_enabled] = params[:snippets_access_level] if params[:snippets_access_level]
params[:merge_requests_enabled] = params[:merge_requests_access_level] if params[:merge_requests_access_level]
params[:issues_enabled] = params[:issues_access_level] if params[:issues_access_level]
if create_from_template?
return ::Projects::CreateFromTemplateService.new(current_user, params).execute
end
@project = Project.new.tap do |p|
p.build_ci_cd_settings
p.assign_attributes(params.merge(creator: current_user))
end
if @import_export_upload
@import_export_upload.project = project
end
validate_import_source_enabled!
@project.visibility_level = @project.group.visibility_level unless @project.visibility_level_allowed_by_group?
@project.shared_runners_enabled = false if !params.key?(:shared_runners_enabled) && @project.group && @project.group.shared_runners_setting != 'enabled'
if project_visibility.restricted?
deny_visibility_level(@project, project_visibility.visibility_level)
return @project
end
set_project_name_from_path
@project.namespace_id = (params[:namespace_id] || current_user.namespace_id).to_i
@project.organization_id = (params[:organization_id] || @project.namespace.organization_id).to_i
@project.check_personal_projects_limit
return @project if @project.errors.any?
validate_create_permissions
validate_import_permissions
return @project if @project.errors.any?
@relations_block&.call(@project)
yield(@project) if block_given?
validate_classification_label_param!(@project, :external_authorization_classification_label)
return @project if @project.errors.any?
@project.creator = current_user
save_project_and_import_data
Gitlab::ApplicationContext.with_context(project: @project) do
after_create_actions if @project.persisted?
import_schedule
end
@project
rescue ActiveRecord::RecordInvalid => e
message = "Unable to save #{e.inspect}: #{e.record.errors.full_messages.join(', ')}"
fail(error: message)
rescue ImportSourceDisabledError => e
@project.errors.add(:import_source_disabled, e.message) if @project
fail(error: e.message)
rescue StandardError => e
@project.errors.add(:base, e.message) if @project
fail(error: e.message)
end