Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/puppet/provider/package/pkg.rb
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,10 @@ def insync?(is)
warning(_("Implicit version %{should} has %{n} possible matches") % { should: should, n: n })
end
potential_matches.each { |p|
# If the version that we match is installed then we don't need
# to check if it's installed (or installable), just return true
return true if is != :absent && p[:status] == 'installed'

command = is == :absent ? 'install' : 'update'
options = ['-n']
options.concat(join_options(@resource[:install_options])) if @resource[:install_options]
Expand Down
18 changes: 6 additions & 12 deletions spec/unit/provider/package/pkg_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -286,13 +286,9 @@ def self.it_should_respond_to(*actions)

it "should install specific version(2)" do
resource[:ensure] = '0.0.8'
expect(provider).to receive(:properties).and_return({:mark => :hold})
expect(Puppet::Util::Execution).to receive(:execute)
.with(['/bin/pkg', 'unfreeze', 'dummy'], {:failonfail => false, :combine => true})
.and_return(Puppet::Util::Execution::ProcessOutput.new('', 0))
expect(Puppet::Util::Execution).to receive(:execute)
.with(['/bin/pkg', 'list', '-Hv', 'dummy'], {:failonfail => false, :combine => true})
.and_return(Puppet::Util::Execution::ProcessOutput.new('pkg://foo/[email protected],5.11-0.151006:20131230T130000Z installed -----', 0))
expect(Puppet::Util::Execution).to receive(:execute)
.with(['/bin/pkg', 'list', '-Hv', 'dummy'], {:failonfail => false, :combine => true})
.and_return(Puppet::Util::Execution::ProcessOutput.new('pkg://foo/[email protected],5.11-0.151006:20131230T13000 installed -----', 0)).exactly(2).times
expect(Puppet::Util::Execution).to receive(:execute)
.with(['/bin/pkg', 'update', *hash[:flags], '[email protected]'], {:failonfail => false, :combine => true})
.and_return(Puppet::Util::Execution::ProcessOutput.new('', 0))
Expand All @@ -301,11 +297,9 @@ def self.it_should_respond_to(*actions)

it "should downgrade to specific version" do
resource[:ensure] = '0.0.7'
expect(provider).to receive(:properties).and_return({:mark => :hold})
expect(provider).to receive(:query).with(no_args).and_return({:ensure => '0.0.8,5.11-0.151106:20131230T130000Z'})
expect(Puppet::Util::Execution).to receive(:execute)
.with(['/bin/pkg', 'unfreeze', 'dummy'], {:failonfail => false, :combine => true})
.and_return(Puppet::Util::Execution::ProcessOutput.new('', 0))
expect(Puppet::Util::Execution).to receive(:execute)
.with(['/bin/pkg', 'list', '-Hv', 'dummy'], {:failonfail => false, :combine => true})
.and_return(Puppet::Util::Execution::ProcessOutput.new('pkg://foo/[email protected],5.11-0.151106:20131230T130000Z installed -----', 0)).exactly(2).times
expect(Puppet::Util::Execution).to receive(:execute)
.with(['/bin/pkg', 'update', *hash[:flags], '[email protected]'], {:failonfail => false, :combine => true})
.and_return(Puppet::Util::Execution::ProcessOutput.new('', 0))
Expand Down