diff --git a/Library/Homebrew/cask/cask_loader.rb b/Library/Homebrew/cask/cask_loader.rb index c343f491db..7385337812 100644 --- a/Library/Homebrew/cask/cask_loader.rb +++ b/Library/Homebrew/cask/cask_loader.rb @@ -277,7 +277,7 @@ module Cask sha256 json_cask[:sha256] 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? json_cask[:name].each do |cask_name| name cask_name diff --git a/Library/Homebrew/cask/download.rb b/Library/Homebrew/cask/download.rb index 976e440dee..6912edceda 100644 --- a/Library/Homebrew/cask/download.rb +++ b/Library/Homebrew/cask/download.rb @@ -24,6 +24,8 @@ module Cask sig { override.returns(T.nilable(::URL)) } def url + return if cask.url.nil? + @url ||= ::URL.new(cask.url.to_s, cask.url.specs) end diff --git a/Library/Homebrew/cask/installer.rb b/Library/Homebrew/cask/installer.rb index 5c27a9ed29..2bee5d03aa 100644 --- a/Library/Homebrew/cask/installer.rb +++ b/Library/Homebrew/cask/installer.rb @@ -64,12 +64,12 @@ module Cask odebug "Cask::Installer#fetch" load_cask_from_source_api! if @cask.loaded_from_api? && @cask.caskfile_only? - verify_has_sha if require_sha? && !force? + check_requirements download(quiet: quiet, timeout: timeout) - satisfy_dependencies + satisfy_cask_and_formula_dependencies end def stage @@ -253,25 +253,19 @@ on_request: true) end end - # TODO: move dependencies to a separate class, - # dependencies should also apply for `brew cask stage`, - # override dependencies with `--force` or perhaps `--force-deps` - def satisfy_dependencies - return unless @cask.depends_on - - macos_dependencies - arch_dependencies - cask_and_formula_dependencies + def check_requirements + check_macos_requirements + check_arch_requirements end - def macos_dependencies + def check_macos_requirements return unless @cask.depends_on.macos return if @cask.depends_on.macos.satisfied? raise CaskError, @cask.depends_on.macos.message(type: :cask) end - def arch_dependencies + def check_arch_requirements return if @cask.depends_on.arch.nil? @current_arch ||= { type: Hardware::CPU.type, bits: Hardware::CPU.bits } @@ -286,7 +280,7 @@ on_request: true) "but you are running #{@current_arch}." end - def collect_cask_and_formula_dependencies + def cask_and_formula_dependencies return @cask_and_formula_dependencies if @cask_and_formula_dependencies graph = ::Utils::TopologicalHash.graph_package_dependencies(@cask) @@ -305,7 +299,7 @@ on_request: true) end 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?) cask_or_formula.any_version_installed? else @@ -315,10 +309,10 @@ on_request: true) end end - def cask_and_formula_dependencies + def satisfy_cask_and_formula_dependencies 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? diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index 569239ad19..de6751ad6c 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -167,6 +167,11 @@ module Homebrew SimulateSystem.with os: os, arch: arch do 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 = true if quarantine.nil?