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:
Diffstat (limited to 'lib/api/concerns/packages')
-rw-r--r--lib/api/concerns/packages/debian_package_endpoints.rb19
-rw-r--r--lib/api/concerns/packages/npm_endpoints.rb29
2 files changed, 28 insertions, 20 deletions
diff --git a/lib/api/concerns/packages/debian_package_endpoints.rb b/lib/api/concerns/packages/debian_package_endpoints.rb
index 25c97932e31..45290cb3e44 100644
--- a/lib/api/concerns/packages/debian_package_endpoints.rb
+++ b/lib/api/concerns/packages/debian_package_endpoints.rb
@@ -13,7 +13,6 @@ module API
component: ::Packages::Debian::COMPONENT_REGEX,
architecture: ::Packages::Debian::ARCHITECTURE_REGEX
}.freeze
- LIST_PACKAGE = 'list_package'
included do
feature_category :package_registry
@@ -41,8 +40,6 @@ module API
package_file = distribution_from!(project).package_files.with_file_name(params[:file_name]).last!
- track_debian_package_event 'pull_package'
-
present_package_file!(package_file)
end
@@ -73,22 +70,8 @@ module API
no_content! # empty component files are not always persisted in DB
end
- track_debian_package_event LIST_PACKAGE
-
present_carrierwave_file!(component_file.file)
end
-
- def track_debian_package_event(action)
- if project_or_group.is_a?(Project)
- project = project_or_group
- namespace = project_or_group.namespace
- else
- project = nil
- namespace = project_or_group
- end
-
- track_package_event(action, :debian, project: project, namespace: namespace, user: current_user)
- end
end
rescue_from ArgumentError do |e|
@@ -146,7 +129,6 @@ module API
get 'Release' do
distribution = distribution_from!(project_or_group)
- track_debian_package_event LIST_PACKAGE
present_carrierwave_file!(distribution.file)
end
@@ -166,7 +148,6 @@ module API
get 'InRelease' do
distribution = distribution_from!(project_or_group)
- track_debian_package_event LIST_PACKAGE
present_carrierwave_file!(distribution.signed_file)
end
diff --git a/lib/api/concerns/packages/npm_endpoints.rb b/lib/api/concerns/packages/npm_endpoints.rb
index 74ad3bb296f..ec20440f013 100644
--- a/lib/api/concerns/packages/npm_endpoints.rb
+++ b/lib/api/concerns/packages/npm_endpoints.rb
@@ -21,12 +21,18 @@ module API
included do
helpers ::API::Helpers::Packages::DependencyProxyHelpers
+ rescue_from ActiveRecord::RecordInvalid do |e|
+ render_structured_api_error!({ message: e.message, error: e.message }, 400)
+ end
+
before do
require_packages_enabled!
authenticate_non_get!
end
helpers do
+ include Gitlab::Utils::StrongMemoize
+
params :package_name do
requires :package_name, type: String, file_path: true, desc: 'Package name',
documentation: { example: 'mypackage' }
@@ -51,6 +57,12 @@ module API
def generate_metadata_service(packages)
::Packages::Npm::GenerateMetadataService.new(params[:package_name], packages)
end
+
+ def metadata_cache
+ ::Packages::Npm::MetadataCache
+ .find_by_package_name_and_project_id(params[:package_name], project.id)
+ end
+ strong_memoize_attr :metadata_cache
end
params do
@@ -80,7 +92,7 @@ module API
packages = ::Packages::Npm::PackageFinder.new(package_name, project: project)
.execute
- not_found! if packages.empty?
+ not_found!('Package') if packages.empty?
track_package_event(:list_tags, :npm, project: project, namespace: project.namespace)
@@ -122,6 +134,8 @@ module API
track_package_event(:create_tag, :npm, project: project, namespace: project.namespace)
+ enqueue_sync_metadata_cache_worker(project, package_name)
+
::Packages::Npm::CreateTagService.new(package, tag).execute
no_content!
@@ -156,6 +170,8 @@ module API
track_package_event(:delete_tag, :npm, project: project, namespace: project.namespace)
+ enqueue_sync_metadata_cache_worker(project, package_name)
+
::Packages::RemoveTagService.new(package_tag).execute
no_content!
@@ -202,6 +218,17 @@ module API
not_found!('Packages') if packages.empty?
+ if endpoint_scope == :project && Feature.enabled?(:npm_metadata_cache, project)
+ if metadata_cache&.file&.exists?
+ metadata_cache.touch_last_downloaded_at
+ present_carrierwave_file!(metadata_cache.file)
+
+ break
+ end
+
+ enqueue_sync_metadata_cache_worker(project, package_name)
+ end
+
present ::Packages::Npm::PackagePresenter.new(generate_metadata_service(packages).execute),
with: ::API::Entities::NpmPackage
end