Fix dependency equality

This commit is contained in:
Jack Nagel 2014-11-21 16:08:37 -06:00
parent 19c2e91fdc
commit a412b49c2c
6 changed files with 15 additions and 28 deletions

View File

@ -10,7 +10,7 @@ class Dependencies
end end
def <<(o) def <<(o)
@deps << o unless include?(o) @deps << o
self self
end end

View File

@ -20,12 +20,12 @@ class Dependency
end end
def ==(other) def ==(other)
instance_of?(other.class) && name == other.name instance_of?(other.class) && name == other.name && tags == other.tags
end end
alias_method :eql?, :== alias_method :eql?, :==
def hash def hash
name.hash name.hash ^ tags.hash
end end
def to_formula def to_formula
@ -118,12 +118,11 @@ class Dependency
throw(:action, :keep_but_prune_recursive_deps) throw(:action, :keep_but_prune_recursive_deps)
end end
def merge_repeats(deps) def merge_repeats(all)
grouped = deps.group_by(&:name) all.group_by(&:name).map do |name, deps|
dep = deps.first
deps.uniq.map do |dep| tags = deps.map(&:tags).flatten.uniq
tags = grouped.fetch(dep.name).map(&:tags).flatten.uniq dep.class.new(name, tags, dep.env_proc)
dep.class.new(dep.name, tags, dep.env_proc)
end end
end end
end end

View File

@ -12,13 +12,6 @@ class DependenciesTests < Homebrew::TestCase
assert_same @deps, @deps << Dependency.new("foo") assert_same @deps, @deps << Dependency.new("foo")
end 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 def test_preserves_order
hash = { 0 => "foo", 1 => "bar", 2 => "baz" } hash = { 0 => "foo", 1 => "bar", 2 => "baz" }
@deps << Dependency.new(hash[0]) @deps << Dependency.new(hash[0])

View File

@ -47,5 +47,8 @@ class DependencyTests < Homebrew::TestCase
assert_eql foo1, foo2 assert_eql foo1, foo2
refute_equal foo1, bar refute_equal foo1, bar
refute_eql foo1, bar refute_eql foo1, bar
foo3 = Dependency.new("foo", [:build])
refute_equal foo1, foo3
refute_eql foo1, foo3
end end
end end

View File

@ -37,13 +37,6 @@ class DependencyCollectorTests < Homebrew::TestCase
assert_empty Dependency.new('foo').tags assert_empty Dependency.new('foo').tags
end 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 def test_requirement_creation
@d.add :x11 @d.add :x11
assert_instance_of X11Dependency, find_requirement(X11Dependency) assert_instance_of X11Dependency, find_requirement(X11Dependency)

View File

@ -100,16 +100,15 @@ class DependencyExpansionTests < Homebrew::TestCase
end end
def test_keep_dep_but_prune_recursive_deps def test_keep_dep_but_prune_recursive_deps
f = stub(:name => "f", :deps => [ foo = build_dep(:foo, [:build], @bar)
build_dep(:foo, [:build], [@bar]), baz = build_dep(:baz, [:build])
build_dep(:baz, [:build]), f = stub(:name => "f", :deps => [foo, baz])
])
deps = Dependency.expand(f) do |dependent, dep| deps = Dependency.expand(f) do |dependent, dep|
Dependency.keep_but_prune_recursive_deps if dep.build? Dependency.keep_but_prune_recursive_deps if dep.build?
end end
assert_equal [@foo, @baz], deps assert_equal [foo, baz], deps
end end
def test_deps_with_collection_argument def test_deps_with_collection_argument