diff --git a/Library/Homebrew/cask/upgrade.rb b/Library/Homebrew/cask/upgrade.rb
index 54e76880c6cac6..4da2ec4a58096a 100644
--- a/Library/Homebrew/cask/upgrade.rb
+++ b/Library/Homebrew/cask/upgrade.rb
@@ -40,8 +40,6 @@ def self.upgrade_casks(
quarantine = true if quarantine.nil?
- greedy = true if Homebrew::EnvConfig.upgrade_greedy?
-
outdated_casks = if casks.empty?
Caskroom.casks(config: Config.from_args(args)).select do |cask|
cask.outdated?(greedy: greedy, greedy_latest: greedy_latest,
diff --git a/Library/Homebrew/cmd/outdated.rb b/Library/Homebrew/cmd/outdated.rb
index 6df2c6e2d25530..95dd306c1ce7d6 100644
--- a/Library/Homebrew/cmd/outdated.rb
+++ b/Library/Homebrew/cmd/outdated.rb
@@ -32,13 +32,16 @@ def self.outdated_args
"formula is outdated. Otherwise, the repository's HEAD will only be checked for " \
"updates when a new stable or development version has been released."
switch "-g", "--greedy",
- description: "Also include outdated casks with `auto_updates true` or `version :latest`."
+ description: "Also include outdated casks with `auto_updates true` or `version :latest`.",
+ env: :cask_upgrade_greedy
switch "--greedy-latest",
- description: "Also include outdated casks including those with `version :latest`."
+ description: "Also include outdated casks including those with `version :latest`.",
+ env: :cask_upgrade_greedy_latest
switch "--greedy-auto-updates",
- description: "Also include outdated casks including those with `auto_updates true`."
+ description: "Also include outdated casks including those with `auto_updates true`.",
+ env: :cask_upgrade_greedy_auto_updates
conflicts "--quiet", "--verbose", "--json"
conflicts "--formula", "--cask"
diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb
index ed712f3070f24e..01956566eb3148 100644
--- a/Library/Homebrew/cmd/upgrade.rb
+++ b/Library/Homebrew/cmd/upgrade.rb
@@ -91,12 +91,15 @@ def upgrade_args
}],
[:switch, "-g", "--greedy", {
description: "Also include casks with `auto_updates true` or `version :latest`.",
+ env: :cask_upgrade_greedy,
}],
[:switch, "--greedy-latest", {
description: "Also include casks with `version :latest`.",
+ env: :cask_upgrade_greedy_latest,
}],
[:switch, "--greedy-auto-updates", {
description: "Also include casks with `auto_updates true`.",
+ env: :cask_upgrade_greedy_auto_updates,
}],
[:switch, "--[no-]binaries", {
description: "Disable/enable linking of helper executables (default: enabled).",
diff --git a/Library/Homebrew/env_config.rb b/Library/Homebrew/env_config.rb
index c5d04c4082bad3..31ea23bd7bb012 100644
--- a/Library/Homebrew/env_config.rb
+++ b/Library/Homebrew/env_config.rb
@@ -341,8 +341,9 @@ module EnvConfig
boolean: true,
},
HOMEBREW_UPGRADE_GREEDY: {
- description: "If set, pass `--greedy` to all cask upgrade commands.",
- boolean: true,
+ description: "When set to \"auto-updates\", \"latest\", or any other value (e.g. \"1\"), pass " \
+ "`--greedy-auto-updates`, `--greedy-latest`, or `--greedy` respectively to all cask " \
+ "upgrade commands.",
},
HOMEBREW_SIMULATE_MACOS_ON_LINUX: {
description: "If set, running Homebrew on Linux will simulate certain macOS code paths. This is useful " \
@@ -475,6 +476,23 @@ def cask_opts
Shellwords.shellsplit(ENV.fetch("HOMEBREW_CASK_OPTS", ""))
end
+ sig { returns(T::Boolean) }
+ def cask_upgrade_greedy?
+ ENV["HOMEBREW_UPGRADE_GREEDY"].present? &&
+ !cask_upgrade_greedy_latest? &&
+ !cask_upgrade_greedy_auto_updates?
+ end
+
+ sig { returns(T::Boolean) }
+ def cask_upgrade_greedy_latest?
+ ENV["HOMEBREW_UPGRADE_GREEDY"] == "latest"
+ end
+
+ sig { returns(T::Boolean) }
+ def cask_upgrade_greedy_auto_updates?
+ ENV["HOMEBREW_UPGRADE_GREEDY"] == "auto-updates"
+ end
+
sig { returns(T::Boolean) }
def cask_opts_binaries?
cask_opts.reverse_each do |opt|
diff --git a/Library/Homebrew/env_config.rbi b/Library/Homebrew/env_config.rbi
index 1fa98249b3404e..91bc33bb2fdcde 100644
--- a/Library/Homebrew/env_config.rbi
+++ b/Library/Homebrew/env_config.rbi
@@ -232,8 +232,8 @@ module Homebrew::EnvConfig
sig { returns(T::Boolean) }
def self.update_to_tag?; end
- sig { returns(T::Boolean) }
- def self.upgrade_greedy?; end
+ sig { returns(T.nilable(String)) }
+ def self.upgrade_greedy; end
sig { returns(T::Boolean) }
def self.verbose?; end
diff --git a/Library/Homebrew/test/env_config_spec.rb b/Library/Homebrew/test/env_config_spec.rb
index 02fdd05948c896..b780b401d96d00 100644
--- a/Library/Homebrew/test/env_config_spec.rb
+++ b/Library/Homebrew/test/env_config_spec.rb
@@ -63,4 +63,85 @@
expect(env_config.make_jobs).to eql("16")
end
end
+
+ describe ".cask_upgrade_greedy" do
+ it "returns true if \"HOMEBREW_UPGRADE_GREEDY\" set to \"1\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "1"
+ expect(env_config.cask_upgrade_greedy?).to be(true)
+ end
+
+ it "returns true if \"HOMEBREW_UPGRADE_GREEDY\" set to \"true\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "true"
+ expect(env_config.cask_upgrade_greedy?).to be(true)
+ end
+
+ it "returns false if \"HOMEBREW_UPGRADE_GREEDY\" set to \"latest\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "latest"
+ expect(env_config.cask_upgrade_greedy?).to be(false)
+ end
+
+ it "returns false if \"HOMEBREW_UPGRADE_GREEDY\" set to \"auto-updates\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "auto-updates"
+ expect(env_config.cask_upgrade_greedy?).to be(false)
+ end
+
+ it "returns false by default" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = ""
+ expect(env_config.cask_upgrade_greedy?).to be(false)
+ end
+ end
+
+ describe ".cask_upgrade_greedy_latest" do
+ it "returns false if \"HOMEBREW_UPGRADE_GREEDY\" set to \"1\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "1"
+ expect(env_config.cask_upgrade_greedy_latest?).to be(false)
+ end
+
+ it "returns false if \"HOMEBREW_UPGRADE_GREEDY\" set to \"true\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "true"
+ expect(env_config.cask_upgrade_greedy_latest?).to be(false)
+ end
+
+ it "returns true if \"HOMEBREW_UPGRADE_GREEDY\" set to \"latest\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "latest"
+ expect(env_config.cask_upgrade_greedy_latest?).to be(true)
+ end
+
+ it "returns false if \"HOMEBREW_UPGRADE_GREEDY\" set to \"auto-updates\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "auto-updates"
+ expect(env_config.cask_upgrade_greedy_latest?).to be(false)
+ end
+
+ it "returns false by default" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = ""
+ expect(env_config.cask_upgrade_greedy_latest?).to be(false)
+ end
+ end
+
+ describe ".cask_upgrade_greedy_auto_updates" do
+ it "returns false if \"HOMEBREW_UPGRADE_GREEDY\" set to \"1\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "1"
+ expect(env_config.cask_upgrade_greedy_auto_updates?).to be(false)
+ end
+
+ it "returns false if \"HOMEBREW_UPGRADE_GREEDY\" set to \"true\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "true"
+ expect(env_config.cask_upgrade_greedy_auto_updates?).to be(false)
+ end
+
+ it "returns false if \"HOMEBREW_UPGRADE_GREEDY\" set to \"latest\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "latest"
+ expect(env_config.cask_upgrade_greedy_auto_updates?).to be(false)
+ end
+
+ it "returns true if \"HOMEBREW_UPGRADE_GREEDY\" set to \"auto-updates\"" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = "auto-updates"
+ expect(env_config.cask_upgrade_greedy_auto_updates?).to be(true)
+ end
+
+ it "returns false by default" do
+ ENV["HOMEBREW_UPGRADE_GREEDY"] = ""
+ expect(env_config.cask_upgrade_greedy_auto_updates?).to be(false)
+ end
+ end
end
diff --git a/docs/Manpage.md b/docs/Manpage.md
index 2abe611ece4b56..00801749302c0d 100644
--- a/docs/Manpage.md
+++ b/docs/Manpage.md
@@ -2357,7 +2357,7 @@ command execution e.g. `$(cat file)`.
If set, use Pry for the `brew irb` command.
- `HOMEBREW_UPGRADE_GREEDY`
-
If set, pass `--greedy` to all cask upgrade commands.
+
When set to "auto-updates", "latest", or any other value (e.g. "1"), pass `--greedy-auto-updates`, `--greedy-latest`, or `--greedy` respectively to all cask upgrade commands.
- `HOMEBREW_SIMULATE_MACOS_ON_LINUX`
If set, running Homebrew on Linux will simulate certain macOS code paths. This is useful when auditing macOS formulae while on Linux.
diff --git a/manpages/brew.1 b/manpages/brew.1
index 69941c531d2f64..81468437be9d2a 100644
--- a/manpages/brew.1
+++ b/manpages/brew.1
@@ -3464,7 +3464,7 @@ If set, use Pry for the \fBbrew irb\fR command\.
\fBHOMEBREW_UPGRADE_GREEDY\fR
.
.br
-If set, pass \fB\-\-greedy\fR to all cask upgrade commands\.
+When set to "auto\-updates", "latest", or any other value (e\.g\. "1"), pass \fB\-\-greedy\-auto\-updates\fR, \fB\-\-greedy\-latest\fR, or \fB\-\-greedy\fR respectively to all cask upgrade commands\.
.
.TP
\fBHOMEBREW_SIMULATE_MACOS_ON_LINUX\fR