Better support source builds under API mode
This commit is contained in:
parent
33681f90e3
commit
2055792791
@ -1954,6 +1954,11 @@ class Formula
|
|||||||
ohai "#{verb} #{name} from #{tap}"
|
ohai "#{verb} #{name} from #{tap}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# @private
|
||||||
|
def tap_git_head
|
||||||
|
tap&.git_head
|
||||||
|
end
|
||||||
|
|
||||||
# @private
|
# @private
|
||||||
delegate env: :"self.class"
|
delegate env: :"self.class"
|
||||||
|
|
||||||
@ -2125,7 +2130,7 @@ class Formula
|
|||||||
"disabled" => disabled?,
|
"disabled" => disabled?,
|
||||||
"disable_date" => disable_date,
|
"disable_date" => disable_date,
|
||||||
"disable_reason" => disable_reason,
|
"disable_reason" => disable_reason,
|
||||||
"tap_git_head" => tap&.git_head,
|
"tap_git_head" => tap_git_head,
|
||||||
}
|
}
|
||||||
|
|
||||||
if stable
|
if stable
|
||||||
|
|||||||
@ -1181,14 +1181,12 @@ class FormulaInstaller
|
|||||||
|
|
||||||
if pour_bottle?(output_warning: true)
|
if pour_bottle?(output_warning: true)
|
||||||
formula.fetch_bottle_tab
|
formula.fetch_bottle_tab
|
||||||
elsif formula.core_formula? && !formula.tap.installed? && Homebrew::EnvConfig.install_from_api?
|
elsif formula.core_formula? && Homebrew::EnvConfig.install_from_api?
|
||||||
odie <<~EOS
|
url = "https://raw.githubusercontent.com/#{formula.tap.full_name}/#{formula.tap_git_head}/Formula/#{formula.name}.rb"
|
||||||
Unable to build #{formula.name} from source while Homebrew/homebrew-core is
|
@formula = Formulary.factory(url, formula.active_spec_sym,
|
||||||
untapped and HOMEBREW_NO_INSTALL_FROM_API is unset! To resolve please run:
|
alias_path: formula.alias_path,
|
||||||
export HOMEBREW_NO_INSTALL_FROM_API=1
|
flags: formula.class.build_flags,
|
||||||
brew tap Homebrew/core
|
from: :formula_installer)
|
||||||
and retry.
|
|
||||||
EOS
|
|
||||||
else
|
else
|
||||||
formula.fetch_patches
|
formula.fetch_patches
|
||||||
formula.resources.each(&:fetch)
|
formula.resources.each(&:fetch)
|
||||||
|
|||||||
@ -220,6 +220,11 @@ module Formulary
|
|||||||
def caveats
|
def caveats
|
||||||
self.class.instance_variable_get(:@caveats_string)
|
self.class.instance_variable_get(:@caveats_string)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@tap_git_head_string = json_formula["tap_git_head"]
|
||||||
|
def tap_git_head
|
||||||
|
self.class.instance_variable_get(:@tap_git_head_string)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
klass.loaded_from_api = true
|
klass.loaded_from_api = true
|
||||||
@ -395,24 +400,27 @@ module Formulary
|
|||||||
|
|
||||||
attr_reader :url
|
attr_reader :url
|
||||||
|
|
||||||
sig { params(url: T.any(URI::Generic, String)).void }
|
sig { params(url: T.any(URI::Generic, String), from: T.nilable(Symbol)).void }
|
||||||
def initialize(url)
|
def initialize(url, from: nil)
|
||||||
@url = url
|
@url = url
|
||||||
|
@from = from
|
||||||
uri = URI(url)
|
uri = URI(url)
|
||||||
formula = File.basename(uri.path, ".rb")
|
formula = File.basename(uri.path, ".rb")
|
||||||
super formula, HOMEBREW_CACHE_FORMULA/File.basename(uri.path)
|
super formula, HOMEBREW_CACHE_FORMULA/File.basename(uri.path)
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_file(flags:, ignore_errors:)
|
def load_file(flags:, ignore_errors:)
|
||||||
if %r{githubusercontent.com/[\w-]+/[\w-]+/[a-f0-9]{40}(?:/Formula)?/(?<formula_name>[\w+-.@]+).rb} =~ url
|
if @from != :formula_installer
|
||||||
raise UnsupportedInstallationMethod,
|
if %r{githubusercontent.com/[\w-]+/[\w-]+/[a-f0-9]{40}(?:/Formula)?/(?<formula_name>[\w+-.@]+).rb} =~ url
|
||||||
"Installation of #{formula_name} from a GitHub commit URL is unsupported! " \
|
raise UnsupportedInstallationMethod,
|
||||||
"`brew extract #{formula_name}` to a stable tap on GitHub instead."
|
"Installation of #{formula_name} from a GitHub commit URL is unsupported! " \
|
||||||
elsif url.match?(%r{^(https?|ftp)://})
|
"`brew extract #{formula_name}` to a stable tap on GitHub instead."
|
||||||
raise UnsupportedInstallationMethod,
|
elsif url.match?(%r{^(https?|ftp)://})
|
||||||
"Non-checksummed download of #{name} formula file from an arbitrary URL is unsupported! " \
|
raise UnsupportedInstallationMethod,
|
||||||
"`brew extract` or `brew create` and `brew tap-new` to create a formula file in a tap " \
|
"Non-checksummed download of #{name} formula file from an arbitrary URL is unsupported! " \
|
||||||
"on GitHub instead."
|
"`brew extract` or `brew create` and `brew tap-new` to create a formula file in a tap " \
|
||||||
|
"on GitHub instead."
|
||||||
|
end
|
||||||
end
|
end
|
||||||
HOMEBREW_CACHE_FORMULA.mkpath
|
HOMEBREW_CACHE_FORMULA.mkpath
|
||||||
FileUtils.rm_f(path)
|
FileUtils.rm_f(path)
|
||||||
@ -664,7 +672,7 @@ module Formulary
|
|||||||
when HOMEBREW_BOTTLES_EXTNAME_REGEX
|
when HOMEBREW_BOTTLES_EXTNAME_REGEX
|
||||||
return BottleLoader.new(ref)
|
return BottleLoader.new(ref)
|
||||||
when URL_START_REGEX
|
when URL_START_REGEX
|
||||||
return FromUrlLoader.new(ref)
|
return FromUrlLoader.new(ref, from: from)
|
||||||
when HOMEBREW_TAP_FORMULA_REGEX
|
when HOMEBREW_TAP_FORMULA_REGEX
|
||||||
if ref.start_with?("homebrew/core/") && Homebrew::EnvConfig.install_from_api?
|
if ref.start_with?("homebrew/core/") && Homebrew::EnvConfig.install_from_api?
|
||||||
name = ref.split("/", 3).last
|
name = ref.split("/", 3).last
|
||||||
|
|||||||
@ -113,15 +113,6 @@ module Homebrew
|
|||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
||||||
if head && Homebrew::EnvConfig.install_from_api?
|
|
||||||
raise UsageError, <<~EOS
|
|
||||||
--HEAD is not supported with HOMEBREW_NO_INSTALL_FROM_API unset! To resolve please run:
|
|
||||||
export HOMEBREW_NO_INSTALL_FROM_API=1
|
|
||||||
brew tap Homebrew/core
|
|
||||||
and retry this command.
|
|
||||||
EOS
|
|
||||||
end
|
|
||||||
|
|
||||||
# --HEAD, fail with no head defined
|
# --HEAD, fail with no head defined
|
||||||
odie "No head is defined for #{f.full_name}" if head && f.head.nil?
|
odie "No head is defined for #{f.full_name}" if head && f.head.nil?
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user