
- The `brew uninstall` command has `--zap`, so let's make `brew reinstall` have parity here for a better user experience. (Requested in issue 12983.) - It feels weird that to get my new reinstall test to pass I had to add `--zap` to `cask/cmd/install.rb`, not `cask/cmd/reinstall.rb` to get the tests to pass. But the `brew reinstall --cask caffeine --zap` command worked fine all the time. The CLI argument parser from the test run was complaining about not knowing what `zap` was. As a result, `--zap` now shows up as a switch in `brew install --help` which I'm not 100% convinced is the desired UX. But I've edited the description accordingly to specify that it will only work on `reinstall` operations (and `--zap` on `install` is a no-op). ``` issyl0 at pictor in /opt/homebrew on reinstall-cask-zap ❯ brew reinstall --cask caffeine --zap ==> Downloading https://github.com/IntelliScape/caffeine/releases/download/1.1.3/Caffeine.dmg Already downloaded: /Users/issyl0/Library/Caches/Homebrew/downloads/3d6ccfdd3b8d0ab37d1c2468d6e69078c2d31d3b12bf51947c4db21e5f376af2--Caffeine.dmg ==> Implied `brew uninstall --cask caffeine` ==> Backing App 'Caffeine.app' up to '/opt/homebrew/Caskroom/caffeine/1.1.3/Caffeine.app' ==> Removing App '/Applications/Caffeine.app' ==> Dispatching zap stanza ==> Trashing files: ~/Library/Application Support/com.intelliscapesolutions.caffeine ~/Library/Preferences/com.intelliscapesolutions.caffeine.plist ~/Library/Caches/com.intelliscapesolutions.caffeine ~/Library/HTTPStoages/com.intelliscapesolutions.caffeine.binarycookies ==> Removing all staged versions of Cask 'caffeine' ==> Installing Cask caffeine ==> Moving App 'Caffeine.app' to '/Applications/Caffeine.app' 🍺 caffeine was successfully installed! ```
57 lines
1.3 KiB
Ruby
57 lines
1.3 KiB
Ruby
# typed: true
|
|
# frozen_string_literal: true
|
|
|
|
module Cask
|
|
class Cmd
|
|
# Cask implementation of the `brew reinstall` command.
|
|
#
|
|
# @api private
|
|
class Reinstall < Install
|
|
extend T::Sig
|
|
|
|
sig { void }
|
|
def run
|
|
self.class.reinstall_casks(
|
|
*casks,
|
|
binaries: args.binaries?,
|
|
verbose: args.verbose?,
|
|
force: args.force?,
|
|
skip_cask_deps: args.skip_cask_deps?,
|
|
require_sha: args.require_sha?,
|
|
quarantine: args.quarantine?,
|
|
zap: args.zap?,
|
|
)
|
|
end
|
|
|
|
def self.reinstall_casks(
|
|
*casks,
|
|
verbose: nil,
|
|
force: nil,
|
|
skip_cask_deps: nil,
|
|
binaries: nil,
|
|
require_sha: nil,
|
|
quarantine: nil,
|
|
zap: nil
|
|
)
|
|
require "cask/installer"
|
|
|
|
options = {
|
|
binaries: binaries,
|
|
verbose: verbose,
|
|
force: force,
|
|
skip_cask_deps: skip_cask_deps,
|
|
require_sha: require_sha,
|
|
quarantine: quarantine,
|
|
zap: zap,
|
|
}.compact
|
|
|
|
options[:quarantine] = true if options[:quarantine].nil?
|
|
|
|
casks.each do |cask|
|
|
Installer.new(cask, **options).reinstall
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|