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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-02-18 13:34:06 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-02-18 13:34:06 +0300
commit859a6fb938bb9ee2a317c46dfa4fcc1af49608f0 (patch)
treed7f2700abe6b4ffcb2dcfc80631b2d87d0609239 /app/services/packages/debian/create_distribution_service.rb
parent446d496a6d000c73a304be52587cd9bbc7493136 (diff)
Add latest changes from gitlab-org/gitlab@13-9-stable-eev13.9.0-rc42
Diffstat (limited to 'app/services/packages/debian/create_distribution_service.rb')
-rw-r--r--app/services/packages/debian/create_distribution_service.rb75
1 files changed, 75 insertions, 0 deletions
diff --git a/app/services/packages/debian/create_distribution_service.rb b/app/services/packages/debian/create_distribution_service.rb
new file mode 100644
index 00000000000..c6df033e3c1
--- /dev/null
+++ b/app/services/packages/debian/create_distribution_service.rb
@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+module Packages
+ module Debian
+ class CreateDistributionService
+ def initialize(container, user, params)
+ @container, @params = container, params
+ @params[:creator] = user
+
+ @components = params.delete(:components) || ['main']
+
+ @architectures = params.delete(:architectures) || ['amd64']
+ @architectures += ['all']
+
+ @distribution = nil
+ @errors = []
+ end
+
+ def execute
+ create_distribution
+ end
+
+ private
+
+ attr_reader :container, :params, :components, :architectures, :distribution, :errors
+
+ def append_errors(record, prefix = '')
+ return if record.valid?
+
+ prefix = "#{prefix} " unless prefix.empty?
+ @errors += record.errors.full_messages.map { |message| "#{prefix}#{message}" }
+ end
+
+ def create_distribution
+ @distribution = container.debian_distributions.new(params)
+
+ append_errors(distribution)
+ return error unless errors.empty?
+
+ distribution.transaction do
+ if distribution.save
+ create_components
+ create_architectures
+
+ success
+ end
+ end || error
+ end
+
+ def create_components
+ create_objects(distribution.components, components, error_label: 'Component')
+ end
+
+ def create_architectures
+ create_objects(distribution.architectures, architectures, error_label: 'Architecture')
+ end
+
+ def create_objects(objects, object_names_from_params, error_label: )
+ object_names_from_params.each do |name|
+ new_object = objects.create(name: name)
+ append_errors(new_object, error_label)
+ raise ActiveRecord::Rollback unless new_object.persisted?
+ end
+ end
+
+ def success
+ ServiceResponse.success(payload: { distribution: distribution }, http_status: :created)
+ end
+
+ def error
+ ServiceResponse.error(message: errors.to_sentence, payload: { distribution: distribution })
+ end
+ end
+ end
+end