summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Timberman <jtimberman@users.noreply.github.com>2014-12-09 11:29:48 -0700
committerSerdar Sutay <serdar@opscode.com>2014-12-09 11:06:03 -0800
commitf0e29b3a46026d7283162df5e30ce7c46836f470 (patch)
treeeb5139652dc6a2445b5399725110e6213e8394b0
parent44763f6e5ab18421897791ee610bd5b63f9c1dd3 (diff)
downloadchef-sersut/port-mac-package.tar.gz
Merge pull request #2582 from jtimberman/jtimberman/brew-info-installedsersut/port-mac-package
Fixes #2578, check that `installed` isn't empty Conflicts: CHANGELOG.md
-rw-r--r--CHANGELOG.md3
-rw-r--r--lib/chef/provider/package/homebrew.rb10
-rw-r--r--spec/unit/provider/package/homebrew_spec.rb26
3 files changed, 38 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9f5c6d5e5e..c55ad8aa57 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 12.0.2 (Unreleased)
+* [Issue 2578](https://github.com/opscode/chef/issues/2578) Check that `installed` is not empty for `keg_only` formula in Homebrew provider
+
## 12.0.1
* [Issue 2552](https://github.com/opscode/chef/issues/2552) Create constant for LWRP before calling `provides`
* [Issue 2545](https://github.com/opscode/chef/issues/2545) `path` attribute of `execute` resource is restored to provide backwards compatibility with Chef 11.
diff --git a/lib/chef/provider/package/homebrew.rb b/lib/chef/provider/package/homebrew.rb
index 822f4c8a42..1b407a1901 100644
--- a/lib/chef/provider/package/homebrew.rb
+++ b/lib/chef/provider/package/homebrew.rb
@@ -94,7 +94,15 @@ class Chef
# that brew thinks is linked as the current version.
#
def current_installed_version
- brew_info['keg_only'] ? brew_info['installed'].last['version'] : brew_info['linked_keg']
+ if brew_info['keg_only']
+ if brew_info['installed'].empty?
+ nil
+ else
+ brew_info['installed'].last['version']
+ end
+ else
+ brew_info['linked_keg']
+ end
end
# Packages (formula) available to install should have a
diff --git a/spec/unit/provider/package/homebrew_spec.rb b/spec/unit/provider/package/homebrew_spec.rb
index dccd8edf11..d01d455b09 100644
--- a/spec/unit/provider/package/homebrew_spec.rb
+++ b/spec/unit/provider/package/homebrew_spec.rb
@@ -93,6 +93,27 @@ describe Chef::Provider::Package::Homebrew do
}
end
+ let(:keg_only_uninstalled_brew_info) do
+ {
+ 'name' => 'emacs-kegger',
+ 'homepage' => 'http://www.gnu.org/software/emacs/',
+ 'versions' => {
+ 'stable' => '24.3-keggy',
+ 'bottle' => false,
+ 'devel' => nil,
+ 'head' => 'HEAD'
+ },
+ 'revision' => 0,
+ 'installed' => [],
+ 'linked_keg' => nil,
+ 'keg_only' => true,
+ 'dependencies' => [],
+ 'conflicts_with' => [],
+ 'caveats' => '',
+ 'options' => []
+ }
+ end
+
before(:each) do
end
@@ -141,6 +162,11 @@ describe Chef::Provider::Package::Homebrew do
allow(provider).to receive(:brew_info).and_return(uninstalled_brew_info)
expect(provider.current_installed_version).to be_nil
end
+
+ it 'returns nil if the package is keg only and not installed' do
+ allow(provider).to receive(:brew_info).and_return(keg_only_uninstalled_brew_info)
+ expect(provider.current_installed_version).to be_nil
+ end
end
describe 'brew' do