summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/packages/package.rb71
-rw-r--r--app/models/project.rb4
-rw-r--r--app/models/project_services/hipchat_service.rb32
3 files changed, 65 insertions, 42 deletions
diff --git a/app/models/packages/package.rb b/app/models/packages/package.rb
index 36edf646658..68c3b45c24e 100644
--- a/app/models/packages/package.rb
+++ b/app/models/packages/package.rb
@@ -8,6 +8,23 @@ class Packages::Package < ApplicationRecord
DISPLAYABLE_STATUSES = [:default, :error].freeze
INSTALLABLE_STATUSES = [:default].freeze
+ enum package_type: {
+ maven: 1,
+ npm: 2,
+ conan: 3,
+ nuget: 4,
+ pypi: 5,
+ composer: 6,
+ generic: 7,
+ golang: 8,
+ debian: 9,
+ rubygems: 10,
+ helm: 11,
+ terraform_module: 12
+ }
+
+ enum status: { default: 0, hidden: 1, processing: 2, error: 3 }
+
belongs_to :project
belongs_to :creator, class_name: 'User'
@@ -72,12 +89,6 @@ class Packages::Package < ApplicationRecord
if: :debian_package?
validate :forbidden_debian_changes, if: :debian?
- enum package_type: { maven: 1, npm: 2, conan: 3, nuget: 4, pypi: 5,
- composer: 6, generic: 7, golang: 8, debian: 9,
- rubygems: 10, helm: 11, terraform_module: 12 }
-
- enum status: { default: 0, hidden: 1, processing: 2, error: 3 }
-
scope :for_projects, ->(project_ids) { where(project_id: project_ids) }
scope :with_name, ->(name) { where(name: name) }
scope :with_name_like, ->(name) { where(arel_table[:name].matches(name)) }
@@ -133,10 +144,28 @@ class Packages::Package < ApplicationRecord
scope :order_type_desc, -> { reorder(package_type: :desc) }
scope :order_project_name, -> { joins(:project).reorder('projects.name ASC') }
scope :order_project_name_desc, -> { joins(:project).reorder('projects.name DESC') }
- scope :order_project_path, -> { joins(:project).reorder('projects.path ASC, id ASC') }
- scope :order_project_path_desc, -> { joins(:project).reorder('projects.path DESC, id DESC') }
scope :order_by_package_file, -> { joins(:package_files).order('packages_package_files.created_at ASC') }
+ scope :order_project_path, -> do
+ if Feature.enabled?(:arel_package_scopes)
+ keyset_order = keyset_pagination_order(join_class: Project, column_name: :path, direction: :asc)
+
+ joins(:project).reorder(keyset_order)
+ else
+ joins(:project).reorder('projects.path ASC, id ASC')
+ end
+ end
+
+ scope :order_project_path_desc, -> do
+ if Feature.enabled?(:arel_package_scopes)
+ keyset_order = keyset_pagination_order(join_class: Project, column_name: :path, direction: :desc)
+
+ joins(:project).reorder(keyset_order)
+ else
+ joins(:project).reorder('projects.path DESC, id DESC')
+ end
+ end
+
after_commit :update_composer_cache, on: :destroy, if: -> { composer? }
def self.only_maven_packages_with_path(path, use_cte: false)
@@ -196,6 +225,32 @@ class Packages::Package < ApplicationRecord
end
end
+ def self.keyset_pagination_order(join_class:, column_name:, direction: :asc)
+ join_table = join_class.table_name
+ asc_order_expression = Gitlab::Database.nulls_last_order("#{join_table}.#{column_name}", :asc)
+ desc_order_expression = Gitlab::Database.nulls_first_order("#{join_table}.#{column_name}", :desc)
+ order_direction = direction == :asc ? asc_order_expression : desc_order_expression
+ 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
+ )
+ ])
+ end
+
def versions
project.packages
.including_build_info
diff --git a/app/models/project.rb b/app/models/project.rb
index 31b527f405d..4bc16771323 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1406,9 +1406,9 @@ class Project < ApplicationRecord
end
def disabled_services
- return %w[datadog hipchat] unless Feature.enabled?(:datadog_ci_integration, self)
+ return %w[datadog] unless Feature.enabled?(:datadog_ci_integration, self)
- %w[hipchat]
+ []
end
def find_or_initialize_service(name)
diff --git a/app/models/project_services/hipchat_service.rb b/app/models/project_services/hipchat_service.rb
deleted file mode 100644
index 71d8e7bfac4..00000000000
--- a/app/models/project_services/hipchat_service.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-# This service is scheduled for removal. All records must
-# be deleted before the class can be removed.
-# https://gitlab.com/gitlab-org/gitlab/-/issues/27954
-class HipchatService < Integration
- before_save :prevent_save
-
- def self.to_param
- 'hipchat'
- end
-
- def self.supported_events
- []
- end
-
- def execute(data)
- # We removed the hipchat gem due to https://gitlab.com/gitlab-org/gitlab/-/issues/325851#note_537143149
- # HipChat is unusable anyway, so do nothing in this method
- end
-
- private
-
- def prevent_save
- errors.add(:base, _('HipChat endpoint is deprecated and should not be created or modified.'))
-
- # Stops execution of callbacks and database operation while
- # preserving expectations of #save (will not raise) & #save! (raises)
- # https://guides.rubyonrails.org/active_record_callbacks.html#halting-execution
- throw :abort # rubocop:disable Cop/BanCatchThrow
- end
-end