From 75cfa2106891c973e1472fd9e363eab1680bb014 Mon Sep 17 00:00:00 2001 From: apainintheneck Date: Wed, 17 Jul 2024 23:11:37 -0700 Subject: [PATCH] Avoid frozen array errors in `brew upgrade` The `Homebrew::CLI::NamedArgs` class often returns frozen arrays so this one cannot be easily modified in-place here. We just overwrite it instead. I also updated the `brew reinstall` command logic to match for consistency. ```console $ brew upgrade gh --verbose --debug ... /usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FromAPILoader): loading gh /usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FromAPILoader): loading gh Error: can't modify frozen Array: [#] /usr/local/Homebrew/Library/Homebrew/cmd/upgrade.rb:139:in `delete' /usr/local/Homebrew/Library/Homebrew/cmd/upgrade.rb:139:in `run' /usr/local/Homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11481/lib/types/private/methods/call_validation.rb:270:in `bind_call' /usr/local/Homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11481/lib/types/private/methods/call_validation.rb:270:in `validate_call' /usr/local/Homebrew/Library/Homebrew/vendor/bundle/ruby/3.3.0/gems/sorbet-runtime-0.5.11481/lib/types/private/methods/_methods.rb:277:in `block in _on_method_added' /usr/local/Homebrew/Library/Homebrew/brew.rb:95:in `
' ``` --- Library/Homebrew/cmd/reinstall.rb | 5 +++-- Library/Homebrew/cmd/upgrade.rb | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/cmd/reinstall.rb b/Library/Homebrew/cmd/reinstall.rb index 5f8a75144d..5ace087d93 100644 --- a/Library/Homebrew/cmd/reinstall.rb +++ b/Library/Homebrew/cmd/reinstall.rb @@ -109,7 +109,7 @@ module Homebrew sig { override.void } def run formulae, casks = T.cast( - args.named.to_formulae_and_casks(method: :resolve).partition { _1.is_a?(Formula) }, + args.named.to_resolved_formulae_to_casks, [T::Array[Formula], T::Array[Cask::Cask]], ) @@ -126,7 +126,8 @@ module Homebrew if Homebrew::Attestation.enabled? if formulae.include?(Formula["gh"]) - formulae.unshift(T.must(formulae.delete(Formula["gh"]))) + # Move `gh` to the front of the list so that it gets installed first. + formulae = [Formula["gh"]] | formulae else Homebrew::Attestation.gh_executable end diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index cab4f27556..f3cceed9de 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -136,7 +136,8 @@ module Homebrew if Homebrew::Attestation.enabled? if formulae.include?(Formula["gh"]) - formulae.unshift(formulae.delete(Formula["gh"])) + # Move `gh` to the front of the list so that it gets installed first. + formulae = [Formula["gh"]] | formulae else Homebrew::Attestation.gh_executable end