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.
510 511 512 513 514 515 516 517 518 519 520 521 |
# File 'lib/chef/provider/package/yum.rb', line 510 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
581 582 583 |
# File 'lib/chef/provider/package/yum.rb', line 581 def <<(*args) self.push(args) end |
#[](package_name) ⇒ Object
523 524 525 |
# File 'lib/chef/provider/package/yum.rb', line 523 def [](package_name) self.lookup(package_name) end |
#available?(package) ⇒ Boolean
614 615 616 |
# File 'lib/chef/provider/package/yum.rb', line 614 def available?(package) @available.include?(package) end |
#available_size ⇒ Object
606 607 608 |
# File 'lib/chef/provider/package/yum.rb', line 606 def available_size @available.size end |
#clear ⇒ Object
585 586 587 588 589 590 591 |
# File 'lib/chef/provider/package/yum.rb', line 585 def clear @rpms.clear @index.clear @provides.clear clear_available clear_installed end |
#clear_available ⇒ Object
593 594 595 |
# File 'lib/chef/provider/package/yum.rb', line 593 def clear_available @available.clear end |
#clear_installed ⇒ Object
597 598 599 |
# File 'lib/chef/provider/package/yum.rb', line 597 def clear_installed @installed.clear end |
#installed?(package) ⇒ Boolean
618 619 620 |
# File 'lib/chef/provider/package/yum.rb', line 618 def installed?(package) @installed.include?(package) end |
#installed_size ⇒ Object
610 611 612 |
# File 'lib/chef/provider/package/yum.rb', line 610 def installed_size @installed.size end |
#lookup(package_name) ⇒ Object
Lookup package_name and return a descending array of package objects
528 529 530 531 532 533 534 535 |
# File 'lib/chef/provider/package/yum.rb', line 528 def lookup(package_name) pkgs = @rpms[package_name] if pkgs return pkgs.sort.reverse else return nil end end |
#lookup_provides(provide_name) ⇒ Object
537 538 539 |
# File 'lib/chef/provider/package/yum.rb', line 537 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.
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 575 576 577 578 579 |
# File 'lib/chef/provider/package/yum.rb', line 543 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
601 602 603 |
# File 'lib/chef/provider/package/yum.rb', line 601 def size @rpms.size end |
#whatprovides(rpmdep) ⇒ Object
622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 |
# File 'lib/chef/provider/package/yum.rb', line 622 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 |