Merge pull request #15943 from apainintheneck/handle-nil-urls-in-cask-installer
Handle nil cask urls caused by unsupported macOS version
This commit is contained in:
commit
db1267bdff
@ -277,7 +277,7 @@ module Cask
|
|||||||
sha256 json_cask[:sha256]
|
sha256 json_cask[:sha256]
|
||||||
end
|
end
|
||||||
|
|
||||||
url json_cask[:url], **json_cask.fetch(:url_specs, {})
|
url json_cask[:url], **json_cask.fetch(:url_specs, {}) if json_cask[:url].present?
|
||||||
appcast json_cask[:appcast] if json_cask[:appcast].present?
|
appcast json_cask[:appcast] if json_cask[:appcast].present?
|
||||||
json_cask[:name].each do |cask_name|
|
json_cask[:name].each do |cask_name|
|
||||||
name cask_name
|
name cask_name
|
||||||
|
|||||||
@ -24,6 +24,8 @@ module Cask
|
|||||||
|
|
||||||
sig { override.returns(T.nilable(::URL)) }
|
sig { override.returns(T.nilable(::URL)) }
|
||||||
def url
|
def url
|
||||||
|
return if cask.url.nil?
|
||||||
|
|
||||||
@url ||= ::URL.new(cask.url.to_s, cask.url.specs)
|
@url ||= ::URL.new(cask.url.to_s, cask.url.specs)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -64,12 +64,12 @@ module Cask
|
|||||||
odebug "Cask::Installer#fetch"
|
odebug "Cask::Installer#fetch"
|
||||||
|
|
||||||
load_cask_from_source_api! if @cask.loaded_from_api? && @cask.caskfile_only?
|
load_cask_from_source_api! if @cask.loaded_from_api? && @cask.caskfile_only?
|
||||||
|
|
||||||
verify_has_sha if require_sha? && !force?
|
verify_has_sha if require_sha? && !force?
|
||||||
|
check_requirements
|
||||||
|
|
||||||
download(quiet: quiet, timeout: timeout)
|
download(quiet: quiet, timeout: timeout)
|
||||||
|
|
||||||
satisfy_dependencies
|
satisfy_cask_and_formula_dependencies
|
||||||
end
|
end
|
||||||
|
|
||||||
def stage
|
def stage
|
||||||
@ -253,25 +253,19 @@ on_request: true)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: move dependencies to a separate class,
|
def check_requirements
|
||||||
# dependencies should also apply for `brew cask stage`,
|
check_macos_requirements
|
||||||
# override dependencies with `--force` or perhaps `--force-deps`
|
check_arch_requirements
|
||||||
def satisfy_dependencies
|
|
||||||
return unless @cask.depends_on
|
|
||||||
|
|
||||||
macos_dependencies
|
|
||||||
arch_dependencies
|
|
||||||
cask_and_formula_dependencies
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def macos_dependencies
|
def check_macos_requirements
|
||||||
return unless @cask.depends_on.macos
|
return unless @cask.depends_on.macos
|
||||||
return if @cask.depends_on.macos.satisfied?
|
return if @cask.depends_on.macos.satisfied?
|
||||||
|
|
||||||
raise CaskError, @cask.depends_on.macos.message(type: :cask)
|
raise CaskError, @cask.depends_on.macos.message(type: :cask)
|
||||||
end
|
end
|
||||||
|
|
||||||
def arch_dependencies
|
def check_arch_requirements
|
||||||
return if @cask.depends_on.arch.nil?
|
return if @cask.depends_on.arch.nil?
|
||||||
|
|
||||||
@current_arch ||= { type: Hardware::CPU.type, bits: Hardware::CPU.bits }
|
@current_arch ||= { type: Hardware::CPU.type, bits: Hardware::CPU.bits }
|
||||||
@ -286,7 +280,7 @@ on_request: true)
|
|||||||
"but you are running #{@current_arch}."
|
"but you are running #{@current_arch}."
|
||||||
end
|
end
|
||||||
|
|
||||||
def collect_cask_and_formula_dependencies
|
def cask_and_formula_dependencies
|
||||||
return @cask_and_formula_dependencies if @cask_and_formula_dependencies
|
return @cask_and_formula_dependencies if @cask_and_formula_dependencies
|
||||||
|
|
||||||
graph = ::Utils::TopologicalHash.graph_package_dependencies(@cask)
|
graph = ::Utils::TopologicalHash.graph_package_dependencies(@cask)
|
||||||
@ -305,7 +299,7 @@ on_request: true)
|
|||||||
end
|
end
|
||||||
|
|
||||||
def missing_cask_and_formula_dependencies
|
def missing_cask_and_formula_dependencies
|
||||||
collect_cask_and_formula_dependencies.reject do |cask_or_formula|
|
cask_and_formula_dependencies.reject do |cask_or_formula|
|
||||||
installed = if cask_or_formula.respond_to?(:any_version_installed?)
|
installed = if cask_or_formula.respond_to?(:any_version_installed?)
|
||||||
cask_or_formula.any_version_installed?
|
cask_or_formula.any_version_installed?
|
||||||
else
|
else
|
||||||
@ -315,10 +309,10 @@ on_request: true)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def cask_and_formula_dependencies
|
def satisfy_cask_and_formula_dependencies
|
||||||
return if installed_as_dependency?
|
return if installed_as_dependency?
|
||||||
|
|
||||||
formulae_and_casks = collect_cask_and_formula_dependencies
|
formulae_and_casks = cask_and_formula_dependencies
|
||||||
|
|
||||||
return if formulae_and_casks.empty?
|
return if formulae_and_casks.empty?
|
||||||
|
|
||||||
|
|||||||
@ -167,6 +167,11 @@ module Homebrew
|
|||||||
SimulateSystem.with os: os, arch: arch do
|
SimulateSystem.with os: os, arch: arch do
|
||||||
cask = Cask::CaskLoader.load(ref)
|
cask = Cask::CaskLoader.load(ref)
|
||||||
|
|
||||||
|
if cask.depends_on.macos&.satisfied? == false
|
||||||
|
opoo "#{cask.token}: #{cask.depends_on.macos.message(type: :cask)}"
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
quarantine = args.quarantine?
|
quarantine = args.quarantine?
|
||||||
quarantine = true if quarantine.nil?
|
quarantine = true if quarantine.nil?
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user