def self.genshadow(shadow_file, before_file, after_file, root=nil)
before = readstate(before_file)
after = readstate(after_file)
diff = diff(before, after)
lst = diff[:installed].merge(diff[:updated]) { |k, o, n| (o + n).uniq }
pkgs = []
withdb(root) do |db|
lst.each do |na, versions|
comps = na.split(".")
arch = comps.pop
name = comps.join(".")
iter = db.init_iterator(RPM::TAG_NAME, name) || []
pkgs += iter.select do |pkg|
arch == pkg.arch && versions.include?(pkg.version)
end
end
end
sh = {}
shadow(pkgs).each do |k,v|
sh[PackageHandle.new(k)] = v.collect { |p| PackageHandle.new(p) }
end
File::open(shadow_file, "w") do |out|
YAML.dump(sh.to_a, out)
end
return sh
end