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 'app/services/packages/rpm/repository_metadata/build_filelist_xml_service.rb')
-rw-r--r--app/services/packages/rpm/repository_metadata/build_filelist_xml_service.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/app/services/packages/rpm/repository_metadata/build_filelist_xml_service.rb b/app/services/packages/rpm/repository_metadata/build_filelist_xml_service.rb
new file mode 100644
index 00000000000..47cbba76fa4
--- /dev/null
+++ b/app/services/packages/rpm/repository_metadata/build_filelist_xml_service.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+module Packages
+ module Rpm
+ module RepositoryMetadata
+ class BuildFilelistXmlService < BuildXmlBaseService
+ ROOT_TAG = 'filelists'
+ ROOT_ATTRIBUTES = {
+ xmlns: 'http://linux.duke.edu/metadata/filelists',
+ packages: '0'
+ }.freeze
+
+ def execute
+ super 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_file_nodes(xml)
+ end
+ end
+ end
+
+ private
+
+ def build_file_nodes(xml)
+ data[:files].each do |path|
+ attributes = dir?(path) ? { type: 'dir' } : {}
+
+ xml.file path, **attributes
+ end
+ end
+
+ def dir?(path)
+ # Add trailing slash to path to check
+ # if it exists in directories list
+ data[:directories].include? File.join(path, '')
+ end
+ end
+ end
+ end
+end