diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb index 1db5f8b290..303fd943a3 100644 --- a/Library/Homebrew/build.rb +++ b/Library/Homebrew/build.rb @@ -139,7 +139,13 @@ class Build formula.update_head_version - formula.brew(fetch: false, keep_tmp: args.keep_tmp?, interactive: args.interactive?, debug: args.debug?) do + formula.brew( + fetch: false, + keep_tmp: args.keep_tmp?, + interactive: args.interactive?, + debug: args.debug?, + verbose: args.verbose?, + ) do # For head builds, HOMEBREW_FORMULA_PREFIX should include the commit, # which is not known until after the formula has been staged. ENV["HOMEBREW_FORMULA_PREFIX"] = formula.prefix diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index 93fb6ff6b9..2b14a2a0f7 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -133,7 +133,7 @@ module Homebrew already_fetched = f.cached_download.exist? begin - download = f.fetch(verify_download_integrity: false) + download = f.fetch(verify_download_integrity: false, verbose: args.verbose?) rescue DownloadError retry if retry_fetch?(f, args: args) raise @@ -144,6 +144,6 @@ module Homebrew puts "Downloaded to: #{download}" unless already_fetched puts Checksum::TYPES.map { |t| "#{t.to_s.upcase}: #{download.send(t)}" } - f.verify_download_integrity(download) + f.verify_download_integrity(download, verbose: args.verbose?) end end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index c2d75a9aaf..03b7a5ec5c 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -57,6 +57,7 @@ class Formula extend Enumerable extend Forwardable extend Cachable + extend Predicable # @!method inreplace(paths, before = nil, after = nil) # Actually implemented in {Utils::Inreplace.inreplace}. @@ -1167,17 +1168,22 @@ class Formula patchlist.each(&:apply) end + # @private + attr_predicate :debug?, :verbose? + # yields |self,staging| with current working directory set to the uncompressed tarball # where staging is a Mktemp staging context # @private - def brew(fetch: true, keep_tmp: false, interactive: false, debug: false) + def brew(fetch: true, keep_tmp: false, interactive: false, debug: false, verbose: false) + @debug = debug + @verbose = verbose @prefix_returns_versioned_prefix = true active_spec.fetch if fetch stage(interactive: interactive) do |staging| staging.retain! if keep_tmp prepare_patches - fetch_patches if fetch + fetch_patches(verbose: verbose) if fetch begin yield self, staging @@ -1189,6 +1195,8 @@ class Formula end end ensure + @debug = nil + @verbose = nil @prefix_returns_versioned_prefix = false end @@ -1793,17 +1801,19 @@ class Formula end # @private - def fetch(verify_download_integrity: true) - active_spec.fetch(verify_download_integrity: verify_download_integrity) + def fetch(verify_download_integrity: true, verbose: false) + active_spec.fetch(verify_download_integrity: verify_download_integrity, verbose: verbose) end # @private - def verify_download_integrity(fn) - active_spec.verify_download_integrity(fn) + def verify_download_integrity(fn, verbose: false) + active_spec.verify_download_integrity(fn, verbose: verbose) end # @private - def run_test(keep_tmp: false, debug: false) + def run_test(keep_tmp: false, debug: false, verbose: false) + @debug = debug + @verbose = verbose @prefix_returns_versioned_prefix = true test_env = { @@ -1836,8 +1846,10 @@ class Formula end end ensure - @testpath = nil + @debug = nil + @verbose = nil @prefix_returns_versioned_prefix = false + @testpath = nil end # @private @@ -1927,13 +1939,12 @@ class Formula # # If there is a "make", "install" available, please use it! # system "make", "install" def system(cmd, *args) - verbose = Homebrew.args.verbose? verbose_using_dots = Homebrew::EnvConfig.verbose_using_dots? # remove "boring" arguments so that the important ones are more likely to # be shown considering that we trim long ohai lines to the terminal width pretty_args = args.dup - unless verbose + unless verbose? case cmd when "./configure" pretty_args -= %w[--disable-dependency-tracking --disable-debug --disable-silent-rules] @@ -1961,7 +1972,7 @@ class Formula log.puts Time.now, "", cmd, args, "" log.flush - if verbose + if verbose? rd, wr = IO.pipe begin pid = fork do @@ -2004,7 +2015,7 @@ class Formula log_lines = Homebrew::EnvConfig.fail_log_lines log.flush - if !verbose || verbose_using_dots + if !verbose? || verbose_using_dots puts "Last #{log_lines} lines from #{logfn}:" Kernel.system "/usr/bin/tail", "-n", log_lines, logfn end @@ -2092,8 +2103,10 @@ class Formula ENV.update(removed) end - def fetch_patches - patchlist.select(&:external?).each(&:fetch) + def fetch_patches(verbose: false) + patchlist.select(&:external?).each do |p| + p.fetch(verbose: verbose) + end end private diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 8603dbfb89..b0a2c61888 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -1027,8 +1027,10 @@ class FormulaInstaller end return if pour_bottle? - formula.fetch_patches - formula.resources.each(&:fetch) + formula.fetch_patches(verbose: verbose?) + formula.resources.each do |r| + r.fetch(verbose: verbose?) + end downloader.fetch end diff --git a/Library/Homebrew/patch.rb b/Library/Homebrew/patch.rb index f2a92a0616..009b34c672 100644 --- a/Library/Homebrew/patch.rb +++ b/Library/Homebrew/patch.rb @@ -179,12 +179,12 @@ class LegacyPatch < ExternalPatch resource.download_strategy = CurlDownloadStrategy end - def fetch + def fetch(verbose: false) clear_cache super end - def verify_download_integrity(_fn) + def verify_download_integrity(_fn, verbose: false) # no-op end diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 4b00e4ea3a..8d15dfb0c6 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -74,9 +74,10 @@ class Resource def stage(target = nil, &block) raise ArgumentError, "target directory or block is required" if !target && block.blank? + verbose = owner.owner.verbose? prepare_patches - fetch_patches(skip_downloaded: true) - fetch unless downloaded? + fetch_patches(skip_downloaded: true, verbose: verbose) + fetch(verbose: owner.owner.verbose?) unless downloaded? unpack(target, &block) end @@ -85,10 +86,12 @@ class Resource patches.grep(DATAPatch) { |p| p.path = owner.owner.path } end - def fetch_patches(skip_downloaded: false) + def fetch_patches(skip_downloaded: false, verbose: false) external_patches = patches.select(&:external?) external_patches.reject!(&:downloaded?) if skip_downloaded - external_patches.each(&:fetch) + external_patches.each do |p| + p.fetch(verbose: verbose) + end end def apply_patches @@ -122,10 +125,10 @@ class Resource Partial.new(self, files) end - def fetch(verify_download_integrity: true) + def fetch(verify_download_integrity: true, verbose: false) HOMEBREW_CACHE.mkpath - fetch_patches + fetch_patches(verbose: verbose) begin downloader.fetch @@ -134,13 +137,13 @@ class Resource end download = cached_download - verify_download_integrity(download) if verify_download_integrity + verify_download_integrity(download, verbose: verbose) if verify_download_integrity download end - def verify_download_integrity(fn) + def verify_download_integrity(fn, verbose: false) if fn.file? - ohai "Verifying #{fn.basename} checksum" if Homebrew.args.verbose? + ohai "Verifying #{fn.basename} checksum" if verbose fn.verify_checksum(checksum) end rescue ChecksumMissingError diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb index 170b4e5d8f..f9a80f1e3e 100644 --- a/Library/Homebrew/software_spec.rb +++ b/Library/Homebrew/software_spec.rb @@ -239,8 +239,8 @@ class HeadSoftwareSpec < SoftwareSpec @resource.version = Version.create("HEAD") end - def verify_download_integrity(_fn) - nil + def verify_download_integrity(_fn, verbose: false) + # no-op end end diff --git a/Library/Homebrew/test.rb b/Library/Homebrew/test.rb index dfc73862ef..9a3d4107b7 100644 --- a/Library/Homebrew/test.rb +++ b/Library/Homebrew/test.rb @@ -34,7 +34,9 @@ begin # tests can also return false to indicate failure Timeout.timeout TEST_TIMEOUT_SECONDS do - raise "test returned false" if formula.run_test(keep_tmp: args.keep_tmp?, debug: args.debug?) == false + if formula.run_test(keep_tmp: args.keep_tmp?, debug: args.debug?, verbose: args.verbose?) == false + raise "test returned false" + end end rescue Exception => e # rubocop:disable Lint/RescueException error_pipe.puts e.to_json