Skip to content

Commit

Permalink
Attempt to infer package category when missing (Gentoo provider) [CHE…
Browse files Browse the repository at this point in the history
…F-425]
  • Loading branch information
kennethkalmer committed Feb 4, 2010
1 parent 8df3958 commit 3abe575
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
19 changes: 19 additions & 0 deletions chef/lib/chef/provider/package/portage.rb
Expand Up @@ -34,6 +34,25 @@ def load_current_resource

if category == pkg
Chef::Log.info("Package name '#{pkg}' does not include a category!")

possible_categories = []
Dir.entries("/var/db/pkg").each do |cat|
Dir.entries("/var/db/pkg/#{cat}").each do |entry|
if(entry =~ /^#{Regexp.escape(pkg)}\-(\d[\.\d]*((_(alpha|beta|pre|rc|p)\d*)*)?(-r\d+)?)/)
possible_categories << cat
break
end
end
end

if possible_categories.size == 1
category = possible_categories.shift
Chef::Log.info("Infered '#{category}' as category for '#{pkg}'")
@new_resource.package_name([ category, pkg ].join('/'))
@current_resource.package_name([ category, pkg ].join('/'))
elsif possible_categories.size > 1
Chef::Log.info("Possible categories for '#{pkg}' can be #{possible_categories.join(', ')}. Not changing package name")
end
end

@current_resource.version(nil)
Expand Down
19 changes: 19 additions & 0 deletions chef/spec/unit/provider/package/portage_spec.rb
Expand Up @@ -192,7 +192,26 @@

it "should log a warning on load_current_resource" do
Chef::Log.should_receive(:info).with("Package name 'git' does not include a category!")
::Dir.stub!(:entries).and_return([])

@provider.load_current_resource
end

it "should resolve the category if only on category was found" do
::File.stub!(:exists?).and_return(true)
::Dir.stub!(:entries).and_return(['dev-util'], ['git-1.6.3.3'])
#Chef::Log.should_receive(:info).once.with("Infered 'dev-util' as category name for 'git'")

@provider.load_current_resource
@provider.current_resource.package_name.should == "dev-util/git"
end

it "should not resolve the category if multiple entries were found" do
::File.stub!(:exists?).and_return(true)
::Dir.stub!(:entries).and_return(['dev-util', 'app-admin'], ['git-1.6.3.3'], ['git-0.9.9'])
#Chef::Log.should_receive(:info).once.with("Possible categories for 'git' can be dev-util, app-admin. Not changing package name")

@provider.load_current_resource
@provider.current_resource.package_name.should == "git"
end
end

0 comments on commit 3abe575

Please sign in to comment.