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-06-01 15:10:15 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-06-01 15:10:15 +0300
commitcf19a51fc5711144b26f7123c14f9b64a7597195 (patch)
tree09c151fd3655213e87b1c25beb842a99510122cb /app/services/packages
parent3b1df712c7a15c9b6abadd61e9c8894fdeb0442a (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/packages')
-rw-r--r--app/services/packages/nuget/metadata_extraction_service.rb26
-rw-r--r--app/services/packages/nuget/sync_metadatum_service.rb47
-rw-r--r--app/services/packages/nuget/update_package_from_metadata_service.rb36
3 files changed, 75 insertions, 34 deletions
diff --git a/app/services/packages/nuget/metadata_extraction_service.rb b/app/services/packages/nuget/metadata_extraction_service.rb
index 02086b2a282..3b92d977c79 100644
--- a/app/services/packages/nuget/metadata_extraction_service.rb
+++ b/app/services/packages/nuget/metadata_extraction_service.rb
@@ -7,18 +7,22 @@ module Packages
ExtractionError = Class.new(StandardError)
+ ROOT_XPATH = '//xmlns:package/xmlns:metadata/xmlns'
+
XPATHS = {
- package_name: '//xmlns:package/xmlns:metadata/xmlns:id',
- package_version: '//xmlns:package/xmlns:metadata/xmlns:version',
- license_url: '//xmlns:package/xmlns:metadata/xmlns:licenseUrl',
- project_url: '//xmlns:package/xmlns:metadata/xmlns:projectUrl',
- icon_url: '//xmlns:package/xmlns:metadata/xmlns:iconUrl'
+ package_name: "#{ROOT_XPATH}:id",
+ package_version: "#{ROOT_XPATH}:version",
+ authors: "#{ROOT_XPATH}:authors",
+ description: "#{ROOT_XPATH}:description",
+ license_url: "#{ROOT_XPATH}:licenseUrl",
+ project_url: "#{ROOT_XPATH}:projectUrl",
+ icon_url: "#{ROOT_XPATH}:iconUrl"
}.freeze
- XPATH_DEPENDENCIES = '//xmlns:package/xmlns:metadata/xmlns:dependencies/xmlns:dependency'
- XPATH_DEPENDENCY_GROUPS = '//xmlns:package/xmlns:metadata/xmlns:dependencies/xmlns:group'
- XPATH_TAGS = '//xmlns:package/xmlns:metadata/xmlns:tags'
- XPATH_PACKAGE_TYPES = '//xmlns:package/xmlns:metadata/xmlns:packageTypes/xmlns:packageType'
+ XPATH_DEPENDENCIES = "#{ROOT_XPATH}:dependencies/xmlns:dependency".freeze
+ XPATH_DEPENDENCY_GROUPS = "#{ROOT_XPATH}:dependencies/xmlns:group".freeze
+ XPATH_TAGS = "#{ROOT_XPATH}:tags".freeze
+ XPATH_PACKAGE_TYPES = "#{ROOT_XPATH}:packageTypes/xmlns:packageType".freeze
MAX_FILE_SIZE = 4.megabytes.freeze
@@ -40,10 +44,6 @@ module Packages
end
end
- def project
- package_file.package.project
- end
-
def valid_package_file?
package_file &&
package_file.package&.nuget? &&
diff --git a/app/services/packages/nuget/sync_metadatum_service.rb b/app/services/packages/nuget/sync_metadatum_service.rb
index ca9cc4d5b78..189b972c156 100644
--- a/app/services/packages/nuget/sync_metadatum_service.rb
+++ b/app/services/packages/nuget/sync_metadatum_service.rb
@@ -15,6 +15,8 @@ module Packages
metadatum.destroy! if metadatum.persisted?
else
metadatum.update!(
+ authors: authors,
+ description: description,
license_url: license_url,
project_url: project_url,
icon_url: icon_url
@@ -24,26 +26,57 @@ module Packages
private
+ attr_reader :package, :metadata
+
def metadatum
- strong_memoize(:metadatum) do
- @package.nuget_metadatum || @package.build_nuget_metadatum
- end
+ package.nuget_metadatum || package.build_nuget_metadatum
end
+ strong_memoize_attr :metadatum
def blank_metadata?
- project_url.blank? && license_url.blank? && icon_url.blank?
+ [authors, description, project_url, license_url, icon_url].all?(&:blank?)
+ end
+
+ def authors
+ truncate_value(:authors, ::Packages::Nuget::Metadatum::MAX_AUTHORS_LENGTH)
end
+ strong_memoize_attr :authors
+
+ def description
+ truncate_value(:description, ::Packages::Nuget::Metadatum::MAX_DESCRIPTION_LENGTH)
+ end
+ strong_memoize_attr :description
def project_url
- @metadata[:project_url]
+ metadata[:project_url]
end
def license_url
- @metadata[:license_url]
+ metadata[:license_url]
end
def icon_url
- @metadata[:icon_url]
+ metadata[:icon_url]
+ end
+
+ def truncate_value(field, max_length)
+ return unless metadata[field]
+
+ if metadata[field].size > max_length
+ log_info("#{field.capitalize} is too long (maximum is #{max_length} characters)", field)
+ end
+
+ metadata[field].truncate(max_length)
+ end
+
+ def log_info(message, field)
+ Gitlab::AppLogger.info(
+ class: self.class.name,
+ message: message,
+ package_id: package.id,
+ project_id: package.project_id,
+ field => metadata[field]
+ )
end
end
end
diff --git a/app/services/packages/nuget/update_package_from_metadata_service.rb b/app/services/packages/nuget/update_package_from_metadata_service.rb
index 5456ad4cad7..7153a9035b8 100644
--- a/app/services/packages/nuget/update_package_from_metadata_service.rb
+++ b/app/services/packages/nuget/update_package_from_metadata_service.rb
@@ -17,7 +17,7 @@ module Packages
end
def execute
- raise InvalidMetadataError, 'package name and/or package version not found in metadata' unless valid_metadata?
+ raise InvalidMetadataError, 'package name, version, authors and/or description not found in metadata' unless valid_metadata?
try_obtain_lease do
@package_file.transaction do
@@ -55,17 +55,19 @@ module Packages
return if symbol_package?
::Packages::Nuget::SyncMetadatumService
- .new(package, metadata.slice(:project_url, :license_url, :icon_url))
+ .new(package, metadata.slice(:authors, :description, :project_url, :license_url, :icon_url))
.execute
+
::Packages::UpdateTagsService
.new(package, package_tags)
.execute
+
rescue StandardError => e
raise InvalidMetadataError, e.message
end
def valid_metadata?
- package_name.present? && package_version.present?
+ [package_name, package_version, package_authors, package_description].all?(&:present?)
end
def link_to_existing_package
@@ -93,15 +95,14 @@ module Packages
end
def existing_package
- strong_memoize(:existing_package) do
- @package_file.project.packages
- .nuget
- .with_name(package_name)
- .with_version(package_version)
- .not_pending_destruction
- .first
- end
+ @package_file.project.packages
+ .nuget
+ .with_name(package_name)
+ .with_version(package_version)
+ .not_pending_destruction
+ .first
end
+ strong_memoize_attr :existing_package
def package_name
metadata[:package_name]
@@ -123,15 +124,22 @@ module Packages
metadata.fetch(:package_types, [])
end
+ def package_authors
+ metadata[:authors]
+ end
+
+ def package_description
+ metadata[:description]
+ end
+
def symbol_package?
package_types.include?(SYMBOL_PACKAGE_IDENTIFIER)
end
def metadata
- strong_memoize(:metadata) do
- ::Packages::Nuget::MetadataExtractionService.new(@package_file.id).execute
- end
+ ::Packages::Nuget::MetadataExtractionService.new(@package_file.id).execute
end
+ strong_memoize_attr :metadata
def package_filename
"#{package_name.downcase}.#{package_version.downcase}.#{symbol_package? ? 'snupkg' : 'nupkg'}"