def input(path)
rpm = ::RPM::File.new(path)
tags = {}
rpm.header.tags.each do |tag|
tags[tag.tag] = tag.value
end
self.architecture = tags[:arch]
self.category = tags[:group]
self.description = tags[:description]
self.epoch = (tags[:epoch] || [nil]).first
self.iteration = tags[:release]
self.license = tags[:license]
self.maintainer = maintainer
self.name = tags[:name]
self.url = tags[:url]
self.vendor = tags[:vendor]
self.version = tags[:version]
self.scripts[:before_install] = tags[:prein]
self.scripts[:after_install] = tags[:postin]
self.scripts[:before_remove] = tags[:preun]
self.scripts[:after_remove] = tags[:postun]
self.scripts[:rpm_verifyscript] = tags[:verifyscript]
self.scripts[:rpm_posttrans] = tags[:posttrans]
self.scripts[:rpm_pretrans] = tags[:pretrans]
if !tags[:triggerindex].nil?
val = tags[:triggerindex].zip(tags[:triggername],tags[:triggerflags],tags[:triggerversion]).group_by{ |x| x[0]}
val = val.collect do |order,data|
new_data = data.collect { |x| [ x[1], rpm.operator(x[2]), x[3]].join(" ").strip}.join(", ")
[order, rpm_get_trigger_type(data[0][2]), new_data]
end
val.each do |order, attr,data|
self.attributes[attr] = [] if self.attributes[attr].nil?
scriptprog = (tags[:triggerscriptprog][order] == '/bin/sh') ? "" : "-p #{tags[:triggerscriptprog][order]}"
self.attributes[attr] << [data,tags[:triggerscripts][order],scriptprog]
end
end
if !attributes[:no_auto_depends?]
self.dependencies += rpm.requires.collect do |name, operator, version|
[name, operator, version].join(" ")
end
end
self.conflicts += rpm.conflicts.collect do |name, operator, version|
[name, operator, version].join(" ")
end
self.provides += rpm.provides.collect do |name, operator, version|
[name, operator, version].join(" ")
end
self.config_files += rpm.config_files
rpm.extract(staging_path)
end