aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorJack Nagel2012-08-15 18:52:25 -0500
committerJack Nagel2012-08-15 22:39:52 -0500
commit83cdc64b40dfd2c4f956f614d2d993c2ad4ef595 (patch)
tree9368a36df8cc283913450f98fb902471fb10a23d /Library
parent140dc4c4196deee3f337f2690ed513026d1ba369 (diff)
downloadbrew-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.rb18
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?