aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/dependency.rb14
-rw-r--r--Library/Homebrew/test/test_dependency_expansion.rb12
2 files changed, 22 insertions, 4 deletions
diff --git a/Library/Homebrew/dependency.rb b/Library/Homebrew/dependency.rb
index f0ad27cf0..d5ae57667 100644
--- a/Library/Homebrew/dependency.rb
+++ b/Library/Homebrew/dependency.rb
@@ -70,13 +70,15 @@ class Dependency
# The default filter, which is applied when a block is not given, omits
# optionals and recommendeds based on what the dependent has asked for.
def expand(dependent, &block)
- dependent.deps.map do |dep|
+ deps = dependent.deps.map do |dep|
if prune?(dependent, dep, &block)
next
else
expand(dep.to_formula, &block) << dep
end
- end.flatten.compact.uniq
+ end.flatten.compact
+
+ merge_repeats(deps)
end
def prune?(dependent, dep, &block)
@@ -93,5 +95,13 @@ class Dependency
def prune
throw(:prune, true)
end
+
+ def merge_repeats(deps)
+ grouped = deps.group_by(&:name)
+
+ deps.uniq.map do |dep|
+ new(dep.name, grouped.fetch(dep.name).map(&:tags).flatten)
+ end
+ end
end
end
diff --git a/Library/Homebrew/test/test_dependency_expansion.rb b/Library/Homebrew/test/test_dependency_expansion.rb
index 84df7c88c..c3fe4ce18 100644
--- a/Library/Homebrew/test/test_dependency_expansion.rb
+++ b/Library/Homebrew/test/test_dependency_expansion.rb
@@ -2,8 +2,8 @@ require 'testing_env'
require 'dependency'
class DependencyExpansionTests < Test::Unit::TestCase
- def build_dep(name, deps=[])
- dep = Dependency.new(name.to_s)
+ def build_dep(name, tags=[], deps=[])
+ dep = Dependency.new(name.to_s, tags)
dep.stubs(:to_formula).returns(stub(:deps => deps))
dep
end
@@ -58,4 +58,12 @@ class DependencyExpansionTests < Test::Unit::TestCase
@f = stub(:deps => @deps, :build => stub(:with? => true))
assert_equal @deps, Dependency.expand(@f)
end
+
+ def test_merges_repeated_deps_with_differing_options
+ @foo2 = build_dep(:foo, ['option'])
+ @baz2 = build_dep(:baz, ['option'])
+ @deps << @foo2 << @baz2
+ deps = [@foo2, @bar, @baz2, @qux]
+ assert_equal deps, Dependency.expand(@f)
+ end
end