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.
514 515 516 517 518 519 520 521 522 523 524 525 |
# File 'lib/chef/provider/package/yum.rb', line 514 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
585 586 587 |
# File 'lib/chef/provider/package/yum.rb', line 585 def <<(*args) self.push(args) end |
#[](package_name) ⇒ Object
527 528 529 |
# File 'lib/chef/provider/package/yum.rb', line 527 def [](package_name) self.lookup(package_name) end |
#available?(package) ⇒ Boolean
618 619 620 |
# File 'lib/chef/provider/package/yum.rb', line 618 def available?(package) @available.include?(package) end |
#available_size ⇒ Object
610 611 612 |
# File 'lib/chef/provider/package/yum.rb', line 610 def available_size @available.size end |
#clear ⇒ Object
589 590 591 592 593 594 595 |
# File 'lib/chef/provider/package/yum.rb', line 589 def clear @rpms.clear @index.clear @provides.clear clear_available clear_installed end |
#clear_available ⇒ Object
597 598 599 |
# File 'lib/chef/provider/package/yum.rb', line 597 def clear_available @available.clear end |
#clear_installed ⇒ Object
601 602 603 |
# File 'lib/chef/provider/package/yum.rb', line 601 def clear_installed @installed.clear end |
#installed?(package) ⇒ Boolean
622 623 624 |
# File 'lib/chef/provider/package/yum.rb', line 622 def installed?(package) @installed.include?(package) end |
#installed_size ⇒ Object
614 615 616 |
# File 'lib/chef/provider/package/yum.rb', line 614 def installed_size @installed.size end |
#lookup(package_name) ⇒ Object
Lookup package_name and return a descending array of package objects
532 533 534 535 536 537 538 539 |
# File 'lib/chef/provider/package/yum.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) ⇒ Object
541 542 543 |
# File 'lib/chef/provider/package/yum.rb', line 541 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.
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 581 582 583 |
# File 'lib/chef/provider/package/yum.rb', line 547 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
605 606 607 |
# File 'lib/chef/provider/package/yum.rb', line 605 def size @rpms.size end |
#whatprovides(rpmdep) ⇒ Object
626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 |
# File 'lib/chef/provider/package/yum.rb', line 626 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 |