class Chef::Provider::Package::Yum::RPMDb
Simple storage for RPMPackage
objects - keeps them unique and sorted
Public Class Methods
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 504 def initialize # package name => [ RPMPackage, RPMPackage ] of different versions @rpms = {} # package nevra => RPMPackage for lookups @index = {} # provide name (aka feature) => [RPMPackage, RPMPackage] each providing this feature @provides = {} # RPMPackages listed as available @available = Set.new # RPMPackages listed as installed @installed = Set.new end
Public Instance Methods
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 575 def <<(*args) push(args) end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 517 def [](package_name) lookup(package_name) end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 608 def available?(package) @available.include?(package) end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 600 def available_size @available.size end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 579 def clear @rpms.clear @index.clear @provides.clear clear_available clear_installed end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 587 def clear_available @available.clear end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 591 def clear_installed @installed.clear end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 612 def installed?(package) @installed.include?(package) end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 604 def installed_size @installed.size end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 522 def lookup(package_name) pkgs = @rpms[package_name] if pkgs pkgs.sort.reverse else nil end end
Lookup package_name and return a descending array of package objects
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 531 def lookup_provides(provide_name) @provides[provide_name] end
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 537 def push(*args) args.flatten.each do |new_rpm| unless new_rpm.is_a?(RPMDbPackage) raise ArgumentError, "Expecting an RPMDbPackage object" end @rpms[new_rpm.n] ||= [] # we may already have this one, like when the installed list is refreshed idx = @index[new_rpm.nevra] if idx # grab the existing package if it's not curr_rpm = idx else @rpms[new_rpm.n] << new_rpm new_rpm.provides.each do |provide| @provides[provide.name] ||= [] @provides[provide.name] << new_rpm end curr_rpm = new_rpm end # Track the nevra -> RPMPackage association to avoid having to compare versions # with @rpms[new_rpm.n] on the next round @index[new_rpm.nevra] = curr_rpm # these are overwritten for existing packages if new_rpm.available @available << curr_rpm end if new_rpm.installed @installed << curr_rpm end end end
Using the package name as a key, and nevra for an index, keep a unique list of packages. The available/installed state can be overwritten for existing packages.
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 595 def size @rpms.size end
Also aliased as: length
Source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 616 def whatprovides(rpmdep) unless rpmdep.is_a?(RPMDependency) raise ArgumentError, "Expecting an RPMDependency object" end what = [] packages = lookup_provides(rpmdep.name) if packages packages.each do |pkg| pkg.provides.each do |provide| if provide.satisfy?(rpmdep) what << pkg end end end end what end