diff --git a/Library/Homebrew/cask/cmd/reinstall.rb b/Library/Homebrew/cask/cmd/reinstall.rb index a8711bec8809180695da78e720305de511b36ce3..bf0d0909e89c2f38ef98dd9960b8f8ef90784a97 100644 --- a/Library/Homebrew/cask/cmd/reinstall.rb +++ b/Library/Homebrew/cask/cmd/reinstall.rb @@ -4,13 +4,42 @@ module Cask class Cmd class Reinstall < Install def run + self.class.reinstall_casks( + *casks, + binaries: binaries?, + verbose: verbose?, + force: force?, + skip_cask_deps: skip_cask_deps?, + require_sha: require_sha?, + quarantine: quarantine?, + ) + end + + def self.reinstall_casks( + *casks, + binaries: nil, + verbose: nil, + force: nil, + skip_cask_deps: nil, + require_sha: nil, + quarantine: nil + ) + # TODO: Handle this in `CLI::Parser`. + binaries = Homebrew::EnvConfig.cask_opts_binaries? if binaries.nil? + force = Homebrew::EnvConfig.cask_opts_force? if force.nil? + quarantine = Homebrew::EnvConfig.cask_opts_quarantine? if quarantine.nil? + require_sha = Homebrew::EnvConfig.cask_opts_require_sha? if require_sha.nil? + skip_cask_deps = Homebrew::EnvConfig.cask_opts_skip_cask_deps? if skip_cask_deps.nil? + verbose = Homebrew::EnvConfig.cask_opts_verbose? if verbose.nil? + casks.each do |cask| - Installer.new(cask, binaries: binaries?, - verbose: verbose?, - force: force?, - skip_cask_deps: skip_cask_deps?, - require_sha: require_sha?, - quarantine: quarantine?).reinstall + Installer.new(cask, + binaries: binaries, + verbose: verbose, + force: force, + skip_cask_deps: skip_cask_deps, + require_sha: require_sha, + quarantine: quarantine).reinstall end end diff --git a/Library/Homebrew/cask/cmd/uninstall.rb b/Library/Homebrew/cask/cmd/uninstall.rb index dfa8bbfb77617a08d33fe3e1b40c99d6d82eeb76..3f595b9ca42e08be4dd530da7ff2e6da5a6d913f 100644 --- a/Library/Homebrew/cask/cmd/uninstall.rb +++ b/Library/Homebrew/cask/cmd/uninstall.rb @@ -11,17 +11,31 @@ module Cask end def run + self.class.uninstall_casks( + *casks, + binaries: binaries?, + verbose: verbose?, + force: force? + ) + end + + def self.uninstall_casks(*casks, binaries: nil, verbose: nil, force: nil) + # TODO: Handle this in `CLI::Parser`. + binaries = Homebrew::EnvConfig.cask_opts_binaries? if binaries.nil? + force = Homebrew::EnvConfig.cask_opts_force? if force.nil? + verbose = Homebrew::EnvConfig.cask_opts_verbose? if verbose.nil? + casks.each do |cask| odebug "Uninstalling Cask #{cask}" - raise CaskNotInstalledError, cask unless cask.installed? || force? + raise CaskNotInstalledError, cask unless cask.installed? || force if cask.installed? && !cask.installed_caskfile.nil? # use the same cask file that was used for installation, if possible cask = CaskLoader.load(cask.installed_caskfile) if cask.installed_caskfile.exist? end - Installer.new(cask, binaries: binaries?, verbose: verbose?, force: force?).uninstall + Installer.new(cask, binaries: binaries, verbose: verbose, force: force).uninstall next if (versions = cask.versions).empty? diff --git a/Library/Homebrew/cask/cmd/upgrade.rb b/Library/Homebrew/cask/cmd/upgrade.rb index a2fe3b8c139640f726b46467d27070e27c0cf4f0..c8db6319d2e7f6d18458b823553aa15cec9b6236 100644 --- a/Library/Homebrew/cask/cmd/upgrade.rb +++ b/Library/Homebrew/cask/cmd/upgrade.rb @@ -33,12 +33,23 @@ module Cask def self.upgrade_casks( *casks, - force: false, greedy: false, dry_run: false, binaries: true, skip_cask_deps: false, verbose: false, - quarantine: nil, require_sha: nil + force: nil, + greedy: nil, + dry_run: nil, + binaries: nil, + skip_cask_deps: nil, + verbose: nil, + quarantine: nil, + require_sha: nil ) # TODO: Handle this in `CLI::Parser`. - quarantine = Homebrew::EnvConfig.cask_opts_quarantine? if quarantine.nil? + binaries = Homebrew::EnvConfig.cask_opts_binaries? if binaries.nil? + dry_run = Homebrew::EnvConfig.cask_opts_dry_run? if dry_run.nil? + force = Homebrew::EnvConfig.cask_opts_force? if force.nil? + greedy = Homebrew::EnvConfig.cask_opts_greedy? if greedy.nil? + quarantine = Homebrew::EnvConfig.cask_opts_quarantine? if quarantine.nil? require_sha = Homebrew::EnvConfig.cask_opts_require_sha? if require_sha.nil? + verbose = Homebrew::EnvConfig.cask_opts_verbose? if verbose.nil? outdated_casks = if casks.empty? Caskroom.casks.select do |cask| diff --git a/Library/Homebrew/cmd/reinstall.rb b/Library/Homebrew/cmd/reinstall.rb index e70106f114b98c7684dc268246e6580df360b40c..cd57578a132c8fd37fa8e759bc32c32c9e7c8ec1 100644 --- a/Library/Homebrew/cmd/reinstall.rb +++ b/Library/Homebrew/cmd/reinstall.rb @@ -78,9 +78,14 @@ module Homebrew return if casks.blank? - reinstall_cmd = Cask::Cmd::Reinstall.new(casks) - reinstall_cmd.verbose = args.verbose? - reinstall_cmd.force = args.force? - reinstall_cmd.run + Cask::Cmd::Reinstall.reinstall_casks( + *casks, + binaries: args.binaries?, + verbose: args.verbose?, + force: args.force?, + require_sha: args.require_sha?, + skip_cask_deps: args.skip_cask_deps?, + quarantine: args.quarantine?, + ) end end diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb index be851d9e85e48287f99d03ea0ed69acef6c02f0c..0a789eab26805a03d32bc38ed9c488a9241319f2 100644 --- a/Library/Homebrew/cmd/uninstall.rb +++ b/Library/Homebrew/cmd/uninstall.rb @@ -127,10 +127,12 @@ module Homebrew return if casks.blank? - cask_uninstall = Cask::Cmd::Uninstall.new(casks) - cask_uninstall.force = args.force? - cask_uninstall.verbose = args.verbose? - cask_uninstall.run + Cask::Cmd::Uninstall.uninstall_casks( + *casks, + binaries: args.binaries?, + verbose: args.verbose?, + force: args.force?, + ) rescue MultipleVersionsInstalledError => e ofail e puts "Run `brew uninstall --force #{e.name}` to remove all versions." diff --git a/Library/Homebrew/env_config.rb b/Library/Homebrew/env_config.rb index 86940d7b32f8d9af9d9f449ef70b1cc6c15a16a6..9b636ab4a20ba7a4b727473dac6078fc05d73a1d 100644 --- a/Library/Homebrew/env_config.rb +++ b/Library/Homebrew/env_config.rb @@ -323,6 +323,27 @@ module Homebrew Shellwords.shellsplit(ENV.fetch("HOMEBREW_CASK_OPTS", "")) end + def cask_opts_binaries? + cask_opts.reverse_each do |opt| + return true if opt == "--binaries" + return false if opt == "--no-binaries" + end + + true + end + + def cask_opts_dry_run? + cask_opts.include?("--dry-run") + end + + def cask_opts_force? + cask_opts.include?("--force") + end + + def cask_opts_greedy? + cask_opts.include?("--greedy") + end + def cask_opts_quarantine? cask_opts.reverse_each do |opt| return true if opt == "--quarantine" @@ -335,5 +356,13 @@ module Homebrew def cask_opts_require_sha? cask_opts.include?("--require-sha") end + + def cask_opts_skip_cask_deps? + cask_opts.include?("--skip-cask-deps") + end + + def cask_opts_verbose? + cask_opts.include?("--verbose") + end end end diff --git a/docs/Manpage.md b/docs/Manpage.md index f7e051a7b4fbf79c8402bb0a5c406b6c56595bc4..0cfe7f96028d757bff281b03f6ea17e7e85f26b6 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -1398,6 +1398,9 @@ Note that environment variables must have a value set to be detected. For exampl *Default:* macOS: `$HOME/Library/Caches/Homebrew`, Linux: `$XDG_CACHE_HOME/Homebrew` or `$HOME/.cache/Homebrew`. + * `HOMEBREW_CASK_OPTS`: + Options which should be used for all `cask` commands. + * `HOMEBREW_CLEANUP_MAX_AGE_DAYS`: Cleanup all cached files older than this many days. diff --git a/manpages/brew.1 b/manpages/brew.1 index 0278f39a0e6eba1291ade4ef41f43f06da695a12..3c878e3ef39782dacd3ed48cde7f676cb93423f4 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -1818,6 +1818,10 @@ Use the specified directory as the download cache\. \fIDefault:\fR macOS: \fB$HOME/Library/Caches/Homebrew\fR, Linux: \fB$XDG_CACHE_HOME/Homebrew\fR or \fB$HOME/\.cache/Homebrew\fR\. . .TP +\fBHOMEBREW_CASK_OPTS\fR +Options which should be used for all \fBcask\fR commands\. +. +.TP \fBHOMEBREW_CLEANUP_MAX_AGE_DAYS\fR Cleanup all cached files older than this many days\. .