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.
504 505 506 507 508 509 510 511 512 513 514 515 |
# 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 |
Instance Method Details
#<<(*args) ⇒ Object
575 576 577 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 575 def <<(*args) push(args) end |
#[](package_name) ⇒ Object
517 518 519 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 517 def [](package_name) lookup(package_name) end |
#available?(package) ⇒ Boolean
608 609 610 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 608 def available?(package) @available.include?(package) end |
#available_size ⇒ Object
600 601 602 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 600 def available_size @available.size end |
#clear ⇒ Object
579 580 581 582 583 584 585 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 579 def clear @rpms.clear @index.clear @provides.clear clear_available clear_installed end |
#clear_available ⇒ Object
587 588 589 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 587 def clear_available @available.clear end |
#clear_installed ⇒ Object
591 592 593 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 591 def clear_installed @installed.clear end |
#installed?(package) ⇒ Boolean
612 613 614 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 612 def installed?(package) @installed.include?(package) end |
#installed_size ⇒ Object
604 605 606 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 604 def installed_size @installed.size end |
#lookup(package_name) ⇒ Object
Lookup package_name and return a descending array of package objects
522 523 524 525 526 527 528 529 |
# 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_provides(provide_name) ⇒ Object
531 532 533 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 531 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.
537 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 |
# 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 |
#size ⇒ Object Also known as: length
595 596 597 |
# File 'lib/chef/provider/package/yum/rpm_utils.rb', line 595 def size @rpms.size end |
#whatprovides(rpmdep) ⇒ Object
616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 |
# 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 |