diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-23 21:11:07 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-23 21:11:07 +0300 |
commit | 5e9fe672fa0eda6322bd392e8502d1886804bd07 (patch) | |
tree | e2dbccd4f9b92ead855d87ff4fcffaff4fe9fb72 /app/presenters/packages | |
parent | a7f478c9b1806a67ec9d991c3f54c242bb596f60 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/presenters/packages')
-rw-r--r-- | app/presenters/packages/npm/package_presenter.rb | 64 |
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 |