diff --git a/Library/Homebrew/cask/artifact/installer.rb b/Library/Homebrew/cask/artifact/installer.rb index 4b7bda3f8c..9033160770 100644 --- a/Library/Homebrew/cask/artifact/installer.rb +++ b/Library/Homebrew/cask/artifact/installer.rb @@ -13,22 +13,14 @@ module Cask :script, ]).freeze - # Extension module for manual installers. - module ManualInstaller - def install_phase(**) + def install_phase(command: nil, **_) + if manual_install puts <<~EOS Cask #{cask} only provides a manual installer. To run it and complete the installation: open #{cask.staged_path.join(path).to_s.shellescape} EOS - end - end - - # Extension module for script installers. - module ScriptInstaller - def install_phase(command: nil, **_) - # TODO: The `T.unsafe` is a false positive that is unnecessary in newer releasese of Sorbet - # (confirmend with sorbet v0.5.10672) - ohai "Running #{T.unsafe(self.class).dsl_key} script '#{path}'" + else + ohai "Running #{self.class.dsl_key} script '#{path}'" executable_path = staged_path_join_executable(path) @@ -69,32 +61,33 @@ module Cask attr_reader :path, :args + sig { returns(T::Boolean) } + attr_reader :manual_install + def initialize(cask, **args) super if args.key?(:manual) @path = Pathname(args[:manual]) @args = [] - extend(ManualInstaller) - return + @manual_install = true + else + path, @args = self.class.read_script_arguments( + args[:script], self.class.dsl_key.to_s, { must_succeed: true, sudo: false }, print_stdout: true + ) + raise CaskInvalidError.new(cask, "#{self.class.dsl_key} missing executable") if path.nil? + + @path = Pathname(path) + @manual_install = false end - - path, @args = self.class.read_script_arguments( - args[:script], self.class.dsl_key.to_s, { must_succeed: true, sudo: false }, print_stdout: true - ) - raise CaskInvalidError.new(cask, "#{self.class.dsl_key} missing executable") if path.nil? - - @path = Pathname(path) - extend(ScriptInstaller) end - def summarize - path.to_s - end + sig { override.returns(String) } + def summarize = path.to_s def to_h { path: }.tap do |h| - h[:args] = args unless is_a?(ManualInstaller) + h[:args] = args unless manual_install end end end diff --git a/Library/Homebrew/cask/artifact/installer.rbi b/Library/Homebrew/cask/artifact/installer.rbi deleted file mode 100644 index 5715d2d78a..0000000000 --- a/Library/Homebrew/cask/artifact/installer.rbi +++ /dev/null @@ -1,11 +0,0 @@ -# typed: strict - -module Cask::Artifact::Installer::ManualInstaller - include Kernel - requires_ancestor { Cask::Artifact::Installer } -end - -module Cask::Artifact::Installer::ScriptInstaller - requires_ancestor { Cask::Artifact::Installer } - requires_ancestor { Cask::Artifact::AbstractArtifact } -end diff --git a/Library/Homebrew/cask/upgrade.rb b/Library/Homebrew/cask/upgrade.rb index d822dd6802..89dade90e9 100644 --- a/Library/Homebrew/cask/upgrade.rb +++ b/Library/Homebrew/cask/upgrade.rb @@ -65,7 +65,9 @@ module Cask end manual_installer_casks = outdated_casks.select do |cask| - cask.artifacts.any?(Artifact::Installer::ManualInstaller) + cask.artifacts.any? do |artifact| + artifact.is_a?(Artifact::Installer) && artifact.manual_install + end end if manual_installer_casks.present? diff --git a/Library/Homebrew/test/cask/dsl_spec.rb b/Library/Homebrew/test/cask/dsl_spec.rb index ab3131968e..b799279c02 100644 --- a/Library/Homebrew/test/cask/dsl_spec.rb +++ b/Library/Homebrew/test/cask/dsl_spec.rb @@ -501,7 +501,7 @@ RSpec.describe Cask::DSL, :cask do it "allows installer manual to be specified" do installer = cask.artifacts.first - expect(installer).to be_a(Cask::Artifact::Installer::ManualInstaller) + expect(installer.instance_variable_get(:@manual_install)).to be true expect(installer.path).to eq(Pathname("Caffeine.app")) end end