From a412b49c2ce23d0b917f5c08e0cb453a042c1b26 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Fri, 21 Nov 2014 16:08:37 -0600 Subject: [PATCH] Fix dependency equality --- Library/Homebrew/dependencies.rb | 2 +- Library/Homebrew/dependency.rb | 15 +++++++-------- Library/Homebrew/test/test_dependencies.rb | 7 ------- Library/Homebrew/test/test_dependency.rb | 3 +++ .../Homebrew/test/test_dependency_collector.rb | 7 ------- .../Homebrew/test/test_dependency_expansion.rb | 9 ++++----- 6 files changed, 15 insertions(+), 28 deletions(-) diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index bcfba04783..402ad9c20a 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -10,7 +10,7 @@ class Dependencies end def <<(o) - @deps << o unless include?(o) + @deps << o self end diff --git a/Library/Homebrew/dependency.rb b/Library/Homebrew/dependency.rb index ebfefc4b53..7fd785343c 100644 --- a/Library/Homebrew/dependency.rb +++ b/Library/Homebrew/dependency.rb @@ -20,12 +20,12 @@ class Dependency end def ==(other) - instance_of?(other.class) && name == other.name + instance_of?(other.class) && name == other.name && tags == other.tags end alias_method :eql?, :== def hash - name.hash + name.hash ^ tags.hash end def to_formula @@ -118,12 +118,11 @@ class Dependency throw(:action, :keep_but_prune_recursive_deps) end - def merge_repeats(deps) - grouped = deps.group_by(&:name) - - deps.uniq.map do |dep| - tags = grouped.fetch(dep.name).map(&:tags).flatten.uniq - dep.class.new(dep.name, tags, dep.env_proc) + def merge_repeats(all) + all.group_by(&:name).map do |name, deps| + dep = deps.first + tags = deps.map(&:tags).flatten.uniq + dep.class.new(name, tags, dep.env_proc) end end end diff --git a/Library/Homebrew/test/test_dependencies.rb b/Library/Homebrew/test/test_dependencies.rb index a83e7c89ec..1c64e26e8a 100644 --- a/Library/Homebrew/test/test_dependencies.rb +++ b/Library/Homebrew/test/test_dependencies.rb @@ -12,13 +12,6 @@ class DependenciesTests < Homebrew::TestCase assert_same @deps, @deps << Dependency.new("foo") end - def test_no_duplicate_deps - @deps << Dependency.new("foo") - @deps << Dependency.new("foo", [:build]) - @deps << Dependency.new("foo", [:build]) - assert_equal 1, @deps.count - end - def test_preserves_order hash = { 0 => "foo", 1 => "bar", 2 => "baz" } @deps << Dependency.new(hash[0]) diff --git a/Library/Homebrew/test/test_dependency.rb b/Library/Homebrew/test/test_dependency.rb index d0806e4b7e..6f9038eaec 100644 --- a/Library/Homebrew/test/test_dependency.rb +++ b/Library/Homebrew/test/test_dependency.rb @@ -47,5 +47,8 @@ class DependencyTests < Homebrew::TestCase assert_eql foo1, foo2 refute_equal foo1, bar refute_eql foo1, bar + foo3 = Dependency.new("foo", [:build]) + refute_equal foo1, foo3 + refute_eql foo1, foo3 end end diff --git a/Library/Homebrew/test/test_dependency_collector.rb b/Library/Homebrew/test/test_dependency_collector.rb index edf8316114..6700a97c81 100644 --- a/Library/Homebrew/test/test_dependency_collector.rb +++ b/Library/Homebrew/test/test_dependency_collector.rb @@ -37,13 +37,6 @@ class DependencyCollectorTests < Homebrew::TestCase assert_empty Dependency.new('foo').tags end - def test_no_duplicate_dependencies - @d.add 'foo' - @d.add 'foo' => :build - assert_equal 1, @d.deps.count - assert_empty find_dependency("foo").tags - end - def test_requirement_creation @d.add :x11 assert_instance_of X11Dependency, find_requirement(X11Dependency) diff --git a/Library/Homebrew/test/test_dependency_expansion.rb b/Library/Homebrew/test/test_dependency_expansion.rb index 194aa95239..b653dc1bb6 100644 --- a/Library/Homebrew/test/test_dependency_expansion.rb +++ b/Library/Homebrew/test/test_dependency_expansion.rb @@ -100,16 +100,15 @@ class DependencyExpansionTests < Homebrew::TestCase end def test_keep_dep_but_prune_recursive_deps - f = stub(:name => "f", :deps => [ - build_dep(:foo, [:build], [@bar]), - build_dep(:baz, [:build]), - ]) + foo = build_dep(:foo, [:build], @bar) + baz = build_dep(:baz, [:build]) + f = stub(:name => "f", :deps => [foo, baz]) deps = Dependency.expand(f) do |dependent, dep| Dependency.keep_but_prune_recursive_deps if dep.build? end - assert_equal [@foo, @baz], deps + assert_equal [foo, baz], deps end def test_deps_with_collection_argument