Check deps of satisfied deps
This commit is contained in:
parent
1fb4cd501b
commit
fcfc53df33
@ -71,8 +71,11 @@ class Dependency
|
|||||||
# optionals and recommendeds based on what the dependent has asked for.
|
# optionals and recommendeds based on what the dependent has asked for.
|
||||||
def expand(dependent, &block)
|
def expand(dependent, &block)
|
||||||
deps = dependent.deps.map do |dep|
|
deps = dependent.deps.map do |dep|
|
||||||
if prune?(dependent, dep, &block)
|
case action(dependent, dep, &block)
|
||||||
|
when :prune
|
||||||
next
|
next
|
||||||
|
when :skip
|
||||||
|
expand(dep.to_formula, &block)
|
||||||
else
|
else
|
||||||
expand(dep.to_formula, &block) << dep
|
expand(dep.to_formula, &block) << dep
|
||||||
end
|
end
|
||||||
@ -81,8 +84,8 @@ class Dependency
|
|||||||
merge_repeats(deps)
|
merge_repeats(deps)
|
||||||
end
|
end
|
||||||
|
|
||||||
def prune?(dependent, dep, &block)
|
def action(dependent, dep, &block)
|
||||||
catch(:prune) do
|
catch(:action) do
|
||||||
if block_given?
|
if block_given?
|
||||||
yield dependent, dep
|
yield dependent, dep
|
||||||
elsif dep.optional? || dep.recommended?
|
elsif dep.optional? || dep.recommended?
|
||||||
@ -93,7 +96,11 @@ class Dependency
|
|||||||
|
|
||||||
# Used to prune dependencies when calling expand with a block.
|
# Used to prune dependencies when calling expand with a block.
|
||||||
def prune
|
def prune
|
||||||
throw(:prune, true)
|
throw(:action, :prune)
|
||||||
|
end
|
||||||
|
|
||||||
|
def skip
|
||||||
|
throw(:action, :skip)
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge_repeats(deps)
|
def merge_repeats(deps)
|
||||||
|
|||||||
@ -178,7 +178,7 @@ class FormulaInstaller
|
|||||||
elsif dep.build? && install_bottle?(dependent)
|
elsif dep.build? && install_bottle?(dependent)
|
||||||
Dependency.prune
|
Dependency.prune
|
||||||
elsif dep.satisfied?
|
elsif dep.satisfied?
|
||||||
Dependency.prune
|
Dependency.skip
|
||||||
elsif dep.installed?
|
elsif dep.installed?
|
||||||
raise UnsatisfiedDependencyError.new(f, dep)
|
raise UnsatisfiedDependencyError.new(f, dep)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -82,4 +82,17 @@ class DependencyExpansionTests < Test::Unit::TestCase
|
|||||||
|
|
||||||
assert_equal %w{option}, Dependency.expand(@f).first.tags
|
assert_equal %w{option}, Dependency.expand(@f).first.tags
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_skip_skips_parent_but_yields_children
|
||||||
|
f = stub(:deps => [
|
||||||
|
build_dep(:foo, [], [@bar, @baz]),
|
||||||
|
build_dep(:foo, [], [@baz]),
|
||||||
|
])
|
||||||
|
|
||||||
|
deps = Dependency.expand(f) do |dependent, dep|
|
||||||
|
Dependency.skip if %w{foo qux}.include? dep.name
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal [@bar, @baz], deps
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user