keg: update installed dependency resolution

Closes #1525. (See there for a motivation for this change.)
This commit is contained in:
Alyssa Ross 2016-11-17 16:18:50 +00:00
parent 81b40f6564
commit 05b85a7bef
2 changed files with 13 additions and 6 deletions

View File

@ -385,6 +385,7 @@ class Keg
end end
def installed_dependents def installed_dependents
return [] unless linked?
tap = Tab.for_keg(self).source["tap"] tap = Tab.for_keg(self).source["tap"]
Keg.all.select do |keg| Keg.all.select do |keg|
tab = Tab.for_keg(keg) tab = Tab.for_keg(keg)
@ -394,12 +395,10 @@ class Keg
# in case of conflicts between formulae from different taps. # in case of conflicts between formulae from different taps.
begin begin
dep_formula = Formulary.factory(dep["full_name"]) dep_formula = Formulary.factory(dep["full_name"])
next false unless dep_formula == to_formula dep_formula == to_formula
rescue FormulaUnavailableError rescue FormulaUnavailableError
next false unless "#{tap}/#{name}" == dep["full_name"] next "#{tap}/#{name}" == dep["full_name"]
end end
dep["version"] == version.to_s
end end
end end
end end

View File

@ -340,6 +340,7 @@ class InstalledDependantsTests < LinkTestCase
def setup def setup
super super
@dependent = setup_test_keg("bar", "1.0") @dependent = setup_test_keg("bar", "1.0")
@keg.link
end end
def alter_tab(keg = @dependent) def alter_tab(keg = @dependent)
@ -442,8 +443,8 @@ class InstalledDependantsTests < LinkTestCase
def test_same_name_different_version_in_tab def test_same_name_different_version_in_tab
dependencies [{ "full_name" => "foo", "version" => "1.1" }] dependencies [{ "full_name" => "foo", "version" => "1.1" }]
assert_empty @keg.installed_dependents assert_equal [@dependent], @keg.installed_dependents
assert_nil Keg.find_some_installed_dependents([@keg]) assert_equal [[@keg], ["bar 1.0"]], Keg.find_some_installed_dependents([@keg])
end end
def test_different_name_same_version_in_tab def test_different_name_same_version_in_tab
@ -465,4 +466,11 @@ class InstalledDependantsTests < LinkTestCase
assert_empty @keg.installed_dependents assert_empty @keg.installed_dependents
assert_equal [[@keg], ["bar"]], Keg.find_some_installed_dependents([@keg]) assert_equal [[@keg], ["bar"]], Keg.find_some_installed_dependents([@keg])
end end
def test_unlinked
@keg.unlink
dependencies [{ "full_name" => "foo", "version" => "1.0" }]
assert_empty @keg.installed_dependents
assert_nil Keg.find_some_installed_dependents([@keg])
end
end end