From 83cdc64b40dfd2c4f956f614d2d993c2ad4ef595 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Wed, 15 Aug 2012 18:52:25 -0500 Subject: [PATCH] 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 --- Library/Homebrew/formula_installer.rb | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index a643da3ee4..5135f02c3e 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?