From 55ef924e7a9f99a9df1c2b7a9b33793f7ae27d8a Mon Sep 17 00:00:00 2001
From: Raymond Wanyoike <raymond.wanyoike@gmail.com>
Date: Sun, 4 Dec 2016 13:37:26 +0300
Subject: [PATCH] cask reinstall: download and verify cask before uninstall

Closes: caskroom/homebrew-cask#27075
---
 .../Homebrew/cask/lib/hbc/cli/reinstall.rb    | 34 ++++++++++++++++---
 1 file changed, 30 insertions(+), 4 deletions(-)

diff --git a/Library/Homebrew/cask/lib/hbc/cli/reinstall.rb b/Library/Homebrew/cask/lib/hbc/cli/reinstall.rb
index 3560a4795b..70a329c20b 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/reinstall.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/reinstall.rb
@@ -7,6 +7,24 @@ module Hbc
           begin
             cask = Hbc.load(cask_token)
 
+            installer = Installer.new(cask,
+                                      force:          force,
+                                      skip_cask_deps: skip_cask_deps,
+                                      require_sha:    require_sha)
+            installer.print_caveats
+
+            # Download
+            begin
+              installer.satisfy_dependencies
+              installer.verify_has_sha if @require_sha && !@force
+              installer.download
+              installer.verify
+            rescue StandardError => e
+              installer.purge_versioned_files
+              raise e
+            end
+
+            # Uninstall
             if cask.installed?
               # use copy of cask for uninstallation to avoid 'No such file or directory' bug
               installed_cask = cask
@@ -26,10 +44,18 @@ module Hbc
               Installer.new(installed_cask, force: true).uninstall
             end
 
-            Installer.new(cask,
-                          force:          force,
-                          skip_cask_deps: skip_cask_deps,
-                          require_sha:    require_sha).install
+            # Reinstall
+            begin
+              installer.extract_primary_container
+              installer.install_artifacts
+              installer.save_caskfile
+              installer.enable_accessibility_access
+            rescue StandardError => e
+              installer.purge_versioned_files
+              raise e
+            end
+
+            puts installer.summary
             count += 1
           rescue CaskUnavailableError => e
             warn_unavailable_with_suggestion cask_token, e
-- 
GitLab