Class: Chef::Provider::Package::Yum::RPMDb
- Inherits:
-
Object
- Object
- Chef::Provider::Package::Yum::RPMDb
- Defined in:
- lib/chef/provider/package/yum/rpm_utils.rb
Overview
Simple storage for RPMPackage objects - keeps them unique and sorted
Instance Method Summary collapse
- #<<(*args) ⇒ Object
- #[](package_name) ⇒ Object
- #available?(package) ⇒ Boolean
- #available_size ⇒ Object
- #clear ⇒ Object
- #clear_available ⇒ Object
- #clear_installed ⇒ Object
-
#initialize ⇒ RPMDb
constructor
A new instance of RPMDb.
- #installed?(package) ⇒ Boolean
- #installed_size ⇒ Object
-
#lookup(package_name) ⇒ Object
Lookup package_name and return a descending array of package objects.
- #lookup_provides(provide_name) ⇒ Object
-
#push(*args) ⇒ Object
Using the package name as a key, and nevra for an index, keep a unique list of packages.
- #size ⇒ Object (also: #length)
- #whatprovides(rpmdep) ⇒ Object
Constructor Details
#initialize ⇒ RPMDb
Returns a new instance of RPMDb.
505 506 507 508 509 510 511 512 513 514 515 516 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 505 def initialize # package name => [ RPMPackage, RPMPackage ] of different versions @rpms = Hash.new # package nevra => RPMPackage for lookups @index = Hash.new # provide name (aka feature) => [RPMPackage, RPMPackage] each providing this feature @provides = Hash.new # RPMPackages listed as available @available = Set.new # RPMPackages listed as installed @installed = Set.new end |
Instance Method Details
#<<(*args) ⇒ Object
576 577 578 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 576 def <<(*args) self.push(args) end |
#[](package_name) ⇒ Object
518 519 520 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 518 def [](package_name) self.lookup(package_name) end |
#available?(package) ⇒ Boolean
609 610 611 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 609 def available?(package) @available.include?(package) end |
#available_size ⇒ Object
601 602 603 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 601 def available_size @available.size end |
#clear ⇒ Object
580 581 582 583 584 585 586 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 580 def clear @rpms.clear @index.clear @provides.clear clear_available clear_installed end |
#clear_available ⇒ Object
588 589 590 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 588 def clear_available @available.clear end |
#clear_installed ⇒ Object
592 593 594 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 592 def clear_installed @installed.clear end |
#installed?(package) ⇒ Boolean
613 614 615 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 613 def installed?(package) @installed.include?(package) end |
#installed_size ⇒ Object
605 606 607 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 605 def installed_size @installed.size end |
#lookup(package_name) ⇒ Object
Lookup package_name and return a descending array of package objects
523 524 525 526 527 528 529 530 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 523 def lookup(package_name) pkgs = @rpms[package_name] if pkgs return pkgs.sort.reverse else return nil end end |
#lookup_provides(provide_name) ⇒ Object
532 533 534 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 532 def lookup_provides(provide_name) @provides[provide_name] end |
#push(*args) ⇒ Object
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.
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 538 def push(*args) args.flatten.each do |new_rpm| unless new_rpm.kind_of?(RPMDbPackage) raise ArgumentError, "Expecting an RPMDbPackage object" end @rpms[new_rpm.n] ||= Array.new # 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] ||= Array.new @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 ⇒ Object Also known as: length
596 597 598 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 596 def size @rpms.size end |
#whatprovides(rpmdep) ⇒ Object
617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 617 def whatprovides(rpmdep) unless rpmdep.kind_of?(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 return what end |