diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-15 11:58:20 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-15 11:58:20 +0300 |
commit | 59c9ff627603da03f6a7c330d57a2c765b3c24a3 (patch) | |
tree | dd8f3a2fbc9564818a77d2d8798fcc464d220e8e /app/models | |
parent | 30b4659f2c485885324fd8d67fcd92a2939310a3 (diff) |
Add latest changes from gitlab-org/gitlab@14-7-stable-ee
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/packages/package.rb | 22 | ||||
-rw-r--r-- | app/models/project.rb | 1 |
2 files changed, 18 insertions, 5 deletions
diff --git a/app/models/packages/package.rb b/app/models/packages/package.rb index 1b2c3e25283..4a97ae97ea0 100644 --- a/app/models/packages/package.rb +++ b/app/models/packages/package.rb @@ -63,12 +63,17 @@ class Packages::Package < ApplicationRecord validates :name, format: { with: Gitlab::Regex.package_name_regex }, unless: -> { conan? || generic? || debian? } validates :name, - uniqueness: { scope: %i[project_id version package_type] }, unless: -> { conan? || debian_package? } - validate :unique_debian_package_name, if: :debian_package? + uniqueness: { + scope: %i[project_id version package_type], + conditions: -> { not_pending_destruction} + }, + unless: -> { pending_destruction? || conan? || debian_package? } + validate :unique_debian_package_name, if: :debian_package? validate :valid_conan_package_recipe, if: :conan? validate :valid_composer_global_name, if: :composer? validate :npm_package_already_taken, if: :npm? + validates :name, format: { with: Gitlab::Regex.conan_recipe_component_regex }, if: :conan? validates :name, format: { with: Gitlab::Regex.generic_package_name_regex }, if: :generic? validates :name, format: { with: Gitlab::Regex.helm_package_regex }, if: :helm? @@ -320,6 +325,7 @@ class Packages::Package < ApplicationRecord recipe_exists = project.packages .conan .includes(:conan_metadatum) + .not_pending_destruction .with_name(name) .with_version(version) .with_conan_channel(conan_metadatum.package_channel) @@ -334,9 +340,14 @@ class Packages::Package < ApplicationRecord # .default_scoped is required here due to a bug in rails that leaks # the scope and adds `self` to the query incorrectly # See https://github.com/rails/rails/pull/35186 - if Packages::Package.default_scoped.composer.with_name(name).where.not(project_id: project_id).exists? - errors.add(:name, 'is already taken by another project') - end + package_exists = Packages::Package.default_scoped + .composer + .not_pending_destruction + .with_name(name) + .where.not(project_id: project_id) + .exists? + + errors.add(:name, 'is already taken by another project') if package_exists end def npm_package_already_taken @@ -361,6 +372,7 @@ class Packages::Package < ApplicationRecord package_exists = debian_publication.distribution.packages .with_name(name) .with_version(version) + .not_pending_destruction .id_not_in(id) .exists? diff --git a/app/models/project.rb b/app/models/project.rb index f2b3db684ae..7f823b5ed6b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -2614,6 +2614,7 @@ class Project < ApplicationRecord Packages::Package.with_name(package_name) .with_version(package_version) .with_package_type(package_type) + .not_pending_destruction .for_projects( root_ancestor.all_projects .id_not_in(id) |