summaryrefslogtreecommitdiff
path: root/app/finders/packages
diff options
context:
space:
mode:
Diffstat (limited to 'app/finders/packages')
-rw-r--r--app/finders/packages/composer/packages_finder.rb2
-rw-r--r--app/finders/packages/conan/package_finder.rb2
-rw-r--r--app/finders/packages/generic/package_finder.rb1
-rw-r--r--app/finders/packages/go/package_finder.rb1
-rw-r--r--app/finders/packages/go/version_finder.rb2
-rw-r--r--app/finders/packages/group_or_project_package_finder.rb45
-rw-r--r--app/finders/packages/group_packages_finder.rb6
-rw-r--r--app/finders/packages/maven/package_finder.rb72
-rw-r--r--app/finders/packages/npm/package_finder.rb1
-rw-r--r--app/finders/packages/nuget/package_finder.rb37
-rw-r--r--app/finders/packages/package_finder.rb2
-rw-r--r--app/finders/packages/packages_finder.rb1
-rw-r--r--app/finders/packages/pypi/package_finder.rb17
-rw-r--r--app/finders/packages/pypi/packages_finder.rb20
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