cask_reason will suggest brew cask uninstall
This commit is contained in:
parent
a98bbbc644
commit
ecc7b9e174
@ -42,6 +42,7 @@ module HomebrewArgvExtension
|
|||||||
def kegs
|
def kegs
|
||||||
require "keg"
|
require "keg"
|
||||||
require "formula"
|
require "formula"
|
||||||
|
require "missing_formula"
|
||||||
# TODO: use @instance variable to ||= cache when moving to CLI::Parser
|
# TODO: use @instance variable to ||= cache when moving to CLI::Parser
|
||||||
downcased_unique_named.map do |name|
|
downcased_unique_named.map do |name|
|
||||||
raise UsageError if name.empty?
|
raise UsageError if name.empty?
|
||||||
@ -50,7 +51,12 @@ module HomebrewArgvExtension
|
|||||||
|
|
||||||
dirs = rack.directory? ? rack.subdirs : []
|
dirs = rack.directory? ? rack.subdirs : []
|
||||||
|
|
||||||
raise NoSuchKegError, rack.basename if dirs.empty?
|
if dirs.empty?
|
||||||
|
if (reason = Homebrew::MissingFormula.suggest_command(name, "uninstall"))
|
||||||
|
$stderr.puts reason
|
||||||
|
end
|
||||||
|
raise NoSuchKegError, rack.basename
|
||||||
|
end
|
||||||
|
|
||||||
linked_keg_ref = HOMEBREW_LINKED_KEGS/rack.basename
|
linked_keg_ref = HOMEBREW_LINKED_KEGS/rack.basename
|
||||||
opt_prefix = HOMEBREW_PREFIX/"opt/#{rack.basename}"
|
opt_prefix = HOMEBREW_PREFIX/"opt/#{rack.basename}"
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "cask/cmd/abstract_command"
|
||||||
|
require "cask/cmd/info"
|
||||||
|
require "cask/cask_loader"
|
||||||
|
require "cask/caskroom"
|
||||||
|
|
||||||
module Homebrew
|
module Homebrew
|
||||||
module MissingFormula
|
module MissingFormula
|
||||||
class << self
|
class << self
|
||||||
@ -17,14 +22,32 @@ module Homebrew
|
|||||||
def cask_reason(name, silent: false, show_info: false)
|
def cask_reason(name, silent: false, show_info: false)
|
||||||
return if silent
|
return if silent
|
||||||
|
|
||||||
cask = Cask::CaskLoader.load(name)
|
suggest_command(name, show_info ? "info" : "install")
|
||||||
reason = +"Found a cask named \"#{name}\" instead.\n"
|
end
|
||||||
if show_info
|
|
||||||
reason << Cask::Cmd::Info.get_info(cask)
|
def suggest_command(name, command)
|
||||||
|
suggestion = <<~EOS
|
||||||
|
Found a cask named "#{name}" instead. Try
|
||||||
|
brew cask #{command} #{name}
|
||||||
|
|
||||||
|
EOS
|
||||||
|
case command
|
||||||
|
when "install"
|
||||||
|
Cask::CaskLoader.load(name)
|
||||||
|
when "uninstall"
|
||||||
|
cask = Cask::Caskroom.casks.find { |installed_cask| installed_cask.to_s == name }
|
||||||
|
raise Cask::CaskUnavailableError, name if cask.nil?
|
||||||
|
when "info"
|
||||||
|
cask = Cask::CaskLoader.load(name)
|
||||||
|
suggestion = <<~EOS
|
||||||
|
Found a cask named "#{name}" instead.
|
||||||
|
|
||||||
|
#{Cask::Cmd::Info.get_info(cask)}
|
||||||
|
EOS
|
||||||
else
|
else
|
||||||
reason << "Did you mean to type \"brew cask install #{name}\"?\n"
|
return
|
||||||
end
|
end
|
||||||
reason.freeze
|
suggestion
|
||||||
rescue Cask::CaskUnavailableError
|
rescue Cask::CaskUnavailableError
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "formulary"
|
require "formulary"
|
||||||
require "cask/cmd/abstract_command"
|
|
||||||
require "cask/cmd/info"
|
|
||||||
require "cask/cask_loader"
|
|
||||||
|
|
||||||
module Homebrew
|
module Homebrew
|
||||||
module MissingFormula
|
module MissingFormula
|
||||||
@ -198,6 +195,8 @@ module Homebrew
|
|||||||
|
|
||||||
def cask_reason(name, silent: false, show_info: false); end
|
def cask_reason(name, silent: false, show_info: false); end
|
||||||
|
|
||||||
|
def suggest_command(name, command); end
|
||||||
|
|
||||||
require "extend/os/missing_formula"
|
require "extend/os/missing_formula"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -100,14 +100,14 @@ describe Homebrew::MissingFormula do
|
|||||||
let(:show_info) { false }
|
let(:show_info) { false }
|
||||||
|
|
||||||
it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
|
it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
|
||||||
it { is_expected.to match(/Did you mean to type "brew cask install local-caffeine"?/) }
|
it { is_expected.to match(/Try\n brew cask install local-caffeine/) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with a formula name that is a cask and show_info: true" do
|
context "with a formula name that is a cask and show_info: true" do
|
||||||
let(:formula) { "local-caffeine" }
|
let(:formula) { "local-caffeine" }
|
||||||
let(:show_info) { true }
|
let(:show_info) { true }
|
||||||
|
|
||||||
it { is_expected.to match(/Found a cask named "local-caffeine" instead.\nlocal-caffeine: 1.2.3\n/) }
|
it { is_expected.to match(/Found a cask named "local-caffeine" instead.\n\nlocal-caffeine: 1.2.3\n/) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with a formula name that is not a cask" do
|
context "with a formula name that is not a cask" do
|
||||||
@ -117,4 +117,40 @@ describe Homebrew::MissingFormula do
|
|||||||
it { is_expected.to be_nil }
|
it { is_expected.to be_nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "::suggest_command", :cask do
|
||||||
|
subject { described_class.suggest_command(name, command) }
|
||||||
|
|
||||||
|
context "brew install" do
|
||||||
|
let(:name) { "local-caffeine" }
|
||||||
|
let(:command) { "install" }
|
||||||
|
|
||||||
|
it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
|
||||||
|
it { is_expected.to match(/Try\n brew cask install local-caffeine/) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "brew uninstall" do
|
||||||
|
let(:name) { "local-caffeine" }
|
||||||
|
let(:command) { "uninstall" }
|
||||||
|
|
||||||
|
it { is_expected.to be_nil }
|
||||||
|
|
||||||
|
context "with described cask installed" do
|
||||||
|
before do
|
||||||
|
allow(Cask::Caskroom).to receive(:casks).and_return(["local-caffeine"])
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
|
||||||
|
it { is_expected.to match(/Try\n brew cask uninstall local-caffeine/) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "brew info" do
|
||||||
|
let(:name) { "local-caffeine" }
|
||||||
|
let(:command) { "info" }
|
||||||
|
|
||||||
|
it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
|
||||||
|
it { is_expected.to match(/local-caffeine: 1.2.3/) }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user