summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIrving Popovetsky <irving@getchef.com>2015-09-28 13:33:36 -0700
committerIrving Popovetsky <irving@getchef.com>2015-09-28 13:33:36 -0700
commit0f720e4e2c18ab96b8d58f95dbf1b14bfee4de6d (patch)
treed1426151a632cc7133138ced4816b509a2682792
parent8d32fdd4377476a9f7dc36a864ccdaa17c32b3a1 (diff)
downloadchef-irving/issue3671.tar.gz
Use much simpler regex for determining the rpm versionirving/issue3671
-rw-r--r--lib/chef/provider/package/rpm.rb4
-rw-r--r--spec/unit/provider/package/rpm_spec.rb19
2 files changed, 20 insertions, 3 deletions
diff --git a/lib/chef/provider/package/rpm.rb b/lib/chef/provider/package/rpm.rb
index c5d52a8384..6ce0dd689f 100644
--- a/lib/chef/provider/package/rpm.rb
+++ b/lib/chef/provider/package/rpm.rb
@@ -61,7 +61,7 @@ class Chef
Chef::Log.debug("#{@new_resource} checking rpm status")
shell_out_with_timeout!("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}").stdout.each_line do |line|
case line
- when /^([\w\d+_.-]+)\s([\w\d~_.-]+)$/
+ when /^(\S+)\s(\S+)$/
@current_resource.package_name($1)
@new_resource.version($2)
@candidate_version = $2
@@ -78,7 +78,7 @@ class Chef
@rpm_status = shell_out_with_timeout("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@current_resource.package_name}")
@rpm_status.stdout.each_line do |line|
case line
- when /^([\w\d+_.-]+)\s([\w\d~_.-]+)$/
+ when /^(\S+)\s(\S+)$/
Chef::Log.debug("#{@new_resource} current version is #{$2}")
@current_resource.version($2)
end
diff --git a/spec/unit/provider/package/rpm_spec.rb b/spec/unit/provider/package/rpm_spec.rb
index e0e45d0b4f..ad9d694e34 100644
--- a/spec/unit/provider/package/rpm_spec.rb
+++ b/spec/unit/provider/package/rpm_spec.rb
@@ -256,6 +256,24 @@ describe Chef::Provider::Package::Rpm do
end
end
+ context "when the package name contains a plus symbol (chef#3671)" do
+
+ let(:package_name) { "chef-server-core" }
+
+ let(:package_source) { "/tmp/chef-server-core-12.2.0+20150713220422-1.el6.x86_64.rpm" }
+
+ let(:rpm_qp_stdout) { "chef-server-core 12.2.0+20150713220422-1.el6" }
+ let(:rpm_q_stdout) { "chef-server-core 12.2.0+20150713220422-1.el6" }
+
+ let(:rpm_qp_exitstatus) { 0 }
+ let(:rpm_q_exitstatus) { 0 }
+
+ it "should correctly determine the candidate version and installed version" do
+ expect(provider.current_resource.package_name).to eq("chef-server-core")
+ expect(provider.new_resource.version).to eq("12.2.0+20150713220422-1.el6")
+ end
+ end
+
end
context "when the source is given as an URI" do
@@ -413,4 +431,3 @@ describe Chef::Provider::Package::Rpm do
end
-