summaryrefslogtreecommitdiff
path: root/app/services/packages
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-10-26 15:10:10 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-10-26 15:10:10 +0000
commitc86ec1d072338034a312bb4be0ff175892fa01b7 (patch)
treee67bb3ce9beb174a20991e53d998f59adc35f02e /app/services/packages
parentc15582526dd15f5ea8fac0906624cc5cd2db03ab (diff)
downloadgitlab-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.rb46
-rw-r--r--app/services/packages/rpm/repository_metadata/build_filelist_xml.rb14
-rw-r--r--app/services/packages/rpm/repository_metadata/build_other_xml.rb14
-rw-r--r--app/services/packages/rpm/repository_metadata/build_other_xml_service.rb39
-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.rb61
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