@@ -1702,14 +1702,15 @@ def outdated_kegs(fetch_head: false)
17021702 Formula . cache [ :outdated_kegs ] [ cache_key ] ||= begin
17031703 all_kegs = [ ]
17041704 current_version = T . let ( false , T ::Boolean )
1705+ latest = latest_formula
17051706
17061707 installed_kegs . each do |keg |
17071708 all_kegs << keg
17081709 version = keg . version
17091710 next if version . head?
17101711
1711- next if version_scheme > keg . version_scheme && pkg_version != version
1712- next if version_scheme == keg . version_scheme && pkg_version > version
1712+ next if latest . version_scheme > keg . version_scheme && latest . pkg_version != version
1713+ next if latest . version_scheme == keg . version_scheme && latest . pkg_version > version
17131714
17141715 # don't consider this keg current if there's a newer formula available
17151716 next if follow_installed_alias? && new_formula_available?
@@ -1767,7 +1768,7 @@ def alias_changed?
17671768 # Otherwise, return self.
17681769 sig { returns ( Formula ) }
17691770 def latest_formula
1770- installed_alias_target_changed? ? T . must ( current_installed_alias_target ) : self
1771+ installed_alias_target_changed? ? T . must ( current_installed_alias_target ) : Formulary . factory ( name )
17711772 end
17721773
17731774 sig { returns ( T ::Array [ Formula ] ) }
@@ -2478,23 +2479,28 @@ def any_installed_version
24782479 # @api internal
24792480 sig { params ( read_from_tab : T ::Boolean , undeclared : T ::Boolean ) . returns ( T ::Array [ Dependency ] ) }
24802481 def runtime_dependencies ( read_from_tab : true , undeclared : true )
2481- deps = if read_from_tab && undeclared &&
2482- ( tab_deps = any_installed_keg &.runtime_dependencies )
2483- tab_deps . filter_map do |d |
2484- full_name = d [ "full_name" ]
2485- next unless full_name
2482+ cache_key = "#{ full_name } -#{ read_from_tab } -#{ undeclared } "
2483+
2484+ Formula . cache [ :runtime_dependencies ] ||= { }
2485+ Formula . cache [ :runtime_dependencies ] [ cache_key ] ||= begin
2486+ deps = if read_from_tab && undeclared &&
2487+ ( tab_deps = any_installed_keg &.runtime_dependencies )
2488+ tab_deps . filter_map do |d |
2489+ full_name = d [ "full_name" ]
2490+ next unless full_name
24862491
2487- Dependency . new full_name
2492+ Dependency . new full_name
2493+ end
24882494 end
2495+ begin
2496+ deps ||= declared_runtime_dependencies unless undeclared
2497+ deps ||= ( declared_runtime_dependencies | undeclared_runtime_dependencies )
2498+ rescue FormulaUnavailableError
2499+ onoe "Could not get runtime dependencies from #{ path } !"
2500+ deps ||= [ ]
2501+ end
2502+ deps
24892503 end
2490- begin
2491- deps ||= declared_runtime_dependencies unless undeclared
2492- deps ||= ( declared_runtime_dependencies | undeclared_runtime_dependencies )
2493- rescue FormulaUnavailableError
2494- onoe "Could not get runtime dependencies from #{ path } !"
2495- deps ||= [ ]
2496- end
2497- deps
24982504 end
24992505
25002506 # Returns a list of {Formula} objects that are required at runtime.
@@ -2513,6 +2519,22 @@ def runtime_formula_dependencies(read_from_tab: true, undeclared: true)
25132519 end
25142520 end
25152521
2522+ # Returns a list of installed {Formula} objects that are required at runtime.
2523+ sig { params ( read_from_tab : T ::Boolean , undeclared : T ::Boolean ) . returns ( T ::Array [ Formula ] ) }
2524+ def installed_runtime_formula_dependencies ( read_from_tab : true , undeclared : true )
2525+ cache_key = "#{ full_name } -#{ read_from_tab } -#{ undeclared } "
2526+
2527+ Formula . cache [ :installed_runtime_formula_dependencies ] ||= { }
2528+ Formula . cache [ :installed_runtime_formula_dependencies ] [ cache_key ] ||= runtime_dependencies (
2529+ read_from_tab :,
2530+ undeclared :,
2531+ ) . filter_map do |d |
2532+ d . to_installed_formula
2533+ rescue FormulaUnavailableError
2534+ nil
2535+ end
2536+ end
2537+
25162538 sig { returns ( T ::Array [ Formula ] ) }
25172539 def runtime_installed_formula_dependents
25182540 # `any_installed_keg` and `runtime_dependencies` `select`s ensure
@@ -2523,7 +2545,7 @@ def runtime_installed_formula_dependents
25232545 . select ( &:any_installed_keg )
25242546 . select ( &:runtime_dependencies )
25252547 . select do |f |
2526- f . runtime_formula_dependencies . any? do |dep |
2548+ f . installed_runtime_formula_dependencies . any? do |dep |
25272549 full_name == dep . full_name
25282550 rescue
25292551 name == dep . name
@@ -2533,10 +2555,10 @@ def runtime_installed_formula_dependents
25332555
25342556 # Returns a list of formulae depended on by this formula that aren't
25352557 # installed.
2536- sig { params ( hide : T ::Array [ String ] ) . returns ( T ::Array [ Formula ] ) }
2558+ sig { params ( hide : T ::Array [ String ] ) . returns ( T ::Array [ Dependency ] ) }
25372559 def missing_dependencies ( hide : [ ] )
2538- runtime_formula_dependencies . select do |f |
2539- hide . include? ( f . name ) || f . installed_prefixes . empty ?
2560+ runtime_dependencies ( read_from_tab : true , undeclared : true ) . select do |f |
2561+ hide . include? ( f . name ) || ! f . installed ?
25402562 end
25412563 # If we're still getting unavailable formulae at this stage the best we can
25422564 # do is just return no results.
0 commit comments