diff options
author | Ryan Cragun <me@ryan.ec> | 2014-07-09 11:10:48 -0700 |
---|---|---|
committer | sersut <serdar@opscode.com> | 2014-07-16 13:37:55 -0700 |
commit | 98751b2283cef13d3e916a0c9acfd4d908220523 (patch) | |
tree | f831329aab9e92a04ff73e0e72f3bef7724b8c90 | |
parent | 27e0e88d91be43207745211573ad1dce4150d6dd (diff) | |
download | chef-98751b2283cef13d3e916a0c9acfd4d908220523.tar.gz |
[Issue 1554] Don't detect package name as version when the RPM isn't installed
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | chef/lib/chef/provider/package/rpm.rb | 4 | ||||
-rw-r--r-- | chef/spec/unit/provider/package/rpm_spec.rb | 12 |
3 files changed, 15 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index a86ebf1ba4..1a2aec47b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Fix OS X service provider actions that don't require the service label to work when there is no plist. (backport CHEF-5223) * Set Net::HTTP open_timeout. (backport Chef-1585) +* Fix RPM package version detection (backport Issue 1554) ## 10.32.2 diff --git a/chef/lib/chef/provider/package/rpm.rb b/chef/lib/chef/provider/package/rpm.rb index 033ce8efb9..ffd79b4ec6 100644 --- a/chef/lib/chef/provider/package/rpm.rb +++ b/chef/lib/chef/provider/package/rpm.rb @@ -60,7 +60,7 @@ class Chef status = popen4("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}") do |pid, stdin, stdout, stderr| stdout.each do |line| case line - when /([\w\d_.-]+)\s([\w\d_.-]+)/ + when /^([\w\d_.-]+)\s([\w\d_.-]+)$/ @current_resource.package_name($1) @new_resource.version($2) end @@ -77,7 +77,7 @@ class Chef @rpm_status = popen4("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@current_resource.package_name}") do |pid, stdin, stdout, stderr| stdout.each do |line| case line - when /([\w\d_.-]+)\s([\w\d_.-]+)/ + when /^([\w\d_.-]+)\s([\w\d_.-]+)$/ Chef::Log.debug("#{@new_resource} current version is #{$2}") @current_resource.version($2) end diff --git a/chef/spec/unit/provider/package/rpm_spec.rb b/chef/spec/unit/provider/package/rpm_spec.rb index 9dd94a7441..95e5b38dcb 100644 --- a/chef/spec/unit/provider/package/rpm_spec.rb +++ b/chef/spec/unit/provider/package/rpm_spec.rb @@ -80,6 +80,18 @@ describe Chef::Provider::Package::Rpm do @provider.stub!(:popen4).and_return(status) lambda { @provider.run_action(:any) }.should raise_error(Chef::Exceptions::Package) end + + it "should not detect the package name as version when not installed" do + @status = double("Status", :exitstatus => -1) + @stdout = StringIO.new("package openssh-askpass is not installed") + @new_resource = Chef::Resource::Package.new("openssh-askpass") + @new_resource.source 'openssh-askpass' + @provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context) + @provider.should_receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status) + @provider.should_receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_return(@status) + @provider.load_current_resource + @provider.current_resource.version.should be_nil + end end describe "after the current resource is loaded" do |