From 687dbe5268d3821b55db5e49b33b800ed1721a03 Mon Sep 17 00:00:00 2001 From: XuehaiPan Date: Tue, 23 Nov 2021 00:24:15 +0800 Subject: [PATCH] dev-cmd/cat: auto-install `bat` when running `brew cat ...` with `HOMEBREW_BAT` set --- Library/Homebrew/dev-cmd/cat.rb | 11 ++++++++++- Library/Homebrew/utils.rb | 20 +++++++++++--------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/dev-cmd/cat.rb b/Library/Homebrew/dev-cmd/cat.rb index 49c7cdbc10f53..783fc3ce622b2 100644 --- a/Library/Homebrew/dev-cmd/cat.rb +++ b/Library/Homebrew/dev-cmd/cat.rb @@ -2,6 +2,7 @@ # frozen_string_literal: true require "cli/parser" +require "formula" module Homebrew extend T::Sig @@ -31,8 +32,16 @@ def cat cd HOMEBREW_REPOSITORY pager = if Homebrew::EnvConfig.bat? + 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 14cb73cd419d6..ee6d16dfda354 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -437,21 +437,23 @@ def capture_stderr $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("/")