Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-08-23 21:11:07 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-08-23 21:11:07 +0300
commit5e9fe672fa0eda6322bd392e8502d1886804bd07 (patch)
treee2dbccd4f9b92ead855d87ff4fcffaff4fe9fb72 /app/presenters/packages
parenta7f478c9b1806a67ec9d991c3f54c242bb596f60 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/presenters/packages')
-rw-r--r--app/presenters/packages/npm/package_presenter.rb64
1 files changed, 50 insertions, 14 deletions
diff --git a/app/presenters/packages/npm/package_presenter.rb b/app/presenters/packages/npm/package_presenter.rb
index 4e147b4739e..a99c93cb227 100644
--- a/app/presenters/packages/npm/package_presenter.rb
+++ b/app/presenters/packages/npm/package_presenter.rb
@@ -7,14 +7,26 @@ module Packages
attr_reader :name, :packages
- NPM_VALID_DEPENDENCY_TYPES = %i[dependencies devDependencies bundleDependencies peerDependencies].freeze
-
def initialize(name, packages)
@name = name
@packages = packages
end
def versions
+ if queries_tuning?
+ new_versions
+ else
+ legacy_versions
+ end
+ end
+
+ def dist_tags
+ build_package_tags.tap { |t| t["latest"] ||= sorted_versions.last }
+ end
+
+ private
+
+ def legacy_versions
package_versions = {}
packages.each do |package|
@@ -28,11 +40,23 @@ module Packages
package_versions
end
- def dist_tags
- build_package_tags.tap { |t| t["latest"] ||= sorted_versions.last }
- end
+ def new_versions
+ package_versions = {}
- private
+ packages.each_batch do |relation|
+ relation.including_dependency_links
+ .preload_files
+ .each do |package|
+ package_file = package.package_files.last
+
+ next unless package_file
+
+ package_versions[package.version] = build_package_version(package, package_file)
+ end
+ end
+
+ package_versions
+ end
def build_package_tags
package_tags.to_h { |tag| [tag.name, tag.package.version] }
@@ -59,26 +83,38 @@ module Packages
def build_package_dependencies(package)
dependencies = Hash.new { |h, key| h[key] = {} }
- dependency_links = package.dependency_links
- .with_dependency_type(NPM_VALID_DEPENDENCY_TYPES)
- .includes_dependency
- dependency_links.find_each do |dependency_link|
- dependency = dependency_link.dependency
- dependencies[dependency_link.dependency_type][dependency.name] = dependency.version_pattern
+ if queries_tuning?
+ package.dependency_links.each do |dependency_link|
+ dependency = dependency_link.dependency
+ dependencies[dependency_link.dependency_type][dependency.name] = dependency.version_pattern
+ end
+ else
+ dependency_links = package.dependency_links
+ .with_dependency_type(%i[dependencies devDependencies bundleDependencies peerDependencies])
+ .includes_dependency
+
+ dependency_links.find_each do |dependency_link|
+ dependency = dependency_link.dependency
+ dependencies[dependency_link.dependency_type][dependency.name] = dependency.version_pattern
+ end
end
dependencies
end
def sorted_versions
- versions = packages.map(&:version).compact
+ versions = packages.pluck_versions.compact
VersionSorter.sort(versions)
end
def package_tags
Packages::Tag.for_packages(packages)
- .preload_package
+ .preload_package
+ end
+
+ def queries_tuning?
+ Feature.enabled?(:npm_presenter_queries_tuning)
end
end
end