From 42d90f8bd9974d4ee860b6cd942ff31b9eb96b87 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Mon, 25 Feb 2019 21:05:35 +0100 Subject: [PATCH] Use same logic for `installer script:` and `uninstall script:`. --- .../cask/artifact/abstract_artifact.rb | 18 ++++++++++++++++++ .../cask/artifact/abstract_uninstall.rb | 6 +++--- Library/Homebrew/cask/artifact/installer.rb | 16 ++-------------- .../artifact/shared_examples/uninstall_zap.rb | 5 ----- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/Library/Homebrew/cask/artifact/abstract_artifact.rb b/Library/Homebrew/cask/artifact/abstract_artifact.rb index 66dea2b617..452c854e95 100644 --- a/Library/Homebrew/cask/artifact/abstract_artifact.rb +++ b/Library/Homebrew/cask/artifact/abstract_artifact.rb @@ -20,6 +20,24 @@ module Cask @dirmethod ||= "#{dsl_key}dir".to_sym end + def staged_path_join_executable(path) + path = Pathname(path) + + absolute_path = if path.absolute? + path + else + cask.staged_path.join(path) + end + + FileUtils.chmod "+x", absolute_path if absolute_path.exist? && !absolute_path.executable? + + if absolute_path.exist? + absolute_path + else + path + end + end + def <=>(other) return unless other.class < AbstractArtifact return 0 if self.class == other.class diff --git a/Library/Homebrew/cask/artifact/abstract_uninstall.rb b/Library/Homebrew/cask/artifact/abstract_uninstall.rb index 47e3d6cded..9cca7f11b9 100644 --- a/Library/Homebrew/cask/artifact/abstract_uninstall.rb +++ b/Library/Homebrew/cask/artifact/abstract_uninstall.rb @@ -243,9 +243,10 @@ module Cask ohai "Running uninstall script #{executable}" raise CaskInvalidError.new(cask, "#{stanza} :#{directive_name} without :executable.") if executable.nil? - executable_path = cask.staged_path.join(executable) + executable_path = staged_path_join_executable(executable) - unless executable_path.exist? + if (executable_path.absolute? && !executable_path.exist?) || + (!executable_path.absolute? && (which executable_path).nil?) message = "uninstall script #{executable} does not exist" raise CaskError, "#{message}." unless force @@ -253,7 +254,6 @@ module Cask return end - command.run("/bin/chmod", args: ["--", "+x", executable_path]) command.run(executable_path, script_arguments) sleep 1 end diff --git a/Library/Homebrew/cask/artifact/installer.rb b/Library/Homebrew/cask/artifact/installer.rb index 9f417617ec..51733f9a92 100644 --- a/Library/Homebrew/cask/artifact/installer.rb +++ b/Library/Homebrew/cask/artifact/installer.rb @@ -26,22 +26,10 @@ module Cask def install_phase(command: nil, **_) ohai "Running #{self.class.dsl_key} script '#{path}'" - absolute_path = if path.absolute? - path - else - cask.staged_path.join(path) - end - - FileUtils.chmod "+x", absolute_path if absolute_path.exist? && !absolute_path.executable? - - executable = if absolute_path.exist? - absolute_path - else - path - end + executable_path = staged_path_join_executable(path) command.run!( - executable, + executable_path, **args, env: { "PATH" => PATH.new( HOMEBREW_PREFIX/"bin", HOMEBREW_PREFIX/"sbin", ENV["PATH"] diff --git a/Library/Homebrew/test/cask/artifact/shared_examples/uninstall_zap.rb b/Library/Homebrew/test/cask/artifact/shared_examples/uninstall_zap.rb index 4b6f1bca27..c89c572d56 100644 --- a/Library/Homebrew/test/cask/artifact/shared_examples/uninstall_zap.rb +++ b/Library/Homebrew/test/cask/artifact/shared_examples/uninstall_zap.rb @@ -228,11 +228,6 @@ shared_examples "#uninstall_phase or #zap_phase" do 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"],