diff options
author | David Calavera <david.calavera@gmail.com> | 2011-12-22 13:48:28 -0800 |
---|---|---|
committer | Bryan McLellan <btm@opscode.com> | 2012-02-10 11:35:02 -0800 |
commit | a01c6593dc9825c0ef398e1a8f962d7f61acd2cf (patch) | |
tree | ef7c292a909bd9c0d42fb856ac5041a87a99119e | |
parent | f0d170e349de7d86bfa7541ee8f4bbb95bab8b85 (diff) | |
download | chef-a01c6593dc9825c0ef398e1a8f962d7f61acd2cf.tar.gz |
Portage should return a current resource when the category is specified
-rw-r--r-- | chef/lib/chef/provider/package/portage.rb | 6 | ||||
-rw-r--r-- | chef/spec/unit/provider/package/portage_spec.rb | 7 |
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 |