diff options
| author | Jack Nagel | 2012-08-15 18:52:25 -0500 |
|---|---|---|
| committer | Jack Nagel | 2012-08-15 22:39:52 -0500 |
| commit | 83cdc64b40dfd2c4f956f614d2d993c2ad4ef595 (patch) | |
| tree | 9368a36df8cc283913450f98fb902471fb10a23d /Library | |
| parent | 140dc4c4196deee3f337f2690ed513026d1ba369 (diff) | |
| download | brew-83cdc64b40dfd2c4f956f614d2d993c2ad4ef595.tar.bz2 | |
FormulaInstaller: filter ARGV when testing for installed deps
In FormulaInstaller#install, needed_deps is created without first
filtering ARGV for flags like --HEAD. In practice, this means that
sometimes needed_deps will contain dependencies that are actually
already installed; --HEAD causes Formula#installed_prefix to differ and
thus checking Formula#installed? will result in false negatives.
This can trigger weird bugs; for example, Homebrew/homebrew#10380, where the "Installing
foo" header is displayed even though no dependencies were previously
installed.
Fix this by filtering ARGV before testing for installed dependencies,
and do the same for requirements to maintain symmetry, and because some
requiremnts check Formula#installed? as well.
Fixes Homebrew/homebrew#10380.
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/formula_installer.rb | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index a643da3ee..5135f02c3 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -67,14 +67,20 @@ class FormulaInstaller end unless ignore_deps - needed_reqs = f.recursive_requirements.reject { |r| r.satisfied? } - puts needed_reqs.map { |r| r.message } * "\n" unless needed_reqs.empty? - unsatisfied_fatals = needed_reqs.select { |r| r.fatal? } - unless unsatisfied_fatals.empty? - raise UnsatisfiedRequirements.new(f, unsatisfied_fatals) + needed_deps = [] + needed_reqs = [] + + ARGV.filter_for_dependencies do + needed_deps = f.recursive_deps.reject{ |d| d.installed? } + needed_reqs = f.recursive_requirements.reject { |r| r.satisfied? } + end + + unless needed_reqs.empty? + puts needed_reqs.map { |r| r.message } * "\n" + fatals = needed_reqs.select { |r| r.fatal? } + raise UnsatisfiedRequirements.new(f, fatals) unless fatals.empty? end - needed_deps = f.recursive_deps.reject{ |d| d.installed? } unless needed_deps.empty? needed_deps.each do |dep| if dep.explicitly_requested? |
