diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-20 02:18:09 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-20 02:18:09 +0300 |
commit | 6ed4ec3e0b1340f96b7c043ef51d1b33bbe85fde (patch) | |
tree | dc4d20fe6064752c0bd323187252c77e0a89144b /app/models/packages | |
parent | 9868dae7fc0655bd7ce4a6887d4e6d487690eeed (diff) |
Add latest changes from gitlab-org/gitlab@15-4-stable-eev15.4.0-rc42
Diffstat (limited to 'app/models/packages')
-rw-r--r-- | app/models/packages/package.rb | 43 | ||||
-rw-r--r-- | app/models/packages/policies/group.rb | 15 | ||||
-rw-r--r-- | app/models/packages/policies/project.rb | 15 | ||||
-rw-r--r-- | app/models/packages/rpm.rb | 8 | ||||
-rw-r--r-- | app/models/packages/rpm/metadatum.rb | 51 |
5 files changed, 115 insertions, 17 deletions
diff --git a/app/models/packages/package.rb b/app/models/packages/package.rb index afd55b4f143..b4c09d99bb0 100644 --- a/app/models/packages/package.rb +++ b/app/models/packages/package.rb @@ -22,7 +22,8 @@ class Packages::Package < ApplicationRecord debian: 9, rubygems: 10, helm: 11, - terraform_module: 12 + terraform_module: 12, + rpm: 13 } enum status: { default: 0, hidden: 1, processing: 2, error: 3, pending_destruction: 4 } @@ -43,6 +44,7 @@ class Packages::Package < ApplicationRecord has_one :nuget_metadatum, inverse_of: :package, class_name: 'Packages::Nuget::Metadatum' has_one :composer_metadatum, inverse_of: :package, class_name: 'Packages::Composer::Metadatum' has_one :rubygems_metadatum, inverse_of: :package, class_name: 'Packages::Rubygems::Metadatum' + has_one :rpm_metadatum, inverse_of: :package, class_name: 'Packages::Rpm::Metadatum' has_one :npm_metadatum, inverse_of: :package, class_name: 'Packages::Npm::Metadatum' has_many :build_infos, inverse_of: :package has_many :pipelines, through: :build_infos, disable_joins: true @@ -242,22 +244,23 @@ class Packages::Package < ApplicationRecord reverse_order_direction = direction == :asc ? desc_order_expression : asc_order_expression arel_order_classes = ::Gitlab::Pagination::Keyset::ColumnOrderDefinition::AREL_ORDER_CLASSES.invert - ::Gitlab::Pagination::Keyset::Order.build([ - ::Gitlab::Pagination::Keyset::ColumnOrderDefinition.new( - attribute_name: "#{join_table}_#{column_name}", - column_expression: join_class.arel_table[column_name], - order_expression: order_direction, - reversed_order_expression: reverse_order_direction, - order_direction: direction, - distinct: false, - add_to_projections: true - ), - ::Gitlab::Pagination::Keyset::ColumnOrderDefinition.new( - attribute_name: 'id', - order_expression: arel_order_classes[direction].new(Packages::Package.arel_table[:id]), - add_to_projections: true - ) - ]) + ::Gitlab::Pagination::Keyset::Order.build( + [ + ::Gitlab::Pagination::Keyset::ColumnOrderDefinition.new( + attribute_name: "#{join_table}_#{column_name}", + column_expression: join_class.arel_table[column_name], + order_expression: order_direction, + reversed_order_expression: reverse_order_direction, + order_direction: direction, + distinct: false, + add_to_projections: true + ), + ::Gitlab::Pagination::Keyset::ColumnOrderDefinition.new( + attribute_name: 'id', + order_expression: arel_order_classes[direction].new(Packages::Package.arel_table[:id]), + add_to_projections: true + ) + ]) end def versions @@ -330,6 +333,12 @@ class Packages::Package < ApplicationRecord name.gsub(/#{Gitlab::Regex::Packages::PYPI_NORMALIZED_NAME_REGEX_STRING}/o, '-').downcase end + def touch_last_downloaded_at + ::Gitlab::Database::LoadBalancing::Session.without_sticky_writes do + update_column(:last_downloaded_at, Time.zone.now) + end + end + private def composer_tag_version? diff --git a/app/models/packages/policies/group.rb b/app/models/packages/policies/group.rb new file mode 100644 index 00000000000..66cd361f2ed --- /dev/null +++ b/app/models/packages/policies/group.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Packages + module Policies + class Group + attr_accessor :group + + delegate_missing_to :group + + def initialize(group) + @group = group + end + end + end +end diff --git a/app/models/packages/policies/project.rb b/app/models/packages/policies/project.rb new file mode 100644 index 00000000000..a5c6703be42 --- /dev/null +++ b/app/models/packages/policies/project.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Packages + module Policies + class Project + attr_accessor :project + + delegate_missing_to :project + + def initialize(project) + @project = project + end + end + end +end diff --git a/app/models/packages/rpm.rb b/app/models/packages/rpm.rb new file mode 100644 index 00000000000..fc66e7ec5c8 --- /dev/null +++ b/app/models/packages/rpm.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true +module Packages + module Rpm + def self.table_name_prefix + 'packages_rpm_' + end + end +end diff --git a/app/models/packages/rpm/metadatum.rb b/app/models/packages/rpm/metadatum.rb new file mode 100644 index 00000000000..07361995a12 --- /dev/null +++ b/app/models/packages/rpm/metadatum.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +module Packages + module Rpm + class Metadatum < ApplicationRecord + self.primary_key = :package_id + + belongs_to :package, -> { where(package_type: :rpm) }, inverse_of: :rpm_metadatum + + validates :package, presence: true + + validates :epoch, + presence: true, + numericality: { only_integer: true, greater_than_or_equal_to: 0 } + + validates :release, + presence: true, + length: { maximum: 128 } + + validates :summary, + presence: true, + length: { maximum: 1000 } + + validates :description, + presence: true, + length: { maximum: 5000 } + + validates :arch, + presence: true, + length: { maximum: 255 } + + validates :license, + allow_nil: true, + length: { maximum: 1000 } + + validates :url, + allow_nil: true, + length: { maximum: 1000 } + + validate :rpm_package_type + + private + + def rpm_package_type + return if package&.rpm? + + errors.add(:base, _('Package type must be RPM')) + end + end + end +end |