summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Calavera <david.calavera@gmail.com>2011-12-22 13:48:28 -0800
committerBryan McLellan <btm@opscode.com>2012-02-10 11:35:02 -0800
commita01c6593dc9825c0ef398e1a8f962d7f61acd2cf (patch)
treeef7c292a909bd9c0d42fb856ac5041a87a99119e
parentf0d170e349de7d86bfa7541ee8f4bbb95bab8b85 (diff)
downloadchef-a01c6593dc9825c0ef398e1a8f962d7f61acd2cf.tar.gz
Portage should return a current resource when the category is specified
-rw-r--r--chef/lib/chef/provider/package/portage.rb6
-rw-r--r--chef/spec/unit/provider/package/portage_spec.rb7
2 files changed, 10 insertions, 3 deletions
diff --git a/chef/lib/chef/provider/package/portage.rb b/chef/lib/chef/provider/package/portage.rb
index 3fba975106..4c995b909a 100644
--- a/chef/lib/chef/provider/package/portage.rb
+++ b/chef/lib/chef/provider/package/portage.rb
@@ -24,7 +24,7 @@ class Chef
class Provider
class Package
class Portage < Chef::Provider::Package
- PACKAGE_NAME_PATTERN = %r{(([^/]+)/)?([^/]+)}
+ PACKAGE_NAME_PATTERN = %r{(?:([^/]+)/)?([^/]+)}
def load_current_resource
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@@ -32,7 +32,7 @@ class Chef
@current_resource.version(nil)
- _, category_with_slash, category, pkg = %r{^#{PACKAGE_NAME_PATTERN}$}.match(@new_resource.package_name).to_a
+ category, pkg = %r{^#{PACKAGE_NAME_PATTERN}$}.match(@new_resource.package_name)[1,2]
possibilities = Dir["/var/db/pkg/#{category || "*"}/#{pkg}-*"].map {|d| d.sub(%r{/var/db/pkg/}, "") }
versions = possibilities.map do |entry|
@@ -41,7 +41,7 @@ class Chef
end
end.compact
- if versions.size > 1
+ if versions.size > 1 && !category
atoms = versions.map {|v| v.first }.sort
raise Chef::Exceptions::Package, "Multiple packages found for #{@new_resource.package_name}: #{atoms.join(" ")}. Specify a category."
elsif versions.size == 1
diff --git a/chef/spec/unit/provider/package/portage_spec.rb b/chef/spec/unit/provider/package/portage_spec.rb
index b3fd86bd42..09f0d1725b 100644
--- a/chef/spec/unit/provider/package/portage_spec.rb
+++ b/chef/spec/unit/provider/package/portage_spec.rb
@@ -80,6 +80,13 @@ describe Chef::Provider::Package::Portage, "load_current_resource" do
@provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
lambda { @provider.load_current_resource }.should raise_error(Chef::Exceptions::Package)
end
+
+ it "should return a current resource with a nil version if a category is specified and multiple packages are found" do
+ ::Dir.stub!(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/funny-words/git-1.0.0"])
+ @provider = Chef::Provider::Package::Portage.new(@new_resource, @run_context)
+ @provider.load_current_resource
+ @provider.current_resource.version.should be_nil
+ end
end
describe "once the state of the package is known" do