diff options
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.rb | 39 |
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 |