diff --git a/Library/Homebrew/dev-cmd/cat.rb b/Library/Homebrew/dev-cmd/cat.rb index 49c7cdbc10..c3a8e0ebf8 100644 --- a/Library/Homebrew/dev-cmd/cat.rb +++ b/Library/Homebrew/dev-cmd/cat.rb @@ -31,8 +31,18 @@ module Homebrew cd HOMEBREW_REPOSITORY pager = if Homebrew::EnvConfig.bat? + require "formula" + + unless Formula["bat"].any_version_installed? + # The user might want to capture the output of `brew cat ...` + # Redirect stdout to stderr + redirect_stdout($stderr) do + ohai "Installing `bat` for displaying / source..." + safe_system HOMEBREW_BREW_FILE, "install", "bat" + end + end ENV["BAT_CONFIG_PATH"] = Homebrew::EnvConfig.bat_config_path - "#{HOMEBREW_PREFIX}/bin/bat" + Formula["bat"].opt_bin/"bat" else "cat" end diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 14cb73cd41..ee6d16dfda 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -437,21 +437,23 @@ module Kernel $stderr = old end - def nostdout + def nostdout(&block) if verbose? yield else - begin - out = $stdout.dup - $stdout.reopen(File::NULL) - yield - ensure - $stdout.reopen(out) - out.close - end + redirect_stdout(File::NULL, &block) end end + def redirect_stdout(file) + out = $stdout.dup + $stdout.reopen(file) + yield + ensure + $stdout.reopen(out) + out.close + end + def paths @paths ||= PATH.new(ENV["HOMEBREW_PATH"]).map do |p| File.expand_path(p).chomp("/")