Merge pull request #10831 from nandahkrishna/cask-autotap

cask_loader: do not auto-tap in FromTapLoader
This commit is contained in:
Nanda H Krishna 2021-03-12 20:10:38 +05:30 committed by GitHub
commit 1e3dab1401
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 55 additions and 1 deletions

View File

@ -157,7 +157,7 @@ module Cask
end
def load(config:)
tap.install unless tap.installed?
raise TapCaskUnavailableError.new(tap, token) unless tap.installed?
super
end

View File

@ -103,6 +103,27 @@ module Cask
end
end
# Error when a cask in a specific tap is not available.
#
# @api private
class TapCaskUnavailableError < CaskUnavailableError
extend T::Sig
attr_reader :tap
def initialize(tap, token)
super("#{tap}/#{token}")
@tap = tap
end
sig { returns(String) }
def to_s
s = super
s += "\nPlease tap it and then try again: brew tap #{tap}" unless tap.installed?
s
end
end
# Error when a cask already exists.
#
# @api private

View File

@ -132,6 +132,12 @@ module Homebrew
raise unreadable_error if unreadable_error.present?
user, repo, short_name = name.downcase.split("/", 3)
if repo.present? && short_name.present?
tap = Tap.fetch(user, repo)
raise TapFormulaOrCaskUnavailableError.new(tap, short_name)
end
raise FormulaOrCaskUnavailableError, name
end
private :load_formula_or_cask

View File

@ -97,6 +97,25 @@ class FormulaOrCaskUnavailableError < RuntimeError
end
end
# Raised when a formula or cask in a specific tap is not available.
class TapFormulaOrCaskUnavailableError < FormulaOrCaskUnavailableError
extend T::Sig
attr_reader :tap
def initialize(tap, name)
super "#{tap}/#{name}"
@tap = tap
end
sig { returns(String) }
def to_s
s = super
s += "\nPlease tap it and then try again: brew tap #{tap}" unless tap.installed?
s
end
end
# Raised when a formula is not available.
class FormulaUnavailableError < FormulaOrCaskUnavailableError
extend T::Sig

View File

@ -34,6 +34,14 @@ describe "Exception" do
}
end
describe TapFormulaOrCaskUnavailableError do
subject(:error) { described_class.new(tap, "foo") }
let(:tap) { double(Tap, user: "u", repo: "r", to_s: "u/r", installed?: false) }
its(:to_s) { is_expected.to match(%r{Please tap it and then try again: brew tap u/r}) }
end
describe FormulaUnavailableError do
subject(:error) { described_class.new("foo") }