Skip to content

Commit

Permalink
Merge pull request #18808 from Homebrew/feat/cask/block_install
Browse files Browse the repository at this point in the history
feat: only block cask install on Linux
  • Loading branch information
MikeMcQuaid authored Dec 16, 2024
2 parents 6c14bcb + cb23433 commit 640f215
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 27 deletions.
9 changes: 9 additions & 0 deletions Library/Homebrew/cask/installer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -280,11 +280,18 @@ def install_artifacts(predecessor: nil)
end
end

sig { void }
def check_requirements
check_stanza_os_requirements
check_macos_requirements
check_arch_requirements
end

sig { void }
def check_stanza_os_requirements
nil
end

def check_macos_requirements
return unless @cask.depends_on.macos
return if @cask.depends_on.macos.satisfied?
Expand Down Expand Up @@ -710,3 +717,5 @@ def load_cask_from_source_api!
end
end
end

require "extend/os/cask/installer"
4 changes: 4 additions & 0 deletions Library/Homebrew/extend/os/cask/installer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# typed: strict
# frozen_string_literal: true

require "extend/os/linux/cask/installer" if OS.linux?
23 changes: 23 additions & 0 deletions Library/Homebrew/extend/os/linux/cask/installer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# typed: strict
# frozen_string_literal: true

module OS
module Linux
module Cask
module Installer
private

extend T::Helpers

requires_ancestor { ::Cask::Installer }

sig { void }
def check_stanza_os_requirements
raise ::Cask::CaskError, "macOS is required for this software."
end
end
end
end
end

Cask::Installer.prepend(OS::Linux::Cask::Installer)
12 changes: 2 additions & 10 deletions Library/Homebrew/extend/os/linux/cli/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,9 @@ module Parser

sig { void }
def set_default_options
args.set_arg(:formula?, true)
end
return if args.only_formula_or_cask == :cask

sig { void }
def validate_options
return unless args.respond_to?(:cask?)
return unless T.unsafe(self).args.cask?

# NOTE: We don't raise an error here because we don't want
# to print the help page or a stack trace.
odie "Invalid `--cask` usage: Casks do not work on Linux"
args.set_arg(:formula?, true)
end
end
end
Expand Down
26 changes: 9 additions & 17 deletions Library/Homebrew/test/cli/parser_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -574,13 +574,6 @@
end
end

it "throws an error when defined" do
expect { parser.parse(["--cask"]) }
.to output("Error: Invalid `--cask` usage: Casks do not work on Linux\n").to_stderr
.and not_to_output.to_stdout
.and raise_exception SystemExit
end

# Developers want to be able to use `audit` and `bump`
# commands for formulae and casks on Linux.
it "succeeds for developer commands" do
Expand All @@ -599,18 +592,9 @@
end
end

it "throws an error when --cask defined" do
expect { parser.parse(["--cask"]) }
.to output("Error: Invalid `--cask` usage: Casks do not work on Linux\n").to_stderr
.and not_to_output.to_stdout
.and raise_exception SystemExit
end

it "throws an error when both defined" do
expect { parser.parse(["--cask", "--formula"]) }
.to output("Error: Invalid `--cask` usage: Casks do not work on Linux\n").to_stderr
.and not_to_output.to_stdout
.and raise_exception SystemExit
.to raise_exception Homebrew::CLI::OptionConflictError
end
end
end
Expand All @@ -629,5 +613,13 @@
args = parser.parse([])
expect(args.formula?).to be(true)
end

it "does not set --formula to true when --cask" do
parser = described_class.new(Cmd) do
switch "--cask"
end
args = parser.parse([])
expect(args.respond_to?(:formula?)).to be(false)
end
end
end

0 comments on commit 640f215

Please sign in to comment.