diff options
Diffstat (limited to 'app/finders/packages')
-rw-r--r-- | app/finders/packages/composer/packages_finder.rb | 2 | ||||
-rw-r--r-- | app/finders/packages/conan/package_finder.rb | 2 | ||||
-rw-r--r-- | app/finders/packages/generic/package_finder.rb | 1 | ||||
-rw-r--r-- | app/finders/packages/go/package_finder.rb | 1 | ||||
-rw-r--r-- | app/finders/packages/go/version_finder.rb | 2 | ||||
-rw-r--r-- | app/finders/packages/group_or_project_package_finder.rb | 45 | ||||
-rw-r--r-- | app/finders/packages/group_packages_finder.rb | 6 | ||||
-rw-r--r-- | app/finders/packages/maven/package_finder.rb | 72 | ||||
-rw-r--r-- | app/finders/packages/npm/package_finder.rb | 1 | ||||
-rw-r--r-- | app/finders/packages/nuget/package_finder.rb | 37 | ||||
-rw-r--r-- | app/finders/packages/package_finder.rb | 2 | ||||
-rw-r--r-- | app/finders/packages/packages_finder.rb | 1 | ||||
-rw-r--r-- | app/finders/packages/pypi/package_finder.rb | 17 | ||||
-rw-r--r-- | app/finders/packages/pypi/packages_finder.rb | 20 |
14 files changed, 102 insertions, 107 deletions
diff --git a/app/finders/packages/composer/packages_finder.rb b/app/finders/packages/composer/packages_finder.rb index e63b2ee03fa..b5a1b19216f 100644 --- a/app/finders/packages/composer/packages_finder.rb +++ b/app/finders/packages/composer/packages_finder.rb @@ -9,7 +9,7 @@ module Packages end def execute - packages_for_group_projects.composer.preload_composer + packages_for_group_projects(installable_only: true).composer.preload_composer end end end diff --git a/app/finders/packages/conan/package_finder.rb b/app/finders/packages/conan/package_finder.rb index 26e9182f4e1..8ebdd358ba6 100644 --- a/app/finders/packages/conan/package_finder.rb +++ b/app/finders/packages/conan/package_finder.rb @@ -11,7 +11,7 @@ module Packages end def execute - packages_for_current_user.with_name_like(query).order_name_asc if query + packages_for_current_user.installable.with_name_like(query).order_name_asc if query end private diff --git a/app/finders/packages/generic/package_finder.rb b/app/finders/packages/generic/package_finder.rb index 3a260e11fa3..8ec88754901 100644 --- a/app/finders/packages/generic/package_finder.rb +++ b/app/finders/packages/generic/package_finder.rb @@ -11,6 +11,7 @@ module Packages project .packages .generic + .installable .by_name_and_version!(package_name, package_version) end diff --git a/app/finders/packages/go/package_finder.rb b/app/finders/packages/go/package_finder.rb index 4573417d11f..553e731895d 100644 --- a/app/finders/packages/go/package_finder.rb +++ b/app/finders/packages/go/package_finder.rb @@ -21,6 +21,7 @@ module Packages @project .packages .golang + .installable .with_name(@module_name) .with_version(@module_version) end diff --git a/app/finders/packages/go/version_finder.rb b/app/finders/packages/go/version_finder.rb index 6ee02b8c6f6..8500a441fb7 100644 --- a/app/finders/packages/go/version_finder.rb +++ b/app/finders/packages/go/version_finder.rb @@ -37,7 +37,7 @@ module Packages @mod.version_by(commit: target) else - raise ArgumentError.new 'not a valid target' + raise ArgumentError, 'not a valid target' end end end diff --git a/app/finders/packages/group_or_project_package_finder.rb b/app/finders/packages/group_or_project_package_finder.rb new file mode 100644 index 00000000000..fb8bcfc7d42 --- /dev/null +++ b/app/finders/packages/group_or_project_package_finder.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +module Packages + class GroupOrProjectPackageFinder + include ::Packages::FinderHelper + + def initialize(current_user, project_or_group, params = {}) + @current_user = current_user + @project_or_group = project_or_group + @params = params + end + + def execute + raise NotImplementedError + end + + def execute! + raise NotImplementedError + end + + private + + def packages + raise NotImplementedError + end + + def base + if project? + packages_for_project(@project_or_group) + elsif group? + packages_visible_to_user(@current_user, within_group: @project_or_group) + else + ::Packages::Package.none + end + end + + def project? + @project_or_group.is_a?(::Project) + end + + def group? + @project_or_group.is_a?(::Group) + end + end +end diff --git a/app/finders/packages/group_packages_finder.rb b/app/finders/packages/group_packages_finder.rb index 8771bf90e75..e753fa4d455 100644 --- a/app/finders/packages/group_packages_finder.rb +++ b/app/finders/packages/group_packages_finder.rb @@ -20,19 +20,19 @@ module Packages attr_reader :current_user, :group, :params - def packages_for_group_projects + def packages_for_group_projects(installable_only: false) packages = ::Packages::Package .including_build_info .including_project_route .including_tags .for_projects(group_projects_visible_to_current_user.select(:id)) - .processed .sort_by_attribute("#{params[:order_by]}_#{params[:sort]}") packages = filter_with_version(packages) packages = filter_by_package_type(packages) packages = filter_by_package_name(packages) - filter_by_status(packages) + packages = filter_by_package_version(packages) + installable_only ? packages.installable : filter_by_status(packages) end def group_projects_visible_to_current_user diff --git a/app/finders/packages/maven/package_finder.rb b/app/finders/packages/maven/package_finder.rb index eefcdaba3c8..cc28d951f52 100644 --- a/app/finders/packages/maven/package_finder.rb +++ b/app/finders/packages/maven/package_finder.rb @@ -2,83 +2,23 @@ module Packages module Maven - class PackageFinder - include ::Packages::FinderHelper - include Gitlab::Utils::StrongMemoize - - def initialize(path, current_user, project: nil, group: nil, order_by_package_file: false) - @path = path - @current_user = current_user - @project = project - @group = group - @order_by_package_file = order_by_package_file - end - + class PackageFinder < ::Packages::GroupOrProjectPackageFinder def execute - packages_with_path.last + packages.last end def execute! - packages_with_path.last! + packages.last! end private - def base - if @project - packages_for_a_single_project - elsif @group - packages_for_multiple_projects - else - ::Packages::Package.none - end - end - - def packages_with_path - matching_packages = base.only_maven_packages_with_path(@path, use_cte: @group.present?) - - if group_level_improvements? - matching_packages = matching_packages.order_by_package_file if @order_by_package_file - else - matching_packages = matching_packages.order_by_package_file if versionless_package?(matching_packages) - end + def packages + matching_packages = base.only_maven_packages_with_path(@params[:path], use_cte: group?) + matching_packages = matching_packages.order_by_package_file if @params[:order_by_package_file] matching_packages end - - def versionless_package?(matching_packages) - return if matching_packages.empty? - - # if one matching package is versionless, they all are. - matching_packages.first&.version.nil? - end - - # Produces a query that retrieves packages from a single project. - def packages_for_a_single_project - @project.packages - end - - # Produces a query that retrieves packages from multiple projects that - # the current user can view within a group. - def packages_for_multiple_projects - if group_level_improvements? - packages_visible_to_user(@current_user, within_group: @group) - else - ::Packages::Package.for_projects(projects_visible_to_current_user) - end - end - - # Returns the projects that the current user can view within a group. - def projects_visible_to_current_user - @group.all_projects - .public_or_visible_to_user(@current_user) - end - - def group_level_improvements? - strong_memoize(:group_level_improvements) do - Feature.enabled?(:maven_packages_group_level_improvements, default_enabled: :yaml) - end - end end end end diff --git a/app/finders/packages/npm/package_finder.rb b/app/finders/packages/npm/package_finder.rb index 3b79785d0e1..92ceac297ee 100644 --- a/app/finders/packages/npm/package_finder.rb +++ b/app/finders/packages/npm/package_finder.rb @@ -14,6 +14,7 @@ module Packages def execute base.npm .with_name(@package_name) + .installable .last_of_each_version .preload_files end diff --git a/app/finders/packages/nuget/package_finder.rb b/app/finders/packages/nuget/package_finder.rb index 2f66bd145ee..9ae52745bb2 100644 --- a/app/finders/packages/nuget/package_finder.rb +++ b/app/finders/packages/nuget/package_finder.rb @@ -2,51 +2,22 @@ module Packages module Nuget - class PackageFinder - include ::Packages::FinderHelper - + class PackageFinder < ::Packages::GroupOrProjectPackageFinder MAX_PACKAGES_COUNT = 300 - def initialize(current_user, project_or_group, package_name:, package_version: nil, limit: MAX_PACKAGES_COUNT) - @current_user = current_user - @project_or_group = project_or_group - @package_name = package_name - @package_version = package_version - @limit = limit - end - def execute - packages.limit_recent(@limit) + packages.limit_recent(@params[:limit] || MAX_PACKAGES_COUNT) end private - def base - if project? - @project_or_group.packages - elsif group? - packages_visible_to_user(@current_user, within_group: @project_or_group) - else - ::Packages::Package.none - end - end - def packages result = base.nuget .has_version - .processed - .with_name_like(@package_name) - result = result.with_version(@package_version) if @package_version.present? + .with_name_like(@params[:package_name]) + result = result.with_version(@params[:package_version]) if @params[:package_version].present? result end - - def project? - @project_or_group.is_a?(::Project) - end - - def group? - @project_or_group.is_a?(::Group) - end end end end diff --git a/app/finders/packages/package_finder.rb b/app/finders/packages/package_finder.rb index f1874b77845..ee96896e350 100644 --- a/app/finders/packages/package_finder.rb +++ b/app/finders/packages/package_finder.rb @@ -12,7 +12,7 @@ module Packages .including_build_info .including_project_route .including_tags - .processed + .displayable .find(@package_id) end end diff --git a/app/finders/packages/packages_finder.rb b/app/finders/packages/packages_finder.rb index 840cbbf7b9d..552468ecfd1 100644 --- a/app/finders/packages/packages_finder.rb +++ b/app/finders/packages/packages_finder.rb @@ -17,7 +17,6 @@ module Packages .including_build_info .including_project_route .including_tags - .processed packages = filter_with_version(packages) packages = filter_by_package_type(packages) packages = filter_by_package_name(packages) diff --git a/app/finders/packages/pypi/package_finder.rb b/app/finders/packages/pypi/package_finder.rb new file mode 100644 index 00000000000..574e9770363 --- /dev/null +++ b/app/finders/packages/pypi/package_finder.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Packages + module Pypi + class PackageFinder < ::Packages::GroupOrProjectPackageFinder + def execute + packages.by_file_name_and_sha256(@params[:filename], @params[:sha256]) + end + + private + + def packages + base.pypi.has_version + end + end + end +end diff --git a/app/finders/packages/pypi/packages_finder.rb b/app/finders/packages/pypi/packages_finder.rb new file mode 100644 index 00000000000..642ca2cf2e6 --- /dev/null +++ b/app/finders/packages/pypi/packages_finder.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Packages + module Pypi + class PackagesFinder < ::Packages::GroupOrProjectPackageFinder + def execute! + results = packages.with_normalized_pypi_name(@params[:package_name]) + raise ActiveRecord::RecordNotFound if results.empty? + + results + end + + private + + def packages + base.pypi.has_version + end + end + end +end |