From 5a674c232f156ff6a66e78594b8c1167c45c817a Mon Sep 17 00:00:00 2001 From: apainintheneck Date: Thu, 21 Dec 2023 21:39:58 -0800 Subject: [PATCH 1/2] Fix Cask::Cask.all bug We were only loading casks from files with this command which, of course, didn't work for casks that can only be loaded from the API (when the core cask tap is not tapped). This changes things to align more with what we do for formulae. --- Library/Homebrew/cask/cask.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index 2ebf119e60..04051e5e93 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -30,8 +30,11 @@ module Cask raise ArgumentError, "Cask::Cask#all cannot be used without --eval-all or HOMEBREW_EVAL_ALL" end - Tap.flat_map(&:cask_files).map do |f| - CaskLoader::FromTapPathLoader.new(f).load(config: nil) + # Load core casks from tokens so they load from the API when the core cask is not tapped. + tokens_and_files = CoreCaskTap.instance.cask_tokens + tokens_and_files += Tap.reject(&:core_cask_tap?).flat_map(&:cask_files) + tokens_and_files.map do |token_or_file| + CaskLoader.load(token_or_file) rescue CaskUnreadableError => e opoo e.message From b79778229cce05e362629d6d4d0b2fe7161fc115 Mon Sep 17 00:00:00 2001 From: apainintheneck Date: Thu, 21 Dec 2023 21:55:16 -0800 Subject: [PATCH 2/2] Resolve Cask::Cask.all todo Now it takes the :eval_all parameter that means we can remove ARGV handling inside Cask::Cask.all. --- Library/Homebrew/cask/cask.rb | 5 ++--- Library/Homebrew/cmd/deps.rb | 5 +++-- Library/Homebrew/cmd/info.rb | 5 ++++- Library/Homebrew/cmd/uses.rb | 2 +- Library/Homebrew/description_cache_store.rb | 3 ++- Library/Homebrew/dev-cmd/audit.rb | 5 ++++- Library/Homebrew/dev-cmd/livecheck.rb | 2 +- 7 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index 04051e5e93..9a61984df7 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -24,9 +24,8 @@ module Cask attr_predicate :loaded_from_api? # @api private - def self.all - # TODO: replace this ARGV and ENV logic with an argument, like how we do with formulae - if ARGV.exclude?("--eval-all") && !Homebrew::EnvConfig.eval_all? + def self.all(eval_all: false) + if !eval_all && !Homebrew::EnvConfig.eval_all? raise ArgumentError, "Cask::Cask#all cannot be used without --eval-all or HOMEBREW_EVAL_ALL" end diff --git a/Library/Homebrew/cmd/deps.rb b/Library/Homebrew/cmd/deps.rb index dc138a9267..a6d8c9724c 100644 --- a/Library/Homebrew/cmd/deps.rb +++ b/Library/Homebrew/cmd/deps.rb @@ -131,8 +131,9 @@ module Homebrew puts_deps_tree dependents, recursive: recursive, args: args return elsif all - puts_deps sorted_dependents(Formula.all(eval_all: args.eval_all?) + Cask::Cask.all), recursive: recursive, - args: args + puts_deps sorted_dependents( + Formula.all(eval_all: args.eval_all?) + Cask::Cask.all(eval_all: args.eval_all?), + ), recursive: recursive, args: args return elsif !args.no_named? && args.for_each? puts_deps sorted_dependents(args.named.to_formulae_and_casks), recursive: recursive, args: args diff --git a/Library/Homebrew/cmd/info.rb b/Library/Homebrew/cmd/info.rb index 705790a8b3..d52fe812b7 100644 --- a/Library/Homebrew/cmd/info.rb +++ b/Library/Homebrew/cmd/info.rb @@ -207,7 +207,10 @@ module Homebrew end when :v2 formulae, casks = if all - [Formula.all(eval_all: args.eval_all?).sort, Cask::Cask.all.sort_by(&:full_name)] + [ + Formula.all(eval_all: args.eval_all?).sort, + Cask::Cask.all(eval_all: args.eval_all?).sort_by(&:full_name), + ] elsif args.installed? [Formula.installed.sort, Cask::Caskroom.casks.sort_by(&:full_name)] else diff --git a/Library/Homebrew/cmd/uses.rb b/Library/Homebrew/cmd/uses.rb index 21635d9df2..d7d2e72b3d 100644 --- a/Library/Homebrew/cmd/uses.rb +++ b/Library/Homebrew/cmd/uses.rb @@ -119,7 +119,7 @@ module Homebrew deps += args.installed? ? Formula.installed : Formula.all(eval_all: args.eval_all?) end if show_formulae_and_casks || args.cask? - deps += args.installed? ? Cask::Caskroom.casks : Cask::Cask.all + deps += args.installed? ? Cask::Caskroom.casks : Cask::Cask.all(eval_all: args.eval_all?) end if args.missing? diff --git a/Library/Homebrew/description_cache_store.rb b/Library/Homebrew/description_cache_store.rb index bcc6ddbc98..f882e6f67c 100644 --- a/Library/Homebrew/description_cache_store.rb +++ b/Library/Homebrew/description_cache_store.rb @@ -100,7 +100,8 @@ class CaskDescriptionCacheStore < DescriptionCacheStore return unless eval_all return unless database.empty? - Cask::Cask.all.each { |c| update!(c.full_name, [c.name.join(", "), c.desc.presence]) } + Cask::Cask.all(eval_all: eval_all) + .each { |c| update!(c.full_name, [c.name.join(", "), c.desc.presence]) } end # Use an update report to update the {CaskDescriptionCacheStore}. diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index b6c46b5d26..af5449a8e1 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -145,7 +145,10 @@ module Homebrew "brew audit --eval-all or HOMEBREW_EVAL_ALL" end no_named_args = true - [Formula.all(eval_all: args.eval_all?), Cask::Cask.all] + [ + Formula.all(eval_all: args.eval_all?), + Cask::Cask.all(eval_all: args.eval_all?), + ] else if args.named.any? { |named_arg| named_arg.end_with?(".rb") } # This odisabled should probably stick around indefinitely, diff --git a/Library/Homebrew/dev-cmd/livecheck.rb b/Library/Homebrew/dev-cmd/livecheck.rb index 557804fed9..c63d132b85 100644 --- a/Library/Homebrew/dev-cmd/livecheck.rb +++ b/Library/Homebrew/dev-cmd/livecheck.rb @@ -87,7 +87,7 @@ module Homebrew formulae + casks elsif all formulae = args.cask? ? [] : Formula.all(eval_all: args.eval_all?) - casks = args.formula? ? [] : Cask::Cask.all + casks = args.formula? ? [] : Cask::Cask.all(eval_all: args.eval_all?) formulae + casks elsif args.named.present? if args.formula?