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>2023-07-20 15:07:25 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-07-20 15:07:25 +0300
commit07b1e2691206717206d40f9c7f0abfd1a30ecbdd (patch)
treea5b6b9655d73f158c22ecc70bcb65535226fd4ac /app/services/packages
parent65a0673d76bb86d6acca6dc3ab42dc91a04f56c2 (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.rb35
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