diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-26 15:10:10 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-26 15:10:10 +0000 |
commit | c86ec1d072338034a312bb4be0ff175892fa01b7 (patch) | |
tree | e67bb3ce9beb174a20991e53d998f59adc35f02e /app/services/packages | |
parent | c15582526dd15f5ea8fac0906624cc5cd2db03ab (diff) | |
download | gitlab-ce-c86ec1d072338034a312bb4be0ff175892fa01b7.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/packages')
-rw-r--r-- | app/services/packages/rpm/repository_metadata/base_builder.rb | 46 | ||||
-rw-r--r-- | app/services/packages/rpm/repository_metadata/build_filelist_xml.rb | 14 | ||||
-rw-r--r-- | app/services/packages/rpm/repository_metadata/build_other_xml.rb | 14 | ||||
-rw-r--r-- | app/services/packages/rpm/repository_metadata/build_other_xml_service.rb | 39 | ||||
-rw-r--r-- | app/services/packages/rpm/repository_metadata/build_primary_xml_service.rb (renamed from app/services/packages/rpm/repository_metadata/build_primary_xml.rb) | 28 | ||||
-rw-r--r-- | app/services/packages/rpm/repository_metadata/build_repomd_xml_service.rb (renamed from app/services/packages/rpm/repository_metadata/build_repomd_xml.rb) | 2 | ||||
-rw-r--r-- | app/services/packages/rpm/repository_metadata/update_xml_service.rb | 61 |
7 files changed, 114 insertions, 90 deletions
diff --git a/app/services/packages/rpm/repository_metadata/base_builder.rb b/app/services/packages/rpm/repository_metadata/base_builder.rb deleted file mode 100644 index 2c0a11457ec..00000000000 --- a/app/services/packages/rpm/repository_metadata/base_builder.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true -module Packages - module Rpm - module RepositoryMetadata - class BaseBuilder - def initialize(xml: nil, data: {}) - @xml = Nokogiri::XML(xml) if xml.present? - @data = data - end - - def execute - return build_empty_structure if xml.blank? - - update_xml_document - update_package_count - xml.to_xml - end - - private - - attr_reader :xml, :data - - def build_empty_structure - Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml| - xml.method_missing(self.class::ROOT_TAG, self.class::ROOT_ATTRIBUTES) - end.to_xml - end - - def update_xml_document - # Add to the root xml element a new package metadata node - xml.at(self.class::ROOT_TAG).add_child(build_new_node) - end - - def update_package_count - packages_count = xml.css("//#{self.class::ROOT_TAG}/package").count - - xml.at(self.class::ROOT_TAG).attributes["packages"].value = packages_count.to_s - end - - def build_new_node - raise NotImplementedError, "#{self.class} should implement #{__method__}" - end - end - end - end -end diff --git a/app/services/packages/rpm/repository_metadata/build_filelist_xml.rb b/app/services/packages/rpm/repository_metadata/build_filelist_xml.rb deleted file mode 100644 index 01fb36f4b91..00000000000 --- a/app/services/packages/rpm/repository_metadata/build_filelist_xml.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true -module Packages - module Rpm - module RepositoryMetadata - class BuildFilelistXml < ::Packages::Rpm::RepositoryMetadata::BaseBuilder - ROOT_TAG = 'filelists' - ROOT_ATTRIBUTES = { - xmlns: 'http://linux.duke.edu/metadata/filelists', - packages: '0' - }.freeze - end - end - end -end diff --git a/app/services/packages/rpm/repository_metadata/build_other_xml.rb b/app/services/packages/rpm/repository_metadata/build_other_xml.rb deleted file mode 100644 index 4bf61c901a3..00000000000 --- a/app/services/packages/rpm/repository_metadata/build_other_xml.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true -module Packages - module Rpm - module RepositoryMetadata - class BuildOtherXml < ::Packages::Rpm::RepositoryMetadata::BaseBuilder - ROOT_TAG = 'otherdata' - ROOT_ATTRIBUTES = { - xmlns: 'http://linux.duke.edu/metadata/other', - packages: '0' - }.freeze - end - end - end -end diff --git a/app/services/packages/rpm/repository_metadata/build_other_xml_service.rb b/app/services/packages/rpm/repository_metadata/build_other_xml_service.rb new file mode 100644 index 00000000000..853bdf7da63 --- /dev/null +++ b/app/services/packages/rpm/repository_metadata/build_other_xml_service.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true +module Packages + module Rpm + module RepositoryMetadata + class BuildOtherXmlService + ROOT_TAG = 'otherdata' + ROOT_ATTRIBUTES = { + xmlns: 'http://linux.duke.edu/metadata/other', + packages: '0' + }.freeze + + def initialize(data) + @data = data + end + + def execute + builder = Nokogiri::XML::Builder.new do |xml| + xml.package(pkgid: data[:pkgid], name: data[:name], arch: data[:arch]) do + xml.version epoch: data[:epoch], ver: data[:version], rel: data[:release] + build_changelog_nodes(xml) + end + end + + Nokogiri::XML(builder.to_xml).at('package') + end + + private + + attr_reader :data + + def build_changelog_nodes(xml) + data[:changelogs].each do |changelog| + xml.changelog changelog[:changelogtext], date: changelog[:changelogtime] + end + end + end + end + end +end diff --git a/app/services/packages/rpm/repository_metadata/build_primary_xml.rb b/app/services/packages/rpm/repository_metadata/build_primary_xml_service.rb index 580bf844a0c..f7de4ac3eee 100644 --- a/app/services/packages/rpm/repository_metadata/build_primary_xml.rb +++ b/app/services/packages/rpm/repository_metadata/build_primary_xml_service.rb @@ -2,7 +2,7 @@ module Packages module Rpm module RepositoryMetadata - class BuildPrimaryXml < ::Packages::Rpm::RepositoryMetadata::BaseBuilder + class BuildPrimaryXmlService ROOT_TAG = 'metadata' ROOT_ATTRIBUTES = { xmlns: 'http://linux.duke.edu/metadata/common', @@ -11,19 +11,19 @@ module Packages }.freeze # Nodes that have only text without attributes - REQUIRED_BASE_ATTRIBUTES = %i[name arch summary description].freeze - NOT_REQUIRED_BASE_ATTRIBUTES = %i[url packager].freeze + BASE_ATTRIBUTES = %i[name arch summary description url packager].freeze FORMAT_NODE_BASE_ATTRIBUTES = %i[license vendor group buildhost sourcerpm].freeze - private + def initialize(data) + @data = data + end - def build_new_node + def execute builder = Nokogiri::XML::Builder.new do |xml| xml.package(type: :rpm, 'xmlns:rpm': 'http://linux.duke.edu/metadata/rpm') do - build_required_base_attributes(xml) - build_not_required_base_attributes(xml) + build_base_attributes(xml) xml.version epoch: data[:epoch], ver: data[:version], rel: data[:release] - xml.checksum data[:checksum], type: 'sha256', pkgid: 'YES' + xml.checksum data[:pkgid], type: 'sha256', pkgid: 'YES' xml.size package: data[:packagesize], installed: data[:installedsize], archive: data[:archivesize] xml.time file: data[:filetime], build: data[:buildtime] xml.location href: data[:location] if data[:location].present? @@ -34,14 +34,12 @@ module Packages Nokogiri::XML(builder.to_xml).at('package') end - def build_required_base_attributes(xml) - REQUIRED_BASE_ATTRIBUTES.each do |attribute| - xml.method_missing(attribute, data[attribute]) - end - end + private + + attr_reader :data - def build_not_required_base_attributes(xml) - NOT_REQUIRED_BASE_ATTRIBUTES.each do |attribute| + def build_base_attributes(xml) + BASE_ATTRIBUTES.each do |attribute| xml.method_missing(attribute, data[attribute]) if data[attribute].present? end end diff --git a/app/services/packages/rpm/repository_metadata/build_repomd_xml.rb b/app/services/packages/rpm/repository_metadata/build_repomd_xml_service.rb index 84614196254..9fa7aac3202 100644 --- a/app/services/packages/rpm/repository_metadata/build_repomd_xml.rb +++ b/app/services/packages/rpm/repository_metadata/build_repomd_xml_service.rb @@ -2,7 +2,7 @@ module Packages module Rpm module RepositoryMetadata - class BuildRepomdXml + class BuildRepomdXmlService attr_reader :data ROOT_ATTRIBUTES = { diff --git a/app/services/packages/rpm/repository_metadata/update_xml_service.rb b/app/services/packages/rpm/repository_metadata/update_xml_service.rb new file mode 100644 index 00000000000..3fe93b7a623 --- /dev/null +++ b/app/services/packages/rpm/repository_metadata/update_xml_service.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true +module Packages + module Rpm + module RepositoryMetadata + class UpdateXmlService + BUILDERS = { + other: ::Packages::Rpm::RepositoryMetadata::BuildOtherXmlService, + primary: ::Packages::Rpm::RepositoryMetadata::BuildPrimaryXmlService + }.freeze + + def initialize(filename:, xml: nil, data: {}) + @builder_class = BUILDERS[filename] + raise ArgumentError, "Filename must be one of: #{BUILDERS.keys.join(', ')}" if @builder_class.nil? + + @xml = Nokogiri::XML(xml) if xml.present? + @data = data + @filename = filename + end + + def execute + return build_empty_structure if xml.blank? + + remove_existing_packages + update_xml_document + update_package_count + xml.to_xml + end + + private + + attr_reader :xml, :data, :builder_class, :filename + + def build_empty_structure + Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml| + xml.method_missing(builder_class::ROOT_TAG, builder_class::ROOT_ATTRIBUTES) + end.to_xml + end + + def update_xml_document + # Add to the root xml element a new package metadata node + xml.at(builder_class::ROOT_TAG).add_child(builder_class.new(data).execute) + end + + def update_package_count + packages_count = xml.css("//#{builder_class::ROOT_TAG}/package").count + + xml.at(builder_class::ROOT_TAG).attributes["packages"].value = packages_count.to_s + end + + def remove_existing_packages + case filename + when :primary + xml.search("checksum:contains('#{data[:pkgid]}')").each { _1.parent&.remove } + else + xml.search("[pkgid='#{data[:pkgid]}']").each(&:remove) + end + end + end + end + end +end |