summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerdar Sutay <serdar@opscode.com>2014-07-16 15:59:43 -0700
committerSerdar Sutay <serdar@opscode.com>2014-07-16 15:59:43 -0700
commit59ef721d50d324ae014034da51145d1de27650bb (patch)
treef831329aab9e92a04ff73e0e72f3bef7724b8c90
parent27e0e88d91be43207745211573ad1dce4150d6dd (diff)
parent98751b2283cef13d3e916a0c9acfd4d908220523 (diff)
downloadchef-59ef721d50d324ae014034da51145d1de27650bb.tar.gz
Merge pull request #1623 from opscode/ryancragun/GH-1554-10-stable
[Issue 1554] Don't detect package name as version when the RPM isn't ins...
-rw-r--r--CHANGELOG.md1
-rw-r--r--chef/lib/chef/provider/package/rpm.rb4
-rw-r--r--chef/spec/unit/provider/package/rpm_spec.rb12
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