diff --git a/Library/Homebrew/build_environment.rb b/Library/Homebrew/build_environment.rb index 2392b98d5c..d63604faa9 100644 --- a/Library/Homebrew/build_environment.rb +++ b/Library/Homebrew/build_environment.rb @@ -55,22 +55,23 @@ class BuildEnvironment ].freeze private_constant :KEYS - sig { params(env: T.untyped).returns(T::Array[String]) } + sig { params(env: T::Hash[String, T.nilable(T.any(String, Pathname))]).returns(T::Array[String]) } def self.keys(env) KEYS & env.keys end - sig { params(env: T.untyped, f: IO).void } + sig { params(env: T::Hash[String, T.nilable(T.any(String, Pathname))], f: IO).void } def self.dump(env, f = $stdout) keys = self.keys(env) keys -= %w[CC CXX OBJC OBJCXX] if env["CC"] == env["HOMEBREW_CC"] keys.each do |key| value = env.fetch(key) + s = +"#{key}: #{value}" case key when "CC", "CXX", "LD" - s << " => #{Pathname.new(value).realpath}" if File.symlink?(value) + s << " => #{Pathname.new(value).realpath}" if value.present? && File.symlink?(value) end s.freeze f.puts s diff --git a/Library/Homebrew/cmd/--env.rb b/Library/Homebrew/cmd/--env.rb index f9c12119d9..a442e6ad4b 100644 --- a/Library/Homebrew/cmd/--env.rb +++ b/Library/Homebrew/cmd/--env.rb @@ -51,7 +51,7 @@ module Homebrew if shell.nil? BuildEnvironment.dump ENV else - BuildEnvironment.keys(ENV).each do |key| + BuildEnvironment.keys(ENV.to_h).each do |key| puts Utils::Shell.export_value(key, ENV.fetch(key), shell) end end diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb index 6f83563226..4641684b08 100644 --- a/Library/Homebrew/exceptions.rb +++ b/Library/Homebrew/exceptions.rb @@ -466,9 +466,19 @@ end # Raised when an error occurs during a formula build. class BuildError < RuntimeError + extend T::Sig + attr_reader :cmd, :args, :env attr_accessor :formula, :options + sig { + params( + formula: T.nilable(Formula), + cmd: T.any(String, Pathname), + args: T::Array[T.any(String, Pathname, Integer)], + env: T::Hash[String, T.untyped], + ).void + } def initialize(formula, cmd, args, env) @formula = formula @cmd = cmd @@ -478,10 +488,12 @@ class BuildError < RuntimeError super "Failed executing: #{cmd} #{pretty_args}".strip end + sig { returns(T::Array[T.untyped]) } def issues @issues ||= fetch_issues end + sig { returns(T::Array[T.untyped]) } def fetch_issues GitHub.issues_for_formula(formula.name, tap: formula.tap, state: "open") rescue GitHub::API::RateLimitExceededError => e @@ -489,6 +501,7 @@ class BuildError < RuntimeError [] end + sig { params(verbose: T::Boolean).void } def dump(verbose: false) puts diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 44d7190ff3..be6c3b6b34 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2219,7 +2219,7 @@ class Formula def inreplace(paths, before = nil, after = nil, audit_result = true) # rubocop:disable Style/OptionalBooleanParameter super(paths, before, after, audit_result) rescue Utils::Inreplace::Error - raise BuildError.new(self, "inreplace", paths, nil) + raise BuildError.new(self, "inreplace", paths, {}) end protected