Add shared methods for uninstalling, reinstalling casks

This commit is contained in:
William Ma 2020-08-05 10:28:58 -04:00
parent b1ca2f7e3c
commit 907d4d7f74
8 changed files with 116 additions and 19 deletions

View File

@ -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

View File

@ -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?

View File

@ -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|

View File

@ -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

View File

@ -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."

View File

@ -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

View File

@ -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.

View File

@ -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\.
.