Merge pull request #13375 from MikeMcQuaid/modified_formulae
cmd/update-report: use better wording when appropriate.
This commit is contained in:
commit
05e8ed916a
@ -1,7 +1,6 @@
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "formula_versions"
|
||||
require "migrator"
|
||||
require "formulary"
|
||||
require "descriptions"
|
||||
@ -204,6 +203,7 @@ module Homebrew
|
||||
hub.dump(updated_formula_report: !args.auto_update?) unless args.quiet?
|
||||
hub.reporters.each(&:migrate_tap_migration)
|
||||
hub.reporters.each { |r| r.migrate_formula_rename(force: args.force?, verbose: args.verbose?) }
|
||||
|
||||
CacheStoreDatabase.use(:descriptions) do |db|
|
||||
DescriptionCacheStore.new(db)
|
||||
.update_from_report!(hub)
|
||||
@ -212,32 +212,6 @@ module Homebrew
|
||||
CaskDescriptionCacheStore.new(db)
|
||||
.update_from_report!(hub)
|
||||
end
|
||||
|
||||
if !args.auto_update? && !args.quiet?
|
||||
outdated_formulae = Formula.installed.count(&:outdated?)
|
||||
outdated_casks = Cask::Caskroom.casks.count(&:outdated?)
|
||||
update_pronoun = if (outdated_formulae + outdated_casks) == 1
|
||||
"it"
|
||||
else
|
||||
"them"
|
||||
end
|
||||
msg = ""
|
||||
if outdated_formulae.positive?
|
||||
msg += "#{Tty.bold}#{outdated_formulae}#{Tty.reset} outdated #{"formula".pluralize(outdated_formulae)}"
|
||||
end
|
||||
if outdated_casks.positive?
|
||||
msg += " and " if msg.present?
|
||||
msg += "#{Tty.bold}#{outdated_casks}#{Tty.reset} outdated #{"cask".pluralize(outdated_casks)}"
|
||||
end
|
||||
if msg.present?
|
||||
puts
|
||||
puts <<~EOS
|
||||
You have #{msg} installed.
|
||||
You can upgrade #{update_pronoun} with #{Tty.bold}brew upgrade#{Tty.reset}
|
||||
or list #{update_pronoun} with #{Tty.bold}brew outdated#{Tty.reset}.
|
||||
EOS
|
||||
end
|
||||
end
|
||||
end
|
||||
puts if args.auto_update?
|
||||
elsif !args.auto_update? && !ENV["HOMEBREW_UPDATE_FAILED"] && !ENV["HOMEBREW_MIGRATE_LINUXBREW_FORMULAE"]
|
||||
@ -369,24 +343,6 @@ class Reporter
|
||||
when "M"
|
||||
name = tap.formula_file_to_name(src)
|
||||
|
||||
# Skip filtering unchanged formulae versions by default (as it's slow).
|
||||
unless Homebrew::EnvConfig.update_report_version_changed_formulae?
|
||||
@report[:M] << name
|
||||
next
|
||||
end
|
||||
|
||||
begin
|
||||
formula = Formulary.factory(tap.path/src)
|
||||
new_version = formula.pkg_version
|
||||
old_version = FormulaVersions.new(formula).formula_at_revision(@initial_revision, &:pkg_version)
|
||||
next if new_version == old_version
|
||||
rescue FormulaUnavailableError
|
||||
# Don't care if the formula isn't available right now.
|
||||
nil
|
||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||
onoe "#{e.message}\n#{e.backtrace.join "\n"}" if Homebrew::EnvConfig.developer?
|
||||
end
|
||||
|
||||
@report[:M] << name
|
||||
when /^R\d{0,3}/
|
||||
src_full_name = tap.formula_file_to_name(src)
|
||||
@ -571,7 +527,7 @@ class ReporterHub
|
||||
@reporters = []
|
||||
end
|
||||
|
||||
def select_formula(key)
|
||||
def select_formula_or_cask(key)
|
||||
@hash.fetch(key, [])
|
||||
end
|
||||
|
||||
@ -586,70 +542,155 @@ class ReporterHub
|
||||
def dump(updated_formula_report: true)
|
||||
# Key Legend: Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R)
|
||||
|
||||
dump_formula_report :A, "New Formulae"
|
||||
if updated_formula_report
|
||||
dump_formula_report :M, "Updated Formulae"
|
||||
else
|
||||
updated = select_formula(:M).count
|
||||
ohai "Updated Formulae", "Updated #{updated} #{"formula".pluralize(updated)}." if updated.positive?
|
||||
unless Homebrew::EnvConfig.update_report_all_formulae?
|
||||
dump_formula_or_cask_report :A, "New Formulae"
|
||||
dump_formula_or_cask_report :AC, "New Casks"
|
||||
dump_formula_or_cask_report :R, "Renamed Formulae"
|
||||
end
|
||||
dump_formula_report :R, "Renamed Formulae"
|
||||
dump_formula_report :D, "Deleted Formulae"
|
||||
dump_formula_report :AC, "New Casks"
|
||||
if updated_formula_report
|
||||
dump_formula_report :MC, "Updated Casks"
|
||||
|
||||
dump_formula_or_cask_report :D, "Deleted Formulae"
|
||||
dump_formula_or_cask_report :DC, "Deleted Casks"
|
||||
|
||||
outdated_formulae = nil
|
||||
outdated_casks = nil
|
||||
|
||||
if updated_formula_report && Homebrew::EnvConfig.update_report_all_formulae?
|
||||
dump_formula_or_cask_report :M, "Modified Formulae"
|
||||
dump_formula_or_cask_report :MC, "Modified Casks"
|
||||
elsif updated_formula_report
|
||||
outdated_formulae = Formula.installed.select(&:outdated?).map(&:name)
|
||||
output_dump_formula_or_cask_report "Outdated Formulae", outdated_formulae
|
||||
|
||||
outdated_casks = Cask::Caskroom.casks.select(&:outdated?).map(&:token)
|
||||
output_dump_formula_or_cask_report "Outdated Casks", outdated_casks
|
||||
elsif Homebrew::EnvConfig.update_report_all_formulae?
|
||||
if (changed_formulae = select_formula_or_cask(:M).count) && changed_formulae.positive?
|
||||
ohai "Modified Formulae", "Modified #{changed_formulae} #{"formula".pluralize(changed_formulae)}."
|
||||
end
|
||||
|
||||
if (changed_casks = select_formula_or_cask(:MC).count) && changed_casks.positive?
|
||||
ohai "Modified Casks", "Modified #{changed_casks} #{"cask".pluralize(changed_casks)}."
|
||||
end
|
||||
else
|
||||
updated = select_formula(:MC).count
|
||||
ohai "Updated Casks", "Updated #{updated} #{"cask".pluralize(updated)}." if updated.positive?
|
||||
outdated_formulae = Formula.installed.select(&:outdated?).map(&:name)
|
||||
outdated_casks = Cask::Caskroom.casks.select(&:outdated?).map(&:token)
|
||||
end
|
||||
dump_formula_report :DC, "Deleted Casks"
|
||||
|
||||
return if outdated_formulae.blank? && outdated_casks.blank?
|
||||
|
||||
outdated_formulae = outdated_formulae.count
|
||||
outdated_casks = outdated_casks.count
|
||||
|
||||
update_pronoun = if (outdated_formulae + outdated_casks) == 1
|
||||
"it"
|
||||
else
|
||||
"them"
|
||||
end
|
||||
|
||||
msg = ""
|
||||
|
||||
if outdated_formulae.positive?
|
||||
msg += "#{Tty.bold}#{outdated_formulae}#{Tty.reset} outdated #{"formula".pluralize(outdated_formulae)}"
|
||||
end
|
||||
|
||||
if outdated_casks.positive?
|
||||
msg += " and " if msg.present?
|
||||
msg += "#{Tty.bold}#{outdated_casks}#{Tty.reset} outdated #{"cask".pluralize(outdated_casks)}"
|
||||
end
|
||||
|
||||
return if msg.blank?
|
||||
|
||||
puts
|
||||
puts <<~EOS
|
||||
You have #{msg} installed.
|
||||
You can upgrade #{update_pronoun} with #{Tty.bold}brew upgrade#{Tty.reset}
|
||||
or list #{update_pronoun} with #{Tty.bold}brew outdated#{Tty.reset}.
|
||||
EOS
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def dump_formula_report(key, title)
|
||||
only_installed = !Homebrew::EnvConfig.update_report_all_formulae?
|
||||
def dump_formula_or_cask_report(key, title)
|
||||
report_all = Homebrew::EnvConfig.update_report_all_formulae?
|
||||
|
||||
formulae = select_formula(key).sort.map do |name, new_name|
|
||||
# Format list items of renamed formulae
|
||||
formulae_or_casks = select_formula_or_cask(key).sort.map do |name, new_name|
|
||||
# Format list items of formulae
|
||||
case key
|
||||
when :R
|
||||
unless only_installed
|
||||
if report_all
|
||||
name = pretty_installed(name) if installed?(name)
|
||||
new_name = pretty_installed(new_name) if installed?(new_name)
|
||||
"#{name} -> #{new_name}"
|
||||
end
|
||||
when :A
|
||||
name if !only_installed && !installed?(name)
|
||||
name if report_all && !installed?(name)
|
||||
when :AC
|
||||
name.split("/").last if !only_installed && !cask_installed?(name)
|
||||
when :MC, :DC
|
||||
name.split("/").last if report_all && !cask_installed?(name)
|
||||
when :MC
|
||||
name = name.split("/").last
|
||||
if cask_installed?(name)
|
||||
pretty_installed(name)
|
||||
elsif !only_installed
|
||||
if cask_outdated?(name)
|
||||
pretty_outdated(name)
|
||||
else
|
||||
pretty_installed(name)
|
||||
end
|
||||
elsif report_all
|
||||
name
|
||||
end
|
||||
when :DC
|
||||
name = name.split("/").last
|
||||
if cask_installed?(name)
|
||||
pretty_uninstalled(name)
|
||||
elsif report_all
|
||||
name
|
||||
end
|
||||
when :M
|
||||
if installed?(name)
|
||||
if outdated?(name)
|
||||
pretty_outdated(name)
|
||||
else
|
||||
pretty_installed(name)
|
||||
end
|
||||
elsif report_all
|
||||
name
|
||||
end
|
||||
when :D
|
||||
if installed?(name)
|
||||
pretty_uninstalled(name)
|
||||
elsif report_all
|
||||
name
|
||||
end
|
||||
else
|
||||
if installed?(name)
|
||||
pretty_installed(name)
|
||||
elsif !only_installed
|
||||
name
|
||||
end
|
||||
raise ArgumentError, ":#{key} passed to dump_formula_or_cask_report!"
|
||||
end
|
||||
end.compact
|
||||
|
||||
return if formulae.empty?
|
||||
output_dump_formula_or_cask_report title, formulae_or_casks
|
||||
end
|
||||
|
||||
# Dump formula list.
|
||||
ohai title, Formatter.columns(formulae.sort)
|
||||
def output_dump_formula_or_cask_report(title, formulae_or_casks)
|
||||
return if formulae_or_casks.blank?
|
||||
|
||||
ohai title, Formatter.columns(formulae_or_casks.sort)
|
||||
end
|
||||
|
||||
def installed?(formula)
|
||||
(HOMEBREW_CELLAR/formula.split("/").last).directory?
|
||||
end
|
||||
|
||||
def outdated?(formula)
|
||||
Formula[formula].outdated?
|
||||
rescue FormulaUnavailableError
|
||||
false
|
||||
end
|
||||
|
||||
def cask_installed?(cask)
|
||||
(Cask::Caskroom.path/cask).directory?
|
||||
end
|
||||
|
||||
def cask_outdated?(cask)
|
||||
Cask::CaskLoader.load(cask).outdated?
|
||||
rescue Cask::CaskError
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
@ -48,13 +48,13 @@ class DescriptionCacheStore < CacheStore
|
||||
return populate_if_empty! if database.empty?
|
||||
return if report.empty?
|
||||
|
||||
renamings = report.select_formula(:R)
|
||||
alterations = report.select_formula(:A) +
|
||||
report.select_formula(:M) +
|
||||
renamings = report.select_formula_or_cask(:R)
|
||||
alterations = report.select_formula_or_cask(:A) +
|
||||
report.select_formula_or_cask(:M) +
|
||||
renamings.map(&:last)
|
||||
|
||||
update_from_formula_names!(alterations)
|
||||
delete_from_formula_names!(report.select_formula(:D) +
|
||||
delete_from_formula_names!(report.select_formula_or_cask(:D) +
|
||||
renamings.map(&:first))
|
||||
end
|
||||
|
||||
@ -114,11 +114,11 @@ class CaskDescriptionCacheStore < DescriptionCacheStore
|
||||
return populate_if_empty! if database.empty?
|
||||
return if report.empty?
|
||||
|
||||
alterations = report.select_formula(:AC) +
|
||||
report.select_formula(:MC)
|
||||
alterations = report.select_formula_or_cask(:AC) +
|
||||
report.select_formula_or_cask(:MC)
|
||||
|
||||
update_from_cask_tokens!(alterations)
|
||||
delete_from_cask_tokens!(report.select_formula(:DC))
|
||||
delete_from_cask_tokens!(report.select_formula_or_cask(:DC))
|
||||
end
|
||||
|
||||
# Use an array of cask tokens to update the {CaskDescriptionCacheStore}.
|
||||
|
||||
@ -11,15 +11,15 @@ module Homebrew
|
||||
module_function
|
||||
|
||||
ENVS = {
|
||||
HOMEBREW_ADDITIONAL_GOOGLE_ANALYTICS_ID: {
|
||||
HOMEBREW_ADDITIONAL_GOOGLE_ANALYTICS_ID: {
|
||||
description: "Additional Google Analytics tracking ID to emit user behaviour analytics to. " \
|
||||
"For more information, see: <https://docs.brew.sh/Analytics>",
|
||||
},
|
||||
HOMEBREW_ARCH: {
|
||||
HOMEBREW_ARCH: {
|
||||
description: "Linux only: Pass this value to a type name representing the compiler's `-march` option.",
|
||||
default: "native",
|
||||
},
|
||||
HOMEBREW_ARTIFACT_DOMAIN: {
|
||||
HOMEBREW_ARTIFACT_DOMAIN: {
|
||||
description: "Prefix all download URLs, including those for bottles, with this value. " \
|
||||
"For example, `HOMEBREW_ARTIFACT_DOMAIN=http://localhost:8080` will cause a " \
|
||||
"formula with the URL `https://example.com/foo.tar.gz` to instead download from " \
|
||||
@ -30,26 +30,26 @@ module Homebrew
|
||||
"to instead be downloaded from " \
|
||||
"`http://localhost:8080/v2/homebrew/core/gettext/manifests/0.21`",
|
||||
},
|
||||
HOMEBREW_AUTO_UPDATE_SECS: {
|
||||
HOMEBREW_AUTO_UPDATE_SECS: {
|
||||
description: "Run `brew update` once every `HOMEBREW_AUTO_UPDATE_SECS` seconds before some commands, " \
|
||||
"e.g. `brew install`, `brew upgrade` and `brew tap`. Alternatively, " \
|
||||
"disable auto-update entirely with HOMEBREW_NO_AUTO_UPDATE.",
|
||||
default: 300,
|
||||
},
|
||||
HOMEBREW_BAT: {
|
||||
HOMEBREW_BAT: {
|
||||
description: "If set, use `bat` for the `brew cat` command.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_BAT_CONFIG_PATH: {
|
||||
HOMEBREW_BAT_CONFIG_PATH: {
|
||||
description: "Use this as the `bat` configuration file.",
|
||||
default_text: "`$HOME/.config/bat/config`.",
|
||||
},
|
||||
HOMEBREW_BOOTSNAP: {
|
||||
HOMEBREW_BOOTSNAP: {
|
||||
description: "If set, use Bootsnap to speed up repeated `brew` calls. "\
|
||||
"A no-op when using Homebrew's vendored, relocatable Ruby on macOS (as it doesn't work).",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_BOTTLE_DOMAIN: {
|
||||
HOMEBREW_BOTTLE_DOMAIN: {
|
||||
description: "Use this URL as the download mirror for bottles. " \
|
||||
"If bottles at that URL are temporarily unavailable, " \
|
||||
"the default bottle domain will be used as a fallback mirror. " \
|
||||
@ -60,78 +60,78 @@ module Homebrew
|
||||
default_text: "`https://ghcr.io/v2/homebrew/core`.",
|
||||
default: HOMEBREW_BOTTLE_DEFAULT_DOMAIN,
|
||||
},
|
||||
HOMEBREW_BREW_GIT_REMOTE: {
|
||||
HOMEBREW_BREW_GIT_REMOTE: {
|
||||
description: "Use this URL as the Homebrew/brew `git`(1) remote.",
|
||||
default: HOMEBREW_BREW_DEFAULT_GIT_REMOTE,
|
||||
},
|
||||
HOMEBREW_BROWSER: {
|
||||
HOMEBREW_BROWSER: {
|
||||
description: "Use this as the browser when opening project homepages.",
|
||||
default_text: "`$BROWSER` or the OS's default browser.",
|
||||
},
|
||||
HOMEBREW_CACHE: {
|
||||
HOMEBREW_CACHE: {
|
||||
description: "Use this directory as the download cache.",
|
||||
default_text: "macOS: `$HOME/Library/Caches/Homebrew`, " \
|
||||
"Linux: `$XDG_CACHE_HOME/Homebrew` or `$HOME/.cache/Homebrew`.",
|
||||
default: HOMEBREW_DEFAULT_CACHE,
|
||||
},
|
||||
HOMEBREW_CASK_OPTS: {
|
||||
HOMEBREW_CASK_OPTS: {
|
||||
description: "Append these options to all `cask` commands. All `--*dir` options, " \
|
||||
"`--language`, `--require-sha`, `--no-quarantine` and `--no-binaries` are supported. " \
|
||||
"For example, you might add something like the following to your " \
|
||||
"`~/.profile`, `~/.bash_profile`, or `~/.zshenv`:\n\n" \
|
||||
' `export HOMEBREW_CASK_OPTS="--appdir=~/Applications --fontdir=/Library/Fonts"`',
|
||||
},
|
||||
HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS: {
|
||||
HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS: {
|
||||
description: "If set, `brew install`, `brew upgrade` and `brew reinstall` will cleanup all formulae " \
|
||||
"when this number of days has passed.",
|
||||
default: 30,
|
||||
},
|
||||
HOMEBREW_CLEANUP_MAX_AGE_DAYS: {
|
||||
HOMEBREW_CLEANUP_MAX_AGE_DAYS: {
|
||||
description: "Cleanup all cached files older than this many days.",
|
||||
default: 120,
|
||||
},
|
||||
HOMEBREW_COLOR: {
|
||||
HOMEBREW_COLOR: {
|
||||
description: "If set, force colour output on non-TTY outputs.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_CORE_GIT_REMOTE: {
|
||||
HOMEBREW_CORE_GIT_REMOTE: {
|
||||
description: "Use this URL as the Homebrew/homebrew-core `git`(1) remote.",
|
||||
default_text: "`https://github.com/Homebrew/homebrew-core`.",
|
||||
default: HOMEBREW_CORE_DEFAULT_GIT_REMOTE,
|
||||
},
|
||||
HOMEBREW_CURLRC: {
|
||||
HOMEBREW_CURLRC: {
|
||||
description: "If set, do not pass `--disable` when invoking `curl`(1), which disables the " \
|
||||
"use of `curlrc`.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_CURL_RETRIES: {
|
||||
HOMEBREW_CURL_RETRIES: {
|
||||
description: "Pass the given retry count to `--retry` when invoking `curl`(1).",
|
||||
default: 3,
|
||||
},
|
||||
HOMEBREW_CURL_VERBOSE: {
|
||||
HOMEBREW_CURL_VERBOSE: {
|
||||
description: "If set, pass `--verbose` when invoking `curl`(1).",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_DEVELOPER: {
|
||||
HOMEBREW_DEVELOPER: {
|
||||
description: "If set, tweak behaviour to be more relevant for Homebrew developers (active or " \
|
||||
"budding) by e.g. turning warnings into errors.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_DISABLE_LOAD_FORMULA: {
|
||||
HOMEBREW_DISABLE_LOAD_FORMULA: {
|
||||
description: "If set, refuse to load formulae. This is useful when formulae are not trusted (such " \
|
||||
"as in pull requests).",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_DISPLAY: {
|
||||
HOMEBREW_DISPLAY: {
|
||||
description: "Use this X11 display when opening a page in a browser, for example with " \
|
||||
"`brew home`. Primarily useful on Linux.",
|
||||
default_text: "`$DISPLAY`.",
|
||||
},
|
||||
HOMEBREW_DISPLAY_INSTALL_TIMES: {
|
||||
HOMEBREW_DISPLAY_INSTALL_TIMES: {
|
||||
description: "If set, print install times for each formula at the end of the run.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_EDITOR: {
|
||||
HOMEBREW_EDITOR: {
|
||||
description: "Use this editor when editing a single formula, or several formulae in the " \
|
||||
"same directory." \
|
||||
"\n\n *Note:* `brew edit` will open all of Homebrew as discontinuous files " \
|
||||
@ -139,35 +139,35 @@ module Homebrew
|
||||
"editors will do strange things in this case.",
|
||||
default_text: "`$EDITOR` or `$VISUAL`.",
|
||||
},
|
||||
HOMEBREW_FAIL_LOG_LINES: {
|
||||
HOMEBREW_FAIL_LOG_LINES: {
|
||||
description: "Output this many lines of output on formula `system` failures.",
|
||||
default: 15,
|
||||
},
|
||||
HOMEBREW_FORBIDDEN_LICENSES: {
|
||||
HOMEBREW_FORBIDDEN_LICENSES: {
|
||||
description: "A space-separated list of licenses. Homebrew will refuse to install a " \
|
||||
"formula if it or any of its dependencies has a license on this list.",
|
||||
},
|
||||
HOMEBREW_FORCE_BREWED_CA_CERTIFICATES: {
|
||||
HOMEBREW_FORCE_BREWED_CA_CERTIFICATES: {
|
||||
description: "If set, always use a Homebrew-installed `ca-certificates` rather than the system version. " \
|
||||
"Automatically set if the system version is too old.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_FORCE_BREWED_CURL: {
|
||||
HOMEBREW_FORCE_BREWED_CURL: {
|
||||
description: "If set, always use a Homebrew-installed `curl`(1) rather than the system version. " \
|
||||
"Automatically set if the system version of `curl` is too old.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_FORCE_BREWED_GIT: {
|
||||
HOMEBREW_FORCE_BREWED_GIT: {
|
||||
description: "If set, always use a Homebrew-installed `git`(1) rather than the system version. " \
|
||||
"Automatically set if the system version of `git` is too old.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_FORCE_VENDOR_RUBY: {
|
||||
HOMEBREW_FORCE_VENDOR_RUBY: {
|
||||
description: "If set, always use Homebrew's vendored, relocatable Ruby version even if the system version " \
|
||||
"of Ruby is new enough.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_GITHUB_API_TOKEN: {
|
||||
HOMEBREW_GITHUB_API_TOKEN: {
|
||||
description: "Use this personal access token for the GitHub API, for features such as " \
|
||||
"`brew search`. You can create one at <https://github.com/settings/tokens>. If set, " \
|
||||
"GitHub will allow you a greater number of API requests. For more information, see: " \
|
||||
@ -175,51 +175,51 @@ module Homebrew
|
||||
"\n\n *Note:* Homebrew doesn't require permissions for any of the scopes, but some " \
|
||||
"developer commands may require additional permissions.",
|
||||
},
|
||||
HOMEBREW_GITHUB_PACKAGES_TOKEN: {
|
||||
HOMEBREW_GITHUB_PACKAGES_TOKEN: {
|
||||
description: "Use this GitHub personal access token when accessing the GitHub Packages Registry "\
|
||||
"(where bottles may be stored).",
|
||||
},
|
||||
HOMEBREW_DOCKER_REGISTRY_BASIC_AUTH_TOKEN: {
|
||||
HOMEBREW_DOCKER_REGISTRY_BASIC_AUTH_TOKEN: {
|
||||
description: "Use this base64 encoded username and password for authenticating with a Docker registry " \
|
||||
"proxying GitHub Packages. If HOMEBREW_DOCKER_REGISTRY_TOKEN is set, it will be used instead.",
|
||||
},
|
||||
HOMEBREW_DOCKER_REGISTRY_TOKEN: {
|
||||
HOMEBREW_DOCKER_REGISTRY_TOKEN: {
|
||||
description: "Use this bearer token for authenticating with a Docker registry proxying GitHub Packages. " \
|
||||
"Preferred over HOMEBREW_DOCKER_REGISTRY_TOKEN_BASIC.",
|
||||
},
|
||||
HOMEBREW_GITHUB_PACKAGES_USER: {
|
||||
HOMEBREW_GITHUB_PACKAGES_USER: {
|
||||
description: "Use this username when accessing the GitHub Packages Registry (where bottles may be stored).",
|
||||
},
|
||||
HOMEBREW_GIT_EMAIL: {
|
||||
HOMEBREW_GIT_EMAIL: {
|
||||
description: "Set the Git author and committer email to this value.",
|
||||
},
|
||||
HOMEBREW_GIT_NAME: {
|
||||
HOMEBREW_GIT_NAME: {
|
||||
description: "Set the Git author and committer name to this value.",
|
||||
},
|
||||
HOMEBREW_INSTALL_BADGE: {
|
||||
HOMEBREW_INSTALL_BADGE: {
|
||||
description: "Print this text before the installation summary of each successful build.",
|
||||
default_text: 'The "Beer Mug" emoji.',
|
||||
default: "🍺",
|
||||
},
|
||||
HOMEBREW_INSTALL_FROM_API: {
|
||||
HOMEBREW_INSTALL_FROM_API: {
|
||||
description: "If set, install formulae and casks in homebrew/core and homebrew/cask taps using Homebrew's " \
|
||||
"API instead of needing (large, slow) local checkouts of these repositories." \
|
||||
"\n\n *Note:* Setting HOMEBREW_INSTALL_FROM_API is not compatible with Homebrew's " \
|
||||
"developer mode so will error (as Homebrew development needs a full clone).",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_LIVECHECK_WATCHLIST: {
|
||||
HOMEBREW_LIVECHECK_WATCHLIST: {
|
||||
description: "Consult this file for the list of formulae to check by default when no formula argument " \
|
||||
"is passed to `brew livecheck`.",
|
||||
default: "$HOME/.brew_livecheck_watchlist",
|
||||
},
|
||||
HOMEBREW_LOGS: {
|
||||
HOMEBREW_LOGS: {
|
||||
description: "Use this directory to store log files.",
|
||||
default_text: "macOS: `$HOME/Library/Logs/Homebrew`, " \
|
||||
"Linux: `$XDG_CACHE_HOME/Homebrew/Logs` or `$HOME/.cache/Homebrew/Logs`.",
|
||||
default: HOMEBREW_DEFAULT_LOGS,
|
||||
},
|
||||
HOMEBREW_MAKE_JOBS: {
|
||||
HOMEBREW_MAKE_JOBS: {
|
||||
description: "Use this value as the number of parallel jobs to run when building with `make`(1).",
|
||||
default_text: "The number of available CPU cores.",
|
||||
default: lambda {
|
||||
@ -228,100 +228,100 @@ module Homebrew
|
||||
Hardware::CPU.cores
|
||||
},
|
||||
},
|
||||
HOMEBREW_NO_ANALYTICS: {
|
||||
HOMEBREW_NO_ANALYTICS: {
|
||||
description: "If set, do not send analytics. For more information, see: <https://docs.brew.sh/Analytics>",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_AUTO_UPDATE: {
|
||||
HOMEBREW_NO_AUTO_UPDATE: {
|
||||
description: "If set, do not automatically update before running some commands, e.g. " \
|
||||
"`brew install`, `brew upgrade` and `brew tap`. Alternatively, " \
|
||||
"run this less often by setting HOMEBREW_AUTO_UPDATE_SECS to a value higher than the default.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_BOOTSNAP: {
|
||||
HOMEBREW_NO_BOOTSNAP: {
|
||||
description: "If set, do not use Bootsnap to speed up repeated `brew` calls.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: {
|
||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: {
|
||||
description: "If set, do not check for broken linkage of dependents or outdated dependents after " \
|
||||
"installing, upgrading or reinstalling formulae. This will result in fewer dependents " \
|
||||
" (and their dependencies) being upgraded or reinstalled but may result in more breakage " \
|
||||
"from running `brew install <formula>` or `brew upgrade <formula>`.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_CLEANUP_FORMULAE: {
|
||||
HOMEBREW_NO_CLEANUP_FORMULAE: {
|
||||
description: "A comma-separated list of formulae. Homebrew will refuse to clean up a " \
|
||||
"formula if it appears on this list.",
|
||||
},
|
||||
HOMEBREW_NO_COLOR: {
|
||||
HOMEBREW_NO_COLOR: {
|
||||
description: "If set, do not print text with colour added.",
|
||||
default_text: "`$NO_COLOR`.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_COMPAT: {
|
||||
HOMEBREW_NO_COMPAT: {
|
||||
description: "If set, disable all use of legacy compatibility code.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_EMOJI: {
|
||||
HOMEBREW_NO_EMOJI: {
|
||||
description: "If set, do not print `HOMEBREW_INSTALL_BADGE` on a successful build." \
|
||||
"\n\n *Note:* Will only try to print emoji on OS X Lion or newer.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_ENV_HINTS: {
|
||||
HOMEBREW_NO_ENV_HINTS: {
|
||||
description: "If set, do not print any hints about changing Homebrew's behaviour with environment variables.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_GITHUB_API: {
|
||||
HOMEBREW_NO_GITHUB_API: {
|
||||
description: "If set, do not use the GitHub API, e.g. for searches or fetching relevant issues " \
|
||||
"after a failed install.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_INSECURE_REDIRECT: {
|
||||
HOMEBREW_NO_INSECURE_REDIRECT: {
|
||||
description: "If set, forbid redirects from secure HTTPS to insecure HTTP." \
|
||||
"\n\n *Note:* While ensuring your downloads are fully secure, this is likely to cause " \
|
||||
"from-source SourceForge, some GNU & GNOME-hosted formulae to fail to download.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_INSTALL_CLEANUP: {
|
||||
HOMEBREW_NO_INSTALL_CLEANUP: {
|
||||
description: "If set, `brew install`, `brew upgrade` and `brew reinstall` will never automatically " \
|
||||
"cleanup installed/upgraded/reinstalled formulae or all formulae every " \
|
||||
"`HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS` days. Alternatively, HOMEBREW_NO_CLEANUP_FORMULAE " \
|
||||
"allows specifying specific formulae to not clean up.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_NO_INSTALL_UPGRADE: {
|
||||
HOMEBREW_NO_INSTALL_UPGRADE: {
|
||||
description: "If set, `brew install <formula>` will not upgrade `<formula>` if it is installed but " \
|
||||
"outdated.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_PRY: {
|
||||
HOMEBREW_PRY: {
|
||||
description: "If set, use Pry for the `brew irb` command.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_SIMULATE_MACOS_ON_LINUX: {
|
||||
HOMEBREW_SIMULATE_MACOS_ON_LINUX: {
|
||||
description: "If set, running Homebrew on Linux will simulate certain macOS code paths. This is useful " \
|
||||
"when auditing macOS formulae while on Linux.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_SSH_CONFIG_PATH: {
|
||||
HOMEBREW_SSH_CONFIG_PATH: {
|
||||
description: "If set, Homebrew will use the given config file instead of `~/.ssh/config` when fetching " \
|
||||
"`git` repos over `ssh`.",
|
||||
default_text: "`$HOME/.ssh/config`",
|
||||
},
|
||||
HOMEBREW_SKIP_OR_LATER_BOTTLES: {
|
||||
HOMEBREW_SKIP_OR_LATER_BOTTLES: {
|
||||
description: "If set along with `HOMEBREW_DEVELOPER`, do not use bottles from older versions " \
|
||||
"of macOS. This is useful in development on new macOS versions.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_SORBET_RUNTIME: {
|
||||
HOMEBREW_SORBET_RUNTIME: {
|
||||
description: "If set, enable runtime typechecking using Sorbet.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_SVN: {
|
||||
HOMEBREW_SVN: {
|
||||
description: "Use this as the `svn`(1) binary.",
|
||||
default_text: "A Homebrew-built Subversion (if installed), or the system-provided binary.",
|
||||
},
|
||||
HOMEBREW_TEMP: {
|
||||
HOMEBREW_TEMP: {
|
||||
description: "Use this path as the temporary directory for building packages. Changing " \
|
||||
"this may be needed if your system temporary directory and Homebrew prefix are on " \
|
||||
"different volumes, as macOS has trouble moving symlinks across volumes when the target " \
|
||||
@ -330,50 +330,46 @@ module Homebrew
|
||||
default_text: "macOS: `/private/tmp`, Linux: `/tmp`.",
|
||||
default: HOMEBREW_DEFAULT_TEMP,
|
||||
},
|
||||
HOMEBREW_UPDATE_REPORT_ALL_FORMULAE: {
|
||||
description: "If set, `brew update` lists updates to all software.",
|
||||
HOMEBREW_UPDATE_REPORT_ALL_FORMULAE: {
|
||||
description: "If set, `brew update` lists changes to all formulae and cask files rather than only showing " \
|
||||
"when they are installed or outdated.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_UPDATE_REPORT_VERSION_CHANGED_FORMULAE: {
|
||||
description: "If set, `brew update` only lists updates to formulae with differing versions. " \
|
||||
"Note this is slower than the default behaviour.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_UPDATE_TO_TAG: {
|
||||
HOMEBREW_UPDATE_TO_TAG: {
|
||||
description: "If set, always use the latest stable tag (even if developer commands " \
|
||||
"have been run).",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_VERBOSE: {
|
||||
HOMEBREW_VERBOSE: {
|
||||
description: "If set, always assume `--verbose` when running commands.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_DEBUG: {
|
||||
HOMEBREW_DEBUG: {
|
||||
description: "If set, always assume `--debug` when running commands.",
|
||||
boolean: true,
|
||||
},
|
||||
HOMEBREW_VERBOSE_USING_DOTS: {
|
||||
HOMEBREW_VERBOSE_USING_DOTS: {
|
||||
description: "If set, verbose output will print a `.` no more than once a minute. This can be " \
|
||||
"useful to avoid long-running Homebrew commands being killed due to no output.",
|
||||
boolean: true,
|
||||
},
|
||||
all_proxy: {
|
||||
all_proxy: {
|
||||
description: "Use this SOCKS5 proxy for `curl`(1), `git`(1) and `svn`(1) when downloading through Homebrew.",
|
||||
},
|
||||
ftp_proxy: {
|
||||
ftp_proxy: {
|
||||
description: "Use this FTP proxy for `curl`(1), `git`(1) and `svn`(1) when downloading through Homebrew.",
|
||||
},
|
||||
http_proxy: {
|
||||
http_proxy: {
|
||||
description: "Use this HTTP proxy for `curl`(1), `git`(1) and `svn`(1) when downloading through Homebrew.",
|
||||
},
|
||||
https_proxy: {
|
||||
https_proxy: {
|
||||
description: "Use this HTTPS proxy for `curl`(1), `git`(1) and `svn`(1) when downloading through Homebrew.",
|
||||
},
|
||||
no_proxy: {
|
||||
no_proxy: {
|
||||
description: "A comma-separated list of hostnames and domain names excluded " \
|
||||
"from proxying by `curl`(1), `git`(1) and `svn`(1) when downloading through Homebrew.",
|
||||
},
|
||||
SUDO_ASKPASS: {
|
||||
SUDO_ASKPASS: {
|
||||
description: "If set, pass the `-A` option when calling `sudo`(8).",
|
||||
},
|
||||
}.freeze
|
||||
|
||||
@ -52,39 +52,39 @@ describe "brew update-report" do
|
||||
specify "without Formula changes" do
|
||||
perform_update("update_git_diff_output_without_formulae_changes")
|
||||
|
||||
expect(hub.select_formula(:M)).to be_empty
|
||||
expect(hub.select_formula(:A)).to be_empty
|
||||
expect(hub.select_formula(:D)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:M)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:A)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:D)).to be_empty
|
||||
end
|
||||
|
||||
specify "with Formula changes" do
|
||||
perform_update("update_git_diff_output_with_formulae_changes")
|
||||
|
||||
expect(hub.select_formula(:M)).to eq(%w[xar yajl])
|
||||
expect(hub.select_formula(:A)).to eq(%w[antiword bash-completion ddrescue dict lua])
|
||||
expect(hub.select_formula_or_cask(:M)).to eq(%w[xar yajl])
|
||||
expect(hub.select_formula_or_cask(:A)).to eq(%w[antiword bash-completion ddrescue dict lua])
|
||||
end
|
||||
|
||||
specify "with removed Formulae" do
|
||||
perform_update("update_git_diff_output_with_removed_formulae")
|
||||
|
||||
expect(hub.select_formula(:D)).to eq(%w[libgsasl])
|
||||
expect(hub.select_formula_or_cask(:D)).to eq(%w[libgsasl])
|
||||
end
|
||||
|
||||
specify "with changed file type" do
|
||||
perform_update("update_git_diff_output_with_changed_filetype")
|
||||
|
||||
expect(hub.select_formula(:M)).to eq(%w[elixir])
|
||||
expect(hub.select_formula(:A)).to eq(%w[libbson])
|
||||
expect(hub.select_formula(:D)).to eq(%w[libgsasl])
|
||||
expect(hub.select_formula_or_cask(:M)).to eq(%w[elixir])
|
||||
expect(hub.select_formula_or_cask(:A)).to eq(%w[libbson])
|
||||
expect(hub.select_formula_or_cask(:D)).to eq(%w[libgsasl])
|
||||
end
|
||||
|
||||
specify "with renamed Formula" do
|
||||
allow(tap).to receive(:formula_renames).and_return("cv" => "progress")
|
||||
perform_update("update_git_diff_output_with_formula_rename")
|
||||
|
||||
expect(hub.select_formula(:A)).to be_empty
|
||||
expect(hub.select_formula(:D)).to be_empty
|
||||
expect(hub.select_formula(:R)).to eq([["cv", "progress"]])
|
||||
expect(hub.select_formula_or_cask(:A)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:D)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:R)).to eq([["cv", "progress"]])
|
||||
end
|
||||
|
||||
context "when updating a Tap other than the core Tap" do
|
||||
@ -101,34 +101,34 @@ describe "brew update-report" do
|
||||
specify "with restructured Tap" do
|
||||
perform_update("update_git_diff_output_with_restructured_tap")
|
||||
|
||||
expect(hub.select_formula(:A)).to be_empty
|
||||
expect(hub.select_formula(:D)).to be_empty
|
||||
expect(hub.select_formula(:R)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:A)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:D)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:R)).to be_empty
|
||||
end
|
||||
|
||||
specify "with renamed Formula and restructured Tap" do
|
||||
allow(tap).to receive(:formula_renames).and_return("xchat" => "xchat2")
|
||||
perform_update("update_git_diff_output_with_formula_rename_and_restructuring")
|
||||
|
||||
expect(hub.select_formula(:A)).to be_empty
|
||||
expect(hub.select_formula(:D)).to be_empty
|
||||
expect(hub.select_formula(:R)).to eq([%w[foo/bar/xchat foo/bar/xchat2]])
|
||||
expect(hub.select_formula_or_cask(:A)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:D)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:R)).to eq([%w[foo/bar/xchat foo/bar/xchat2]])
|
||||
end
|
||||
|
||||
specify "with simulated 'homebrew/php' restructuring" do
|
||||
perform_update("update_git_diff_simulate_homebrew_php_restructuring")
|
||||
|
||||
expect(hub.select_formula(:A)).to be_empty
|
||||
expect(hub.select_formula(:D)).to be_empty
|
||||
expect(hub.select_formula(:R)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:A)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:D)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:R)).to be_empty
|
||||
end
|
||||
|
||||
specify "with Formula changes" do
|
||||
perform_update("update_git_diff_output_with_tap_formulae_changes")
|
||||
|
||||
expect(hub.select_formula(:A)).to eq(%w[foo/bar/lua])
|
||||
expect(hub.select_formula(:M)).to eq(%w[foo/bar/git])
|
||||
expect(hub.select_formula(:D)).to be_empty
|
||||
expect(hub.select_formula_or_cask(:A)).to eq(%w[foo/bar/lua])
|
||||
expect(hub.select_formula_or_cask(:M)).to eq(%w[foo/bar/git])
|
||||
expect(hub.select_formula_or_cask(:D)).to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -25,7 +25,7 @@ describe DescriptionCacheStore do
|
||||
end
|
||||
|
||||
describe "#update_from_report!" do
|
||||
let(:report) { double(select_formula: [], empty?: false) }
|
||||
let(:report) { double(select_formula_or_cask: [], empty?: false) }
|
||||
|
||||
it "reads from the report" do
|
||||
expect(database).to receive(:empty?).at_least(:once).and_return(false)
|
||||
@ -60,7 +60,7 @@ describe DescriptionCacheStore do
|
||||
let(:database) { double("database") }
|
||||
|
||||
describe "#update_from_report!" do
|
||||
let(:report) { double(select_formula: [], empty?: false) }
|
||||
let(:report) { double(select_formula_or_cask: [], empty?: false) }
|
||||
|
||||
it "reads from the report" do
|
||||
expect(database).to receive(:empty?).at_least(:once).and_return(false)
|
||||
|
||||
@ -248,6 +248,16 @@ module Kernel
|
||||
end
|
||||
end
|
||||
|
||||
def pretty_outdated(f)
|
||||
if !$stdout.tty?
|
||||
f.to_s
|
||||
elsif Homebrew::EnvConfig.no_emoji?
|
||||
Formatter.error("#{Tty.bold}#{f} (outdated)#{Tty.reset}")
|
||||
else
|
||||
"#{Tty.bold}#{f} #{Formatter.warning("⚠")}#{Tty.reset}"
|
||||
end
|
||||
end
|
||||
|
||||
def pretty_uninstalled(f)
|
||||
if !$stdout.tty?
|
||||
f.to_s
|
||||
|
||||
@ -2172,10 +2172,7 @@ example, run `export HOMEBREW_NO_INSECURE_REDIRECT=1` rather than just
|
||||
*Default:* macOS: `/private/tmp`, Linux: `/tmp`.
|
||||
|
||||
- `HOMEBREW_UPDATE_REPORT_ALL_FORMULAE`
|
||||
<br>If set, `brew update` lists updates to all software.
|
||||
|
||||
- `HOMEBREW_UPDATE_REPORT_VERSION_CHANGED_FORMULAE`
|
||||
<br>If set, `brew update` only lists updates to formulae with differing versions. Note this is slower than the default behaviour.
|
||||
<br>If set, `brew update` lists changes to all formulae and cask files rather than only showing when they are installed or outdated.
|
||||
|
||||
- `HOMEBREW_UPDATE_TO_TAG`
|
||||
<br>If set, always use the latest stable tag (even if developer commands have been run).
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BREW" "1" "May 2022" "Homebrew" "brew"
|
||||
.TH "BREW" "1" "June 2022" "Homebrew" "brew"
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbrew\fR \- The Missing Package Manager for macOS (or Linux)
|
||||
@ -3186,13 +3186,7 @@ Use this path as the temporary directory for building packages\. Changing this m
|
||||
\fBHOMEBREW_UPDATE_REPORT_ALL_FORMULAE\fR
|
||||
.
|
||||
.br
|
||||
If set, \fBbrew update\fR lists updates to all software\.
|
||||
.
|
||||
.TP
|
||||
\fBHOMEBREW_UPDATE_REPORT_VERSION_CHANGED_FORMULAE\fR
|
||||
.
|
||||
.br
|
||||
If set, \fBbrew update\fR only lists updates to formulae with differing versions\. Note this is slower than the default behaviour\.
|
||||
If set, \fBbrew update\fR lists changes to all formulae and cask files rather than only showing when they are installed or outdated\.
|
||||
.
|
||||
.TP
|
||||
\fBHOMEBREW_UPDATE_TO_TAG\fR
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user