Class: Chef::Provider::Package::Yum::RPMDb
- Defined in:
- lib/chef/provider/package/yum.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.
511 512 513 514 515 516 517 518 519 520 521 522 |
# File 'lib/chef/provider/package/yum.rb', line 511 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
582 583 584 |
# File 'lib/chef/provider/package/yum.rb', line 582 def <<(*args) self.push(args) end |
#[](package_name) ⇒ Object
524 525 526 |
# File 'lib/chef/provider/package/yum.rb', line 524 def [](package_name) self.lookup(package_name) end |
#available?(package) ⇒ Boolean
615 616 617 |
# File 'lib/chef/provider/package/yum.rb', line 615 def available?(package) @available.include?(package) end |
#available_size ⇒ Object
607 608 609 |
# File 'lib/chef/provider/package/yum.rb', line 607 def available_size @available.size end |
#clear ⇒ Object
586 587 588 589 590 591 592 |
# File 'lib/chef/provider/package/yum.rb', line 586 def clear @rpms.clear @index.clear @provides.clear clear_available clear_installed end |
#clear_available ⇒ Object
594 595 596 |
# File 'lib/chef/provider/package/yum.rb', line 594 def clear_available @available.clear end |
#clear_installed ⇒ Object
598 599 600 |
# File 'lib/chef/provider/package/yum.rb', line 598 def clear_installed @installed.clear end |
#installed?(package) ⇒ Boolean
619 620 621 |
# File 'lib/chef/provider/package/yum.rb', line 619 def installed?(package) @installed.include?(package) end |
#installed_size ⇒ Object
611 612 613 |
# File 'lib/chef/provider/package/yum.rb', line 611 def installed_size @installed.size end |
#lookup(package_name) ⇒ Object
Lookup package_name and return a descending array of package objects
529 530 531 532 533 534 535 536 |
# File 'lib/chef/provider/package/yum.rb', line 529 def lookup(package_name) pkgs = @rpms[package_name] if pkgs return pkgs.sort.reverse else return nil end end |
#lookup_provides(provide_name) ⇒ Object
538 539 540 |
# File 'lib/chef/provider/package/yum.rb', line 538 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.
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 575 576 577 578 579 580 |
# File 'lib/chef/provider/package/yum.rb', line 544 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
602 603 604 |
# File 'lib/chef/provider/package/yum.rb', line 602 def size @rpms.size end |
#whatprovides(rpmdep) ⇒ Object
623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 |
# File 'lib/chef/provider/package/yum.rb', line 623 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 |