From 2b4c3ee1d75199c7886905f4ee678e7dd437b5e0 Mon Sep 17 00:00:00 2001
From: Markus Reiter <me@reitermark.us>
Date: Sun, 12 Mar 2017 22:09:13 +0100
Subject: [PATCH] Default to `sudo: false` for `installer/uninstall :script`.

---
 .../cask/lib/hbc/artifact/installer.rb        |  2 +-
 .../cask/lib/hbc/artifact/uninstall_base.rb   |  2 +-
 .../artifact/uninstall_zap_shared_examples.rb | 53 +++++++++----------
 3 files changed, 27 insertions(+), 30 deletions(-)

diff --git a/Library/Homebrew/cask/lib/hbc/artifact/installer.rb b/Library/Homebrew/cask/lib/hbc/artifact/installer.rb
index 55e8d38c03..be857696ec 100644
--- a/Library/Homebrew/cask/lib/hbc/artifact/installer.rb
+++ b/Library/Homebrew/cask/lib/hbc/artifact/installer.rb
@@ -16,7 +16,7 @@ module Hbc
           else
             executable, script_arguments = self.class.read_script_arguments(artifact.script,
                                                                             self.class.artifact_dsl_key.to_s,
-                                                                            { must_succeed: true, sudo: true },
+                                                                            { must_succeed: true, sudo: false },
                                                                             print_stdout: true)
             ohai "Running #{self.class.artifact_dsl_key} script #{executable}"
             raise CaskInvalidError.new(@cask, "#{self.class.artifact_dsl_key} missing executable") if executable.nil?
diff --git a/Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb b/Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb
index d438fc0264..478f313b5a 100644
--- a/Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb
+++ b/Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb
@@ -163,7 +163,7 @@ module Hbc
       def uninstall_script(directives, directive_name: :script)
         executable, script_arguments = self.class.read_script_arguments(directives,
                                                                         "uninstall",
-                                                                        { must_succeed: true, sudo: true },
+                                                                        { must_succeed: true, sudo: false },
                                                                         { print_stdout: true },
                                                                         directive_name)
 
diff --git a/Library/Homebrew/test/cask/artifact/uninstall_zap_shared_examples.rb b/Library/Homebrew/test/cask/artifact/uninstall_zap_shared_examples.rb
index 69e0154899..6c2fd1a056 100644
--- a/Library/Homebrew/test/cask/artifact/uninstall_zap_shared_examples.rb
+++ b/Library/Homebrew/test/cask/artifact/uninstall_zap_shared_examples.rb
@@ -216,35 +216,32 @@ shared_examples "#uninstall_phase or #zap_phase" do
     end
   end
 
-  context "using :script" do
-    let(:cask) { Hbc::CaskLoader.load_from_file(TEST_FIXTURE_DIR/"cask/Casks/with-#{artifact_name}-script.rb") }
-    let(:script_pathname) { cask.staged_path.join("MyFancyPkg", "FancyUninstaller.tool") }
-
-    it "is supported" do
-      Hbc::FakeSystemCommand.expects_command(%w[/bin/chmod -- +x] + [script_pathname])
-
-      Hbc::FakeSystemCommand.expects_command(
-        sudo(cask.staged_path.join("MyFancyPkg", "FancyUninstaller.tool"), "--please"),
-      )
-
-      InstallHelper.install_without_artifacts(cask)
-      subject
-    end
-  end
-
-  context "using :early_script" do
-    let(:cask) { Hbc::CaskLoader.load_from_file(TEST_FIXTURE_DIR/"cask/Casks/with-#{artifact_name}-early-script.rb") }
-    let(:script_pathname) { cask.staged_path.join("MyFancyPkg", "FancyUninstaller.tool") }
-
-    it "is supported" do
-      Hbc::FakeSystemCommand.expects_command(%w[/bin/chmod -- +x] + [script_pathname])
-
-      Hbc::FakeSystemCommand.expects_command(
-        sudo(cask.staged_path.join("MyFancyPkg", "FancyUninstaller.tool"), "--please"),
-      )
+  [:script, :early_script].each do |script_type|
+    context "using #{script_type.inspect}" do
+      let(:fake_system_command) { Hbc::NeverSudoSystemCommand }
+      let(:token) { "with-#{artifact_name}-#{script_type}".tr("_", "-") }
+      let(:cask) { Hbc::CaskLoader.load_from_file(TEST_FIXTURE_DIR/"cask/Casks/#{token}.rb") }
+      let(:script_pathname) { cask.staged_path.join("MyFancyPkg", "FancyUninstaller.tool") }
 
-      InstallHelper.install_without_artifacts(cask)
-      subject
+      it "is supported" do
+        allow(fake_system_command).to receive(:run).with(any_args).and_call_original
+
+        expect(fake_system_command).to receive(:run).with(
+          "/bin/chmod",
+          args: ["--", "+x", script_pathname],
+        )
+
+        expect(fake_system_command).to receive(:run).with(
+          cask.staged_path.join("MyFancyPkg", "FancyUninstaller.tool"),
+          args: ["--please"],
+          must_succeed: true,
+          print_stdout: true,
+          sudo: false,
+        )
+
+        InstallHelper.install_without_artifacts(cask)
+        subject
+      end
     end
   end
 
-- 
GitLab