diff options
Diffstat (limited to 'app/services/packages/debian')
-rw-r--r-- | app/services/packages/debian/find_or_create_package_service.rb | 42 | ||||
-rw-r--r-- | app/services/packages/debian/process_changes_service.rb | 113 |
2 files changed, 0 insertions, 155 deletions
diff --git a/app/services/packages/debian/find_or_create_package_service.rb b/app/services/packages/debian/find_or_create_package_service.rb deleted file mode 100644 index a9481504d2b..00000000000 --- a/app/services/packages/debian/find_or_create_package_service.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -module Packages - module Debian - class FindOrCreatePackageService < ::Packages::CreatePackageService - include Gitlab::Utils::StrongMemoize - - def execute - packages = project.packages - .existing_debian_packages_with(name: params[:name], version: params[:version]) - - package = packages.with_debian_codename_or_suite(params[:distribution_name]).first - - unless package - package_in_other_distribution = packages.first - - if package_in_other_distribution - raise ArgumentError, "Debian package #{params[:name]} #{params[:version]} exists " \ - "in distribution #{package_in_other_distribution.debian_distribution.codename}" - end - end - - package ||= create_package!( - :debian, - debian_publication_attributes: { distribution_id: distribution.id } - ) - - ServiceResponse.success(payload: { package: package }) - end - - private - - def distribution - Packages::Debian::DistributionsFinder.new( - project, - codename_or_suite: params[:distribution_name] - ).execute.last! - end - strong_memoize_attr :distribution - end - end -end diff --git a/app/services/packages/debian/process_changes_service.rb b/app/services/packages/debian/process_changes_service.rb deleted file mode 100644 index eb88e7c9b59..00000000000 --- a/app/services/packages/debian/process_changes_service.rb +++ /dev/null @@ -1,113 +0,0 @@ -# frozen_string_literal: true - -module Packages - module Debian - class ProcessChangesService - include ExclusiveLeaseGuard - include Gitlab::Utils::StrongMemoize - - # used by ExclusiveLeaseGuard - DEFAULT_LEASE_TIMEOUT = 1.hour.to_i.freeze - - def initialize(package_file, creator) - @package_file = package_file - @creator = creator - end - - def execute - # return if changes file has already been processed - return if package_file.debian_file_metadatum&.changes? - - validate! - - try_obtain_lease do - package_file.transaction do - update_files_metadata - update_changes_metadata - end - - ::Packages::Debian::GenerateDistributionWorker.perform_async(:project, package.debian_distribution.id) - end - end - - private - - attr_reader :package_file, :creator - - def validate! - raise ArgumentError, 'invalid package file' unless package_file.debian_file_metadatum - raise ArgumentError, 'invalid package file' unless package_file.debian_file_metadatum.unknown? - raise ArgumentError, 'invalid package file' unless metadata[:file_type] == :changes - raise ArgumentError, 'missing Source field' unless metadata.dig(:fields, 'Source').present? - raise ArgumentError, 'missing Version field' unless metadata.dig(:fields, 'Version').present? - raise ArgumentError, 'missing Distribution field' unless metadata.dig(:fields, 'Distribution').present? - end - - def update_files_metadata - files.each do |filename, entry| - file_metadata = ::Packages::Debian::ExtractMetadataService.new(entry.package_file).execute - - ::Packages::UpdatePackageFileService.new(entry.package_file, package_id: package.id) - .execute - - # Force reload from database, as package has changed - entry.package_file.reload_package - - entry.package_file.debian_file_metadatum.update!( - file_type: file_metadata[:file_type], - component: files[filename].component, - architecture: file_metadata[:architecture], - fields: file_metadata[:fields] - ) - end - end - - def update_changes_metadata - ::Packages::UpdatePackageFileService.new(package_file, package_id: package.id) - .execute - - # Force reload from database, as package has changed - package_file.reload_package - - package_file.debian_file_metadatum.update!( - file_type: metadata[:file_type], - fields: metadata[:fields] - ) - end - - def metadata - ::Packages::Debian::ExtractChangesMetadataService.new(package_file).execute - end - strong_memoize_attr :metadata - - def files - metadata[:files] - end - - def project - package_file.package.project - end - - def package - params = { - name: metadata[:fields]['Source'], - version: metadata[:fields]['Version'], - distribution_name: metadata[:fields]['Distribution'] - } - response = Packages::Debian::FindOrCreatePackageService.new(project, creator, params).execute - response.payload[:package] - end - strong_memoize_attr :package - - # used by ExclusiveLeaseGuard - def lease_key - "packages:debian:process_changes_service:package_file:#{package_file.id}" - end - - # used by ExclusiveLeaseGuard - def lease_timeout - DEFAULT_LEASE_TIMEOUT - end - end - end -end |