提交 3376479e 编辑于 作者: XuehaiPan's avatar XuehaiPan
浏览文件

utils: add method `ensure_formula_installed!`

上级 9be410b3
......@@ -108,10 +108,7 @@ module Homebrew
def ensure_relocation_formulae_installed!
Keg.relocation_formulae.each do |f|
next if Formula[f].latest_version_installed?
ohai "Installing #{f}..."
safe_system HOMEBREW_BREW_FILE, "install", f
ensure_formula_installed!(f, latest: true)
end
end
......@@ -263,10 +260,7 @@ module Homebrew
return default_tar_args
end
unless gnu_tar.any_version_installed?
ohai "Installing `gnu-tar` for bottling..."
safe_system HOMEBREW_BREW_FILE, "install", "--formula", gnu_tar.full_name
end
ensure_formula_installed!(gnu_tar, "for bottling")
["#{gnu_tar.opt_bin}/gtar", gnutar_args].freeze
end
......
......@@ -59,8 +59,7 @@ module Homebrew
unless Utils::Curl.curl_supports_tls13?
begin
unless Pathname.new(ENV["HOMEBREW_BREWED_CURL_PATH"]).exist?
ohai "Installing `curl` for Repology queries..."
safe_system HOMEBREW_BREW_FILE, "install", "--formula", Formula["curl"].full_name
ensure_formula_installed!("curl", "for Repology queries")
end
rescue FormulaUnavailableError
opoo "A `curl` with TLS 1.3 support is required for Repology queries."
......
......@@ -31,18 +31,14 @@ module Homebrew
cd HOMEBREW_REPOSITORY
pager = if Homebrew::EnvConfig.bat?
require "formula"
unless Formula["bat"].any_version_installed?
ENV["BAT_CONFIG_PATH"] = Homebrew::EnvConfig.bat_config_path
ensure_formula_installed!(
"bat",
"for displaying <formula>/<cask> source",
# The user might want to capture the output of `brew cat ...`
# Redirect stdout to stderr
redirect_stdout($stderr) do
ohai "Installing `bat` for displaying <formula>/<cask> source..."
safe_system HOMEBREW_BREW_FILE, "install", "bat"
end
end
ENV["BAT_CONFIG_PATH"] = Homebrew::EnvConfig.bat_config_path
Formula["bat"].opt_bin/"bat"
output_to_stderr: true,
).opt_bin/"bat"
else
"cat"
end
......
......@@ -48,11 +48,9 @@ module Homebrew
def run_buildpulse
require "formula"
unless Formula["buildpulse-test-reporter"].any_version_installed?
ohai "Installing `buildpulse-test-reporter` for reporting test flakiness..."
with_env(HOMEBREW_NO_AUTO_UPDATE: "1", HOMEBREW_NO_BOOTSNAP: "1") do
safe_system HOMEBREW_BREW_FILE, "install", "buildpulse-test-reporter"
end
with_env(HOMEBREW_NO_AUTO_UPDATE: "1", HOMEBREW_NO_BOOTSNAP: "1") do
ensure_formula_installed!("buildpulse-test-reporter",
"for reporting test flakiness")
end
ENV["BUILDPULSE_ACCESS_KEY_ID"] = ENV["HOMEBREW_BUILDPULSE_ACCESS_KEY_ID"]
......
......@@ -53,11 +53,7 @@ class GitHubPackages
which("skopeo", ENV["HOMEBREW_PATH"]),
HOMEBREW_PREFIX/"bin/skopeo",
].compact.first
unless skopeo.exist?
ohai "Installing `skopeo` for upload..."
safe_system HOMEBREW_BREW_FILE, "install", "--formula", "skopeo"
skopeo = Formula["skopeo"].opt_bin/"skopeo"
end
skopeo = ensure_formula_installed!("skopeo", "for upload").opt_bin/"skopeo" unless skopeo.exist?
require "json_schemer"
......
......@@ -278,31 +278,12 @@ module Homebrew
def shellcheck
# Always use the latest brewed shellcheck
unless Formula["shellcheck"].latest_version_installed?
if Formula["shellcheck"].any_version_installed?
ohai "Upgrading `shellcheck` for shell style checks..."
safe_system HOMEBREW_BREW_FILE, "upgrade", "shellcheck"
else
ohai "Installing `shellcheck` for shell style checks..."
safe_system HOMEBREW_BREW_FILE, "install", "shellcheck"
end
end
Formula["shellcheck"].opt_bin/"shellcheck"
ensure_formula_installed!("shellcheck", "for shell style checks", latest: true).opt_bin/"shellcheck"
end
def shfmt
# Always use the latest brewed shfmt
unless Formula["shfmt"].latest_version_installed?
if Formula["shfmt"].any_version_installed?
ohai "Upgrading `shfmt` to format shell scripts..."
safe_system HOMEBREW_BREW_FILE, "upgrade", "shfmt"
else
ohai "Installing `shfmt` to format shell scripts..."
safe_system HOMEBREW_BREW_FILE, "install", "shfmt"
end
end
ensure_formula_installed!("shfmt", "to format shell scripts", latest: true)
HOMEBREW_LIBRARY/"Homebrew/utils/shfmt.sh"
end
......
......@@ -454,6 +454,47 @@ module Kernel
out.close
end
# Ensure the given formula is installed
# This is useful for installing a utility formula (e.g. `shellcheck` for `brew style`)
def ensure_formula_installed!(formula_or_name, reason = "", latest: false, linked: false,
output_to_stderr: false, quiet: false)
if output_to_stderr || quiet
file = if quiet
File::NULL
else
$stderr
end
# Call this method itself with redirected stdout
redirect_stdout(file) do
return ensure_formula_installed!(formula_or_name, reason, latest: latest, linked: linked)
end
end
require "formula"
formula = if formula_or_name.is_a?(Formula)
formula_or_name
else
Formula[formula_or_name]
end
reason = " #{reason}" if reason.present? # add a whitespace
unless formula.any_version_installed?
ohai "Installing `#{formula.name}`#{reason}..."
safe_system HOMEBREW_BREW_FILE, "install", "--formula", formula.full_name
end
if latest && !formula.latest_version_installed?
ohai "Upgrading `#{formula.name}`#{reason}..."
safe_system HOMEBREW_BREW_FILE, "upgrade", "--formula", formula.full_name
end
safe_system HOMEBREW_BREW_FILE, "link", formula.full_name if linked && !formula.linked?
formula
end
def paths
@paths ||= PATH.new(ENV["HOMEBREW_PATH"]).map do |p|
File.expand_path(p).chomp("/")
......
......@@ -100,7 +100,7 @@ module Utils
# and will also likely fail due to `OS::Linux` and `OS::Mac` being undefined.
raise "Refusing to install Git on a generic OS." if ENV["HOMEBREW_TEST_GENERIC_OS"]
safe_system HOMEBREW_BREW_FILE, "install", "git"
ensure_formula_installed!("git")
clear_available_cache
rescue
raise "Git is unavailable"
......
支持 Markdown
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册