Merge pull request #15927 from MikeMcQuaid/liberal_upgrade_bottle_version
Make formula upgrades more liberal based on bottle
This commit is contained in:
commit
b53508897b
@ -46,14 +46,23 @@ class Dependency
|
|||||||
formula
|
formula
|
||||||
end
|
end
|
||||||
|
|
||||||
def installed?
|
def installed?(minimum_version: nil)
|
||||||
to_formula.latest_version_installed?
|
formula = begin
|
||||||
|
to_formula
|
||||||
rescue FormulaUnavailableError
|
rescue FormulaUnavailableError
|
||||||
false
|
nil
|
||||||
|
end
|
||||||
|
return false unless formula
|
||||||
|
|
||||||
|
if minimum_version.present?
|
||||||
|
formula.any_version_installed? && (formula.any_installed_version.version >= minimum_version)
|
||||||
|
else
|
||||||
|
formula.latest_version_installed?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def satisfied?(inherited_options = [])
|
def satisfied?(inherited_options = [], minimum_version: nil)
|
||||||
installed? && missing_options(inherited_options).empty?
|
installed?(minimum_version: minimum_version) && missing_options(inherited_options).empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
def missing_options(inherited_options)
|
def missing_options(inherited_options)
|
||||||
@ -239,8 +248,8 @@ class UsesFromMacOSDependency < Dependency
|
|||||||
[name, tags, bounds].hash
|
[name, tags, bounds].hash
|
||||||
end
|
end
|
||||||
|
|
||||||
def installed?
|
def installed?(minimum_version: nil)
|
||||||
use_macos_install? || super
|
use_macos_install? || super(minimum_version: minimum_version)
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { returns(T::Boolean) }
|
sig { returns(T::Boolean) }
|
||||||
|
|||||||
@ -96,6 +96,7 @@ class FormulaInstaller
|
|||||||
@requirement_messages = []
|
@requirement_messages = []
|
||||||
@poured_bottle = false
|
@poured_bottle = false
|
||||||
@start_time = nil
|
@start_time = nil
|
||||||
|
@bottle_tab_runtime_dependencies = {}
|
||||||
|
|
||||||
# Take the original formula instance, which might have been swapped from an API instance to a source instance
|
# Take the original formula instance, which might have been swapped from an API instance to a source instance
|
||||||
@formula = previously_fetched_formula if previously_fetched_formula
|
@formula = previously_fetched_formula if previously_fetched_formula
|
||||||
@ -218,6 +219,7 @@ class FormulaInstaller
|
|||||||
end
|
end
|
||||||
|
|
||||||
Tab.clear_cache
|
Tab.clear_cache
|
||||||
|
|
||||||
verify_deps_exist unless ignore_deps?
|
verify_deps_exist unless ignore_deps?
|
||||||
forbidden_license_check
|
forbidden_license_check
|
||||||
|
|
||||||
@ -518,6 +520,9 @@ on_request: installed_on_request?, options: options)
|
|||||||
def compute_dependencies(use_cache: true)
|
def compute_dependencies(use_cache: true)
|
||||||
@compute_dependencies = nil unless use_cache
|
@compute_dependencies = nil unless use_cache
|
||||||
@compute_dependencies ||= begin
|
@compute_dependencies ||= begin
|
||||||
|
# Needs to be done before expand_dependencies
|
||||||
|
fetch_bottle_tab if pour_bottle?
|
||||||
|
|
||||||
check_requirements(expand_requirements)
|
check_requirements(expand_requirements)
|
||||||
expand_dependencies
|
expand_dependencies
|
||||||
end
|
end
|
||||||
@ -610,9 +615,11 @@ on_request: installed_on_request?, options: options)
|
|||||||
keep_build_test ||= dep.build? && !install_bottle_for?(dependent, build) &&
|
keep_build_test ||= dep.build? && !install_bottle_for?(dependent, build) &&
|
||||||
(formula.head? || !dependent.latest_version_installed?)
|
(formula.head? || !dependent.latest_version_installed?)
|
||||||
|
|
||||||
|
bottle_runtime_version = @bottle_tab_runtime_dependencies.dig(dep.name, "version")
|
||||||
|
|
||||||
if dep.prune_from_option?(build) || ((dep.build? || dep.test?) && !keep_build_test)
|
if dep.prune_from_option?(build) || ((dep.build? || dep.test?) && !keep_build_test)
|
||||||
Dependency.prune
|
Dependency.prune
|
||||||
elsif dep.satisfied?(inherited_options[dep.name])
|
elsif dep.satisfied?(inherited_options[dep.name], minimum_version: bottle_runtime_version)
|
||||||
Dependency.skip
|
Dependency.skip
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -1197,6 +1204,20 @@ on_request: installed_on_request?, options: options)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
sig { void }
|
||||||
|
def fetch_bottle_tab
|
||||||
|
@fetch_bottle_tab ||= begin
|
||||||
|
formula.fetch_bottle_tab
|
||||||
|
@bottle_tab_runtime_dependencies = formula.bottle_tab_attributes
|
||||||
|
.fetch("runtime_dependencies", [])
|
||||||
|
.index_by { |dep| dep["full_name"] }
|
||||||
|
.freeze
|
||||||
|
true
|
||||||
|
rescue DownloadError
|
||||||
|
@fetch_bottle_tab = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
sig { void }
|
sig { void }
|
||||||
def fetch
|
def fetch
|
||||||
return if previously_fetched_formula
|
return if previously_fetched_formula
|
||||||
@ -1208,7 +1229,7 @@ on_request: installed_on_request?, options: options)
|
|||||||
oh1 "Fetching #{Formatter.identifier(formula.full_name)}".strip
|
oh1 "Fetching #{Formatter.identifier(formula.full_name)}".strip
|
||||||
|
|
||||||
if pour_bottle?(output_warning: true)
|
if pour_bottle?(output_warning: true)
|
||||||
formula.fetch_bottle_tab
|
fetch_bottle_tab
|
||||||
else
|
else
|
||||||
@formula = Homebrew::API::Formula.source_download(formula) if formula.loaded_from_api?
|
@formula = Homebrew::API::Formula.source_download(formula) if formula.loaded_from_api?
|
||||||
|
|
||||||
|
|||||||
@ -271,6 +271,7 @@ module Homebrew
|
|||||||
|
|
||||||
already_broken_dependents = check_broken_dependents(installed_formulae)
|
already_broken_dependents = check_broken_dependents(installed_formulae)
|
||||||
|
|
||||||
|
# TODO: this should be refactored to use FormulaInstaller new logic
|
||||||
outdated_dependents =
|
outdated_dependents =
|
||||||
installed_formulae.flat_map(&:runtime_installed_formula_dependents)
|
installed_formulae.flat_map(&:runtime_installed_formula_dependents)
|
||||||
.uniq
|
.uniq
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user