formula: don't expand unused optional dependencies

This properly addresses Homebrew/homebrew-core#7826.
This commit is contained in:
Alyssa Ross 2016-12-23 15:01:02 +00:00
parent 3f724825d3
commit 43f2e9e7bb
2 changed files with 29 additions and 1 deletions

View File

@ -1505,7 +1505,12 @@ class Formula
# Returns a list of Dependency objects that are required at runtime. # Returns a list of Dependency objects that are required at runtime.
# @private # @private
def runtime_dependencies def runtime_dependencies
recursive_dependencies { |_, dep| Dependency.prune if dep.build? } recursive_dependencies do |_dependent, dependency|
Dependency.prune if dependency.build?
if dependency.optional? || dependency.recommended?
Dependency.prune unless build.with?(dependency)
end
end
end end
# Returns a list of formulae depended on by this formula that aren't # Returns a list of formulae depended on by this formula that aren't

View File

@ -666,6 +666,29 @@ class FormulaTests < Homebrew::TestCase
assert_equal %w[f1 f4], f5.runtime_dependencies.map(&:name) assert_equal %w[f1 f4], f5.runtime_dependencies.map(&:name)
end end
def test_runtime_dependencies_with_optional_deps_from_tap
tap_loader = mock
tap_loader.stubs(:get_formula).raises(RuntimeError, "tried resolving tap formula")
Formulary.stubs(:loader_for).with("foo/bar/f1", from: nil).returns(tap_loader)
stub_formula_loader formula("f2") { url "f2-1.0" }, "baz/qux/f2"
f3 = formula("f3") do
url "f3-1.0"
depends_on "foo/bar/f1" => :optional
depends_on "baz/qux/f2"
end
# f1 shouldn't be loaded by default.
# If it is, an exception will be raised.
assert_equal %w[baz/qux/f2], f3.runtime_dependencies.map(&:name)
# If --with-f1, f1 should be loaded.
stub_formula_loader formula("f1") { url "f1-1.0" }, "foo/bar/f1"
f3.build = BuildOptions.new(Options.create(%w[--with-f1]), f3.options)
assert_equal %w[foo/bar/f1 baz/qux/f2], f3.runtime_dependencies.map(&:name)
end
def test_to_hash def test_to_hash
f1 = formula("foo") do f1 = formula("foo") do
url "foo-1.0" url "foo-1.0"