From f4b15e95ac12c8cf280f842132d7b4bb467ac789 Mon Sep 17 00:00:00 2001 From: apainintheneck Date: Mon, 4 Sep 2023 14:46:05 -0700 Subject: [PATCH] cmd/fetch & cmd/audit: handle unsupported os/arch combos It's possible for casks to only run on certain os/arch combinations but we don't check for them in the fetch and audit commands. At first, I tried to check if the macos version was satisfied in a previous PR but that doesn't work correctly because MacOSRequirement and ArchRequirement don't respect SimulateSystem. Instead I'm just checking to see if the url stanza is defined for each os/arch combination and skipping those casks where it ends up being nil. This is kind of brute forcing it but should work. --- Library/Homebrew/cmd/fetch.rb | 4 ++-- Library/Homebrew/dev-cmd/audit.rb | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index 3179932a26..4ba8df003f 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -166,8 +166,8 @@ 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)}" + if cask.url.nil? + opoo "Cask #{cask} is not supported on os #{os} and arch #{arch}" next end diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index ee11cb649e..698bbd309f 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -242,10 +242,17 @@ module Homebrew next [] if os == :linux SimulateSystem.with os: os, arch: arch do + simulated_cask = Cask::CaskLoader.load(path) + + if simulated_cask.url.nil? + opoo "Cask #{cask} is not supported on os #{os} and arch #{arch}" + next [] + end + odebug "Auditing Cask #{cask} on os #{os} and arch #{arch}" Cask::Auditor.audit( - Cask::CaskLoader.load(path), + simulated_cask, # For switches, we add `|| nil` so that `nil` will be passed # instead of `false` if they aren't set. # This way, we can distinguish between "not set" and "set to false".