diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-07-20 15:07:25 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-07-20 15:07:25 +0300 |
commit | 07b1e2691206717206d40f9c7f0abfd1a30ecbdd (patch) | |
tree | a5b6b9655d73f158c22ecc70bcb65535226fd4ac /app/services/packages | |
parent | 65a0673d76bb86d6acca6dc3ab42dc91a04f56c2 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/packages')
-rw-r--r-- | app/services/packages/npm/generate_metadata_service.rb | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/app/services/packages/npm/generate_metadata_service.rb b/app/services/packages/npm/generate_metadata_service.rb index e1795079513..c84c170b234 100644 --- a/app/services/packages/npm/generate_metadata_service.rb +++ b/app/services/packages/npm/generate_metadata_service.rb @@ -13,6 +13,7 @@ module Packages def initialize(name, packages) @name = name @packages = packages + @dependencies_cache = {} end def execute(only_dist_tags: false) @@ -21,7 +22,7 @@ module Packages private - attr_reader :name, :packages + attr_reader :name, :packages, :dependencies_cache def metadata(only_dist_tags) result = { dist_tags: dist_tags } @@ -38,9 +39,17 @@ module Packages package_versions = {} packages.each_batch do |relation| - batched_packages = relation.including_dependency_links - .preload_files - .preload_npm_metadatum + batched_packages = if Feature.enabled?(:npm_optimize_metadata_generation) + fill_dependencies_cache(relation) + + relation.including_dependency_links + .preload_files + .preload_npm_metadatum + else + relation.including_dependency_links_with_dependencies + .preload_files + .preload_npm_metadatum + end batched_packages.each do |package| package_file = package.installable_package_files.last @@ -85,7 +94,12 @@ module Packages dependencies = Hash.new { |h, key| h[key] = {} } package.dependency_links.each do |dependency_link| - dependency = dependency_link.dependency + dependency = if Feature.enabled?(:npm_optimize_metadata_generation) + dependencies_cache[dependency_link.dependency_id] + else + dependency_link.dependency + end + dependencies[dependency_link.dependency_type][dependency.name] = dependency.version_pattern end @@ -106,6 +120,17 @@ module Packages json = package.npm_metadatum&.package_json || {} json.slice(*PACKAGE_JSON_ALLOWED_FIELDS) end + + def fill_dependencies_cache(packages) + Packages::Dependency + .with_packages(packages) + .id_not_in(dependencies_cache.keys) + .each_batch do |dependencies| + dependencies.each do |dependency| + dependencies_cache[dependency.id] = dependency + end + end + end end end end |