class Chef::Provider::Package::Yum::RPMDb
Simple storage for RPMPackage objects - keeps them unique and sorted
Public Class Methods
new()
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 514 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
<<(*args)
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 585 def <<(*args) push(args) end
[](package_name)
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 527 def [](package_name) lookup(package_name) end
available?(package)
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 618 def available?(package) @available.include?(package) end
available_size()
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 610 def available_size @available.size end
clear()
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 589 def clear @rpms.clear @index.clear @provides.clear clear_available clear_installed end
clear_available()
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 597 def clear_available @available.clear end
clear_installed()
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 601 def clear_installed @installed.clear end
installed?(package)
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 622 def installed?(package) @installed.include?(package) end
installed_size()
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 614 def installed_size @installed.size end
lookup(package_name)
click to toggle source
Lookup package_name and return a descending array of package objects
# File lib/chef/provider/package/yum/rpm_utils.rb, line 532 def lookup(package_name) pkgs = @rpms[package_name] if pkgs return pkgs.sort.reverse else return nil end end
lookup_provides(provide_name)
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 541 def lookup_provides(provide_name) @provides[provide_name] end
push(*args)
click to toggle source
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.
# File lib/chef/provider/package/yum/rpm_utils.rb, line 547 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
size()
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 605 def size @rpms.size end
Also aliased as: length
whatprovides(rpmdep)
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 626 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