34 lines
932 B
Ruby
34 lines
932 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Packages
|
||
|
module Debian
|
||
|
class FindOrCreatePackageService < ::Packages::CreatePackageService
|
||
|
include Gitlab::Utils::StrongMemoize
|
||
|
|
||
|
def execute
|
||
|
package = project.packages
|
||
|
.debian
|
||
|
.with_name(params[:name])
|
||
|
.with_version(params[:version])
|
||
|
.with_debian_codename(params[:distribution_name])
|
||
|
.first
|
||
|
|
||
|
package ||= create_package!(
|
||
|
:debian,
|
||
|
debian_publication_attributes: { distribution_id: distribution.id }
|
||
|
)
|
||
|
|
||
|
ServiceResponse.success(payload: { package: package })
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def distribution
|
||
|
strong_memoize(:distribution) do
|
||
|
Packages::Debian::DistributionsFinder.new(project, codename: params[:distribution_name]).execute.last!
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|