Merge pull request #12350 from Rylan12/install-from-api-core-deps

Handle `depends_on "homebrew/core/foo"` for `HOMEBREW_INSTALL_FROM_API`
This commit is contained in:
Rylan Polster 2021-10-31 00:57:13 -04:00 committed by GitHub
commit 9daf5e2d28
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 0 deletions

View File

@ -212,6 +212,11 @@ class FormulaInstaller
def verify_deps_exist def verify_deps_exist
begin begin
compute_dependencies compute_dependencies
rescue CoreTapFormulaUnavailableError => e
raise unless Homebrew::API::Bottle.available? e.name
Homebrew::API::Bottle.fetch_bottles(e.name)
retry
rescue TapFormulaUnavailableError => e rescue TapFormulaUnavailableError => e
raise if e.tap.installed? raise if e.tap.installed?

View File

@ -343,6 +343,10 @@ module Formulary
rescue FormulaClassUnavailableError => e rescue FormulaClassUnavailableError => e
raise TapFormulaClassUnavailableError.new(tap, name, e.path, e.class_name, e.class_list), "", e.backtrace raise TapFormulaClassUnavailableError.new(tap, name, e.path, e.class_name, e.class_list), "", e.backtrace
rescue FormulaUnavailableError => e rescue FormulaUnavailableError => e
if tap.core_tap? && Homebrew::EnvConfig.install_from_api?
raise CoreTapFormulaUnavailableError.new(name), "", e.backtrace
end
raise TapFormulaUnavailableError.new(tap, name), "", e.backtrace raise TapFormulaUnavailableError.new(tap, name), "", e.backtrace
end end
@ -533,6 +537,13 @@ module Formulary
when URL_START_REGEX when URL_START_REGEX
return FromUrlLoader.new(ref) return FromUrlLoader.new(ref)
when HOMEBREW_TAP_FORMULA_REGEX when HOMEBREW_TAP_FORMULA_REGEX
# If `homebrew/core` is specified and not installed, check whether the formula is already installed.
if ref.start_with?("homebrew/core/") && !CoreTap.instance.installed? && Homebrew::EnvConfig.install_from_api?
name = ref.split("/", 3).last
possible_keg_formula = Pathname.new("#{HOMEBREW_PREFIX}/opt/#{name}/.brew/#{name}.rb")
return FormulaLoader.new(name, possible_keg_formula) if possible_keg_formula.file?
end
return TapLoader.new(ref, from: from) return TapLoader.new(ref, from: from)
end end