Merge pull request #10397 from MikeMcQuaid/deprecations-disables

Homebrew 3.0.0 deprecations/disables
This commit is contained in:
Mike McQuaid 2021-02-01 08:37:22 +00:00 committed by GitHub
commit b8d55e5a77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
94 changed files with 98 additions and 2440 deletions

View File

@ -72,6 +72,7 @@ begin
ARGV.delete_at(help_cmd_index) if help_cmd_index
require "cli/parser"
args = Homebrew::CLI::Parser.new.parse(ARGV.dup.freeze, ignore_invalid_options: true)
Context.current = args.context
@ -111,8 +112,7 @@ begin
# - a help flag is passed AND a command is matched
# - a help flag is passed AND there is no command specified
# - no arguments are passed
# - if cmd is Cask, let Cask handle the help command instead
if (empty_argv || help_flag) && cmd != "cask"
if empty_argv || help_flag
require "help"
Homebrew::Help.help cmd, remaining_args: args.remaining, empty_argv: empty_argv
# `Homebrew::Help.help` never returns, except for unknown commands.

View File

@ -10,29 +10,16 @@ require "extend/optparse"
require "cask/config"
require "cask/cmd/abstract_command"
require "cask/cmd/--cache"
require "cask/cmd/audit"
require "cask/cmd/cat"
require "cask/cmd/create"
require "cask/cmd/doctor"
require "cask/cmd/edit"
require "cask/cmd/fetch"
require "cask/cmd/help"
require "cask/cmd/home"
require "cask/cmd/info"
require "cask/cmd/install"
require "cask/cmd/list"
require "cask/cmd/outdated"
require "cask/cmd/reinstall"
require "cask/cmd/style"
require "cask/cmd/uninstall"
require "cask/cmd/upgrade"
require "cask/cmd/zap"
require "cask/cmd/abstract_internal_command"
require "cask/cmd/internal_help"
require "cask/cmd/internal_stanza"
module Cask
# Implementation of the `brew cask` command-line interface.
#
@ -42,221 +29,12 @@ module Cask
include Context
ALIASES = {
"ls" => "list",
"homepage" => "home",
"instal" => "install", # gem does the same
"uninstal" => "uninstall",
"rm" => "uninstall",
"remove" => "uninstall",
"abv" => "info",
"dr" => "doctor",
}.freeze
DEPRECATED_COMMANDS = {
Cmd::Cache => "brew --cache [--cask]",
Cmd::Audit => "brew audit [--cask]",
Cmd::Cat => "brew cat [--cask]",
Cmd::Create => "brew create --cask --set-name <name> <url>",
Cmd::Doctor => "brew doctor --verbose",
Cmd::Edit => "brew edit [--cask]",
Cmd::Fetch => "brew fetch [--cask]",
Cmd::Help => "brew help",
Cmd::Home => "brew home",
Cmd::Info => "brew info [--cask]",
Cmd::Install => "brew install [--cask]",
Cmd::List => "brew list [--cask]",
Cmd::Outdated => "brew outdated [--cask]",
Cmd::Reinstall => "brew reinstall [--cask]",
Cmd::Style => "brew style",
Cmd::Uninstall => "brew uninstall [--cask]",
Cmd::Upgrade => "brew upgrade [--cask]",
Cmd::Zap => "brew uninstall --zap [--cask]",
}.freeze
def self.parser(&block)
Homebrew::CLI::Parser.new do
if block
instance_eval(&block)
else
usage_banner <<~EOS
`cask` <command> [<options>] [<cask>]
Homebrew Cask provides a friendly CLI workflow for the administration of macOS applications distributed as binaries.
See also: `man brew`
EOS
end
instance_eval(&block) if block
cask_options
end
end
def self.command_classes
@command_classes ||= constants.map(&method(:const_get))
.select { |klass| klass.is_a?(Class) && klass < AbstractCommand }
.reject(&:abstract?)
.sort_by(&:command_name)
end
def self.commands
@commands ||= command_classes.map(&:command_name)
end
def self.lookup_command(command_name)
@lookup ||= Hash[commands.zip(command_classes)]
command_name = ALIASES.fetch(command_name, command_name)
@lookup.fetch(command_name, nil)
end
def self.aliases
ALIASES
end
def self.run(*args)
new(*args).run
end
def initialize(*args)
@argv = args
end
def find_external_command(command)
@tap_cmd_directories ||= Tap.cmd_directories
@path ||= PATH.new(@tap_cmd_directories, ENV["HOMEBREW_PATH"])
external_ruby_cmd = @tap_cmd_directories.map { |d| d/"brewcask-#{command}.rb" }
.find(&:file?)
external_ruby_cmd ||= which("brewcask-#{command}.rb", @path)
if external_ruby_cmd
ExternalRubyCommand.new(command, external_ruby_cmd)
elsif external_command = which("brewcask-#{command}", @path)
ExternalCommand.new(external_command)
end
end
def detect_internal_command(*args)
args.each_with_index do |arg, i|
if command = self.class.lookup_command(arg)
args.delete_at(i)
return [command, args]
elsif !arg.start_with?("-")
break
end
end
nil
end
def detect_external_command(*args)
args.each_with_index do |arg, i|
if command = find_external_command(arg)
args.delete_at(i)
return [command, args]
elsif !arg.start_with?("-")
break
end
end
nil
end
def run
argv = @argv
args = self.class.parser.parse(argv, ignore_invalid_options: true)
Tap.install_default_cask_tap_if_necessary
command, argv = detect_internal_command(*argv) ||
detect_external_command(*argv) ||
[args.remaining.empty? ? NullCommand : UnknownSubcommand.new(args.remaining.first), argv]
if (replacement = DEPRECATED_COMMANDS[command])
odisabled "`brew cask #{command.command_name}`", replacement
end
if args.help?
puts command.help
else
command.run(*argv)
end
rescue CaskError, MethodDeprecatedError, ArgumentError => e
onoe e.message
$stderr.puts e.backtrace if args.debug?
exit 1
end
# Wrapper class for running an external Ruby command.
class ExternalRubyCommand
def initialize(command, path)
@command_name = command.to_s.capitalize.to_sym
@path = path
end
def run(*args)
command_class&.run(*args)
end
def help
command_class&.help
end
private
def command_class
return @command_class if defined?(@command_class)
require @path
@command_class = begin
Cmd.const_get(@command_name)
rescue NameError
nil
end
end
end
# Wrapper class for running an external command.
class ExternalCommand
def initialize(path)
@path = path
end
def run(*argv)
exec @path, *argv
end
def help
exec @path, "--help"
end
end
# Helper class for showing help for unknown subcommands.
class UnknownSubcommand
def initialize(command_name)
@command_name = command_name
end
def run(*)
raise UsageError, "Subcommand `#{@command_name}` does not exist."
end
def help
run
end
end
# Helper class for showing help when no subcommand is given.
class NullCommand
def self.run(*)
raise UsageError, "No subcommand given."
end
def self.help
Cmd.parser.generate_help_text
end
end
end
end

View File

@ -1,41 +0,0 @@
# typed: true
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask --cache` command.
#
# @api private
class Cache < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
sig { returns(String) }
def self.description
"Display the file used to cache a <cask>."
end
sig { returns(String) }
def self.command_name
"--cache"
end
sig { void }
def run
casks.each do |cask|
puts self.class.cached_location(cask)
end
end
def self.cached_location(cask)
require "cask/download"
Download.new(cask).downloader.cached_location
end
end
end
end

View File

@ -5,7 +5,7 @@ require "search"
module Cask
class Cmd
# Abstract superclass for all `brew cask` commands.
# Abstract superclass for all Cask implementations of commands.
#
# @api private
class AbstractCommand
@ -14,32 +14,6 @@ module Cask
include Homebrew::Search
sig { returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
nil
end
sig { returns(T.nilable(Integer)) }
def self.max_named
nil
end
sig { returns(String) }
def self.banner_args
if min_named == :cask && max_named != 1
" <cask>"
elsif max_named&.zero?
""
else
" [<cask>]"
end
end
sig { returns(String) }
def self.banner_headline
"`#{command_name}` [<options>]#{banner_args}"
end
OPTIONS = [
[:switch, "--[no-]binaries", {
description: "Disable/enable linking of helper executables (default: enabled).",
@ -56,26 +30,12 @@ module Cask
].freeze
def self.parser(&block)
banner = <<~EOS
`cask` #{banner_headline}
#{description}
EOS
min_n = min_named
max_n = max_named
Cmd.parser do
usage_banner banner
instance_eval(&block) if block
OPTIONS.each do |option|
send(*option)
end
min_named min_n unless min_n.nil?
max_named max_n unless max_n.nil?
end
end

View File

@ -1,23 +0,0 @@
# typed: strict
# frozen_string_literal: true
module Cask
class Cmd
# Abstract superclass for all internal `brew cask` commands.
#
# @api private
class AbstractInternalCommand < AbstractCommand
extend T::Sig
sig { returns(String) }
def self.command_name
super.sub(/^internal_/i, "_")
end
sig { returns(T::Boolean) }
def self.visible?
false
end
end
end
end

View File

@ -5,22 +5,12 @@ require "utils/github/actions"
module Cask
class Cmd
# Implementation of the `brew cask audit` command.
# Cask implementation of the `brew audit` command.
#
# @api private
class Audit < AbstractCommand
extend T::Sig
sig { returns(String) }
def self.description
<<~EOS
Check <cask> for Homebrew coding style violations. This should be run before
submitting a new cask. If no <cask> is provided, checks all locally
available casks. Will exit with a non-zero status if any errors are
found, which can be useful for implementing pre-commit hooks.
EOS
end
def self.parser
super do
switch "--download",

View File

@ -1,35 +0,0 @@
# typed: strict
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask cat` command.
#
# @api private
class Cat < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
sig { returns(String) }
def self.description
"Dump raw source of a <cask> to the standard output."
end
sig { void }
def run
casks.each do |cask|
if Homebrew::EnvConfig.bat?
ENV["BAT_CONFIG_PATH"] = Homebrew::EnvConfig.bat_config_path
safe_system "#{HOMEBREW_PREFIX}/bin/bat", cask.sourcefile_path
else
puts File.open(cask.sourcefile_path, &:read)
end
end
end
end
end
end

View File

@ -1,64 +0,0 @@
# typed: true
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask create` command.
#
# @api private
class Create < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
sig { override.returns(T.nilable(Integer)) }
def self.max_named
1
end
sig { returns(String) }
def self.description
"Creates the given <cask> and opens it in an editor."
end
def initialize(*)
super
rescue Homebrew::CLI::MaxNamedArgumentsError
raise UsageError, "Only one cask can be created at a time."
end
sig { void }
def run
cask_token = args.named.first
cask_path = CaskLoader.path(cask_token)
raise CaskAlreadyCreatedError, cask_token if cask_path.exist?
odebug "Creating Cask #{cask_token}"
File.open(cask_path, "w") do |f|
f.write self.class.template(cask_token)
end
exec_editor cask_path
end
def self.template(cask_token)
<<~RUBY
cask "#{cask_token}" do
version ""
sha256 ""
url "https://"
name ""
desc ""
homepage ""
app ""
end
RUBY
end
end
end
end

View File

@ -1,42 +0,0 @@
# typed: false
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask doctor` command.
#
# @api private
class Doctor < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(Integer)) }
def self.max_named
0
end
sig { returns(String) }
def self.description
"Checks for configuration issues."
end
sig { void }
def run
require "diagnostic"
success = T.let(true, T::Boolean)
checks = Homebrew::Diagnostic::Checks.new(verbose: true)
checks.cask_checks.each do |check|
out = checks.send(check)
if out.present?
success = false
puts out
end
end
raise CaskError, "There are some problems with your setup." unless success
end
end
end
end

View File

@ -1,54 +0,0 @@
# typed: true
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask edit` command.
#
# @api private
class Edit < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
sig { override.returns(T.nilable(Integer)) }
def self.max_named
1
end
sig { returns(String) }
def self.description
"Open the given <cask> for editing."
end
def initialize(*)
super
rescue Homebrew::CLI::MaxNamedArgumentsError
raise UsageError, "Only one cask can be edited at a time."
end
sig { void }
def run
exec_editor cask_path
rescue CaskUnavailableError => e
reason = e.reason.empty? ? +"" : +"#{e.reason} "
reason.concat(
"Run #{Formatter.identifier("brew create --cask --set-name #{e.token} <url>")} to create a new Cask.",
)
raise e.class.new(e.token, reason.freeze)
end
def cask_path
casks.first.sourcefile_path
rescue CaskInvalidError, CaskUnreadableError, MethodDeprecatedError
path = CaskLoader.path(args.first)
return path if path.file?
raise
end
end
end
end

View File

@ -3,17 +3,12 @@
module Cask
class Cmd
# Implementation of the `brew cask fetch` command.
# Cask implementation of the `brew fetch` command.
#
# @api private
class Fetch < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
def self.parser
super do
switch "--force",
@ -21,11 +16,6 @@ module Cask
end
end
sig { returns(String) }
def self.description
"Downloads remote application files to local cache."
end
sig { void }
def run
require "cask/download"

View File

@ -1,42 +0,0 @@
# typed: true
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask help` command.
#
# @api private
class Help < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(Integer)) }
def self.max_named
1
end
sig { returns(String) }
def self.description
"Print help for `cask` commands."
end
sig { void }
def run
if args.named.empty?
puts Cmd.parser.generate_help_text
else
command_name = args.named.first
unless command = self.class.commands[command_name]
raise "No help information found for command '#{command_name}'."
end
puts command.help
end
end
def self.commands
Cmd.command_classes.select(&:visible?).index_by(&:command_name)
end
end
end
end

View File

@ -1,35 +0,0 @@
# typed: true
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask home` command.
#
# @api private
class Home < AbstractCommand
extend T::Sig
sig { returns(String) }
def self.description
"Opens the homepage of the given <cask>. If no cask is given, opens the Homebrew homepage."
end
sig { void }
def run
if casks.none?
odebug "Opening project homepage"
self.class.open_url "https://brew.sh/"
else
casks.each do |cask|
odebug "Opening homepage for Cask #{cask}"
self.class.open_url cask.homepage
end
end
end
def self.open_url(url)
SystemCommand.run!(OS::PATH_OPEN, args: ["--", url])
end
end
end
end

View File

@ -5,22 +5,12 @@ require "json"
module Cask
class Cmd
# Implementation of the `brew cask info` command.
# Cask implementation of the `brew info` command.
#
# @api private
class Info < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
sig { returns(String) }
def self.description
"Displays information about the given <cask>."
end
def self.parser
super do
flag "--json=",

View File

@ -3,22 +3,12 @@
module Cask
class Cmd
# Implementation of the `brew cask install` command.
# Cask implementation of the `brew install` command.
#
# @api private
class Install < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
sig { returns(String) }
def self.description
"Installs the given <cask>."
end
OPTIONS = [
[:switch, "--skip-cask-deps", {
description: "Skip installing cask dependencies.",

View File

@ -1,35 +0,0 @@
# typed: strict
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask _help` command.
#
# @api private
class InternalHelp < AbstractInternalCommand
extend T::Sig
sig { override.returns(T.nilable(Integer)) }
def self.max_named
0
end
sig { returns(String) }
def self.description
"Print help for unstable internal-use commands."
end
sig { void }
def run
max_command_len = Cmd.commands.map(&:length).max
puts "Unstable Internal-use Commands:\n\n"
Cmd.command_classes.each do |klass|
next if klass.visible?
puts " #{klass.command_name.ljust(max_command_len)} #{klass.help}"
end
puts "\n"
end
end
end
end

View File

@ -1,127 +0,0 @@
# typed: false
# frozen_string_literal: true
require "cask/dsl"
module Cask
class Cmd
# Implementation of the `brew cask _stanza` command.
#
# @api private
class InternalStanza < AbstractInternalCommand
extend T::Sig
# Syntax
#
# brew cask _stanza <stanza_name> [ --quiet ] [ --table | --yaml ] [ <cask_token> ... ]
#
# If no tokens are given, then data for all casks is returned.
#
# The pseudo-stanza "artifacts" is available.
#
# On failure, a blank line is returned on the standard output.
#
ARTIFACTS =
(DSL::ORDINARY_ARTIFACT_CLASSES.map(&:dsl_key) +
DSL::ARTIFACT_BLOCK_CLASSES.map(&:dsl_key)).freeze
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
1
end
sig { returns(String) }
def self.banner_args
" <stanza_name> [<cask>]"
end
sig { returns(String) }
def self.description
<<~EOS
Extract and render a specific stanza for the given <cask>.
Examples:
`brew cask _stanza appcast --table`
`brew cask _stanza app --table alfred google-chrome vagrant`
`brew cask _stanza url --table alfred google-chrome vagrant`
`brew cask _stanza version --table alfred google-chrome vagrant`
`brew cask _stanza artifacts --table alfred google-chrome vagrant`
`brew cask _stanza artifacts --table --yaml alfred google-chrome vagrant`
EOS
end
def self.parser
super do
switch "--table",
description: "Print stanza in table format."
switch "--quiet",
description: ""
switch "--yaml",
description: ""
switch "--inspect",
description: ""
end
end
attr_accessor :format, :stanza
private :format, :format=
private :stanza, :stanza=
def initialize(*)
super
named = args.named.dup
@stanza = named.shift.to_sym
args.freeze_named_args!(named)
@format = :to_yaml if args.yaml?
return if DSL::DSL_METHODS.include?(stanza)
raise UsageError, <<~EOS
Unknown/unsupported stanza '#{stanza}'.
Check cask reference for supported stanzas.
EOS
end
sig { void }
def run
if ARTIFACTS.include?(stanza)
artifact_name = stanza
@stanza = :artifacts
end
casks(alternative: -> { Cask.to_a }).each do |cask|
print "#{cask}\t" if args.table?
begin
value = cask.send(stanza)
rescue
opoo "Failure calling '#{stanza}' on Cask '#{cask}'" unless args.quiet?
puts ""
next
end
if stanza == :artifacts
value = Hash[value.map { |v| [v.class.dsl_key, v.to_s] }]
value = value[artifact_name] if artifact_name
end
if value.nil? || (value.respond_to?(:empty?) && value.empty?)
stanza_name = artifact_name || stanza
raise CaskError, "no such stanza '#{stanza_name}' on Cask '#{cask}'"
end
if format
puts value.send(format)
elsif value.is_a?(Symbol)
puts value.inspect
else
puts value.to_s
end
end
end
end
end
end

View File

@ -5,17 +5,12 @@ require "cask/artifact/relocated"
module Cask
class Cmd
# Implementation of the `brew cask list` command.
# Cask implementation of the `brew list` command.
#
# @api private
class List < AbstractCommand
extend T::Sig
sig { returns(String) }
def self.description
"Lists installed casks or the casks provided in the arguments."
end
def self.parser
super do
switch "-1",

View File

@ -1,40 +0,0 @@
# typed: false
# frozen_string_literal: true
module Cask
class Cmd
# Implementation of the `brew cask outdated` command.
#
# @api private
class Outdated < AbstractCommand
extend T::Sig
sig { returns(String) }
def self.description
"List the outdated installed casks."
end
def self.parser
super do
switch "--greedy",
description: "Also include casks which specify `auto_updates true` or `version :latest`."
switch "--json",
description: "Print a JSON representation of outdated casks."
end
end
sig { void }
def run
outdated_casks = casks(alternative: -> { Caskroom.casks(config: Config.from_args(args)) }).select do |cask|
odebug "Checking update info of Cask #{cask}"
cask.outdated?(greedy: args.greedy?)
end
verbose = ($stdout.tty? || args.verbose?) && !args.quiet?
output = outdated_casks.map { |cask| cask.outdated_info(args.greedy?, verbose, args.json?) }
puts args.json? ? JSON.generate(output) : output
end
end
end
end

View File

@ -3,17 +3,12 @@
module Cask
class Cmd
# Implementation of the `brew cask reinstall` command.
# Cask implementation of the `brew reinstall` command.
#
# @api private
class Reinstall < Install
extend T::Sig
sig { returns(String) }
def self.description
"Reinstalls the given <cask>."
end
sig { void }
def run
self.class.reinstall_casks(

View File

@ -1,49 +0,0 @@
# typed: false
# frozen_string_literal: true
require "json"
require "style"
module Cask
class Cmd
# Implementation of the `brew cask style` command.
#
# @api private
class Style < AbstractCommand
extend T::Sig
sig { returns(String) }
def self.description
"Checks style of the given <cask> using RuboCop."
end
def self.parser
super do
switch "--fix",
description: "Fix style violations automatically using RuboCop's auto-correct feature."
end
end
sig { void }
def run
success = Homebrew::Style.check_style_and_print(
cask_paths,
fix: args.fix?,
debug: args.debug?,
verbose: args.verbose?,
)
raise CaskError, "Style check failed." unless success
end
def cask_paths
@cask_paths ||= if args.named.empty?
Tap.map(&:cask_dir).select(&:directory?)
elsif args.named.any? { |file| File.exist?(file) }
args.named.map { |path| Pathname(path).expand_path }
else
casks.map(&:sourcefile_path)
end
end
end
end
end

View File

@ -3,22 +3,12 @@
module Cask
class Cmd
# Implementation of the `brew cask uninstall` command.
# Cask implementation of the `brew uninstall` command.
#
# @api private
class Uninstall < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
sig { returns(String) }
def self.description
"Uninstalls the given <cask>."
end
def self.parser
super do
switch "--force",

View File

@ -6,17 +6,12 @@ require "cask/config"
module Cask
class Cmd
# Implementation of the `brew cask upgrade` command.
# Cask implementation of the `brew upgrade` command.
#
# @api private
class Upgrade < AbstractCommand
extend T::Sig
sig { returns(String) }
def self.description
"Upgrades all outdated casks or the specified casks."
end
OPTIONS = [
[:switch, "--skip-cask-deps", {
description: "Skip installing cask dependencies.",

View File

@ -3,26 +3,12 @@
module Cask
class Cmd
# Implementation of the `brew cask zap` command.
# Cask implementation for the `brew uninstall` command.
#
# @api private
class Zap < AbstractCommand
extend T::Sig
sig { override.returns(T.nilable(T.any(Integer, Symbol))) }
def self.min_named
:cask
end
sig { returns(String) }
def self.description
<<~EOS
Zaps all files associated with the given <cask>. Implicitly also performs all actions associated with `uninstall`.
*May remove files which are shared between applications.*
EOS
end
def self.parser
super do
switch "--force",

View File

@ -83,7 +83,7 @@ module Cask
end
def java=(arg)
odeprecated "depends_on :java", "depends_on a specific Java formula"
odisabled "depends_on :java", "depends_on a specific Java formula"
@java = arg
end
@ -91,7 +91,7 @@ module Cask
def x11=(arg)
raise "invalid 'depends_on x11' value: #{arg.inspect}" unless [true, false].include?(arg)
odeprecated "depends_on :x11", "depends_on specific X11 formula(e)"
odisabled "depends_on :x11", "depends_on specific X11 formula(e)"
@x11 = arg
end

View File

@ -195,7 +195,6 @@ module Homebrew
def usage_banner_text
@parser.banner
.gsub(/^ - (`[^`]+`)\s+/, "\n- \\1:\n <br>") # Format `cask` subcommands as Markdown list.
end
def comma_array(name, description: nil)
@ -344,10 +343,7 @@ module Homebrew
end
def generate_help_text
Formatter.wrap(
@parser.to_s.gsub(/^ - (`[^`]+`\s+)/, " \\1"), # Remove `-` from `cask` subcommand listing.
COMMAND_DESC_WIDTH,
)
Formatter.wrap(@parser.to_s, COMMAND_DESC_WIDTH)
.sub(/^/, "#{Tty.bold}Usage: brew#{Tty.reset} ")
.gsub(/`(.*?)`/m, "#{Tty.bold}\\1#{Tty.reset}")
.gsub(%r{<([^\s]+?://[^\s]+?)>}) { |url| Formatter.url(url) }
@ -398,8 +394,7 @@ module Homebrew
end
def max_named(count)
# TODO: (2.8) uncomment for the next major/minor release
# odeprecated "`max_named`", "`named_args max:`"
odeprecated "`max_named`", "`named_args max:`"
raise TypeError, "Unsupported type #{count.class.name} for max_named" unless count.is_a?(Integer)
@ -407,8 +402,7 @@ module Homebrew
end
def min_named(count_or_type)
# TODO: (2.8) uncomment for the next major/minor release
# odeprecated "`min_named`", "`named_args min:`"
odeprecated "`min_named`", "`named_args min:`"
case count_or_type
when Integer
@ -423,8 +417,7 @@ module Homebrew
end
def named(count_or_type)
# TODO: (2.8) uncomment for the next major/minor release
# odeprecated "`named`", "`named_args`"
odeprecated "`named`", "`named_args`"
case count_or_type
when Integer

View File

@ -1,17 +0,0 @@
# typed: false
# frozen_string_literal: true
require "cask/cmd"
module Homebrew
module_function
def cask_args
Cask::Cmd.parser
end
def cask
ARGV.freeze
Cask::Cmd.run(*ARGV)
end
end

View File

@ -38,8 +38,6 @@ module Homebrew
"Built-in commands" => Commands.internal_commands,
"Built-in developer commands" => Commands.internal_developer_commands,
"External commands" => Commands.external_commands,
"Cask commands" => Commands.cask_internal_commands,
"External cask commands" => Commands.cask_external_commands,
}.each do |title, commands|
next if commands.blank?

View File

@ -132,8 +132,8 @@ module Homebrew
args = install_args.parse
if args.env.present?
# TODO: enable for Homebrew 2.8.0 and use `replacement: false` for 2.9.0.
# odeprecated "brew install --env", "`env :std` in specific formula files"
# TODO: use `replacement: false` for 3.1.0.
odeprecated "brew install --env", "`env :std` in specific formula files"
end
args.named.each do |name|

View File

@ -116,12 +116,8 @@ module Homebrew
ls_args << "-r" if args.r?
ls_args << "-t" if args.t?
if !$stdout.tty? && !args.formula? && !args.cask?
odisabled "`brew list` to only list formulae", "`brew list --formula`"
else
safe_system "ls", *ls_args, HOMEBREW_CELLAR unless args.cask?
list_casks(args: args) unless args.formula?
end
safe_system "ls", *ls_args, HOMEBREW_CELLAR unless args.cask?
list_casks(args: args) unless args.formula?
elsif args.verbose? || !$stdout.tty?
system_command! "find", args: args.named.to_kegs.map(&:to_s) + %w[-not -type d -print], print_stdout: true
else

View File

@ -48,9 +48,9 @@ module Homebrew
def outdated
args = outdated_args.parse
case (j = json_version(args.json))
case json_version(args.json)
when :v1
odisabled "`brew outdated --json#{j == :v1 ? "=v1" : ""}`", "`brew outdated --json=v2`"
odie "`brew outdated --json=v1` is no longer supported. Use brew outdated --json=v2 instead."
when :v2, :default
formulae, casks = if args.formula?
[outdated_formulae(args: args), []]

View File

@ -65,7 +65,7 @@ module Homebrew
conflicts "--open", "--closed"
conflicts(*package_manager_switches)
# TODO: (2.9) add `min: 1` when the `odeprecated`/`odisabled` for `brew search` with no arguments is removed
# TODO: (3.1) add `min: 1` when the `odeprecated`/`odisabled` for `brew search` with no arguments is removed
named_args :text_or_regex
end
end
@ -85,7 +85,7 @@ module Homebrew
puts Formatter.columns(Cask::Cask.to_a.map(&:full_name).sort)
else
odeprecated "`brew search` with no arguments to output formulae", "`brew formulae`"
odisabled "`brew search` with no arguments to output formulae", "`brew formulae`"
puts Formatter.columns(Formula.full_names.sort)
end

View File

@ -1,30 +0,0 @@
# typed: true
# frozen_string_literal: true
require "formula"
require "keg"
require "cli/parser"
module Homebrew
extend T::Sig
module_function
sig { returns(CLI::Parser) }
def switch_args
Homebrew::CLI::Parser.new do
description <<~EOS
Symlink all of the specified <version> of <formula>'s installation into Homebrew's prefix.
EOS
named_args number: 2
hide_from_man_page!
end
end
def switch
switch_args.parse
odisabled "`brew switch`", "`brew link` @-versioned formulae"
end
end

View File

@ -1,7 +1,6 @@
# typed: false
# frozen_string_literal: true
require "cask/cmd"
require "completions"
# Helper functions for commands.
@ -97,15 +96,11 @@ module Commands
cmds += internal_developer_commands
cmds += external_commands if external
cmds += internal_commands_aliases if aliases
cmds += cask_commands(aliases: aliases).map { |cmd| "cask #{cmd}" }
cmds.sort
end
def internal_commands_paths(cask: true)
cmds = find_commands HOMEBREW_CMD_PATH
# can be removed when cask commands are removed and no longer odeprecated/odisabled
cmds.delete(HOMEBREW_CMD_PATH/"cask.rb") unless cask
cmds
def internal_commands_paths
find_commands HOMEBREW_CMD_PATH
end
def internal_developer_commands_paths
@ -146,34 +141,6 @@ module Commands
.sort
end
def cask_commands(aliases: false)
cmds = cask_internal_commands
cmds += cask_internal_command_aliases if aliases
cmds += cask_external_commands
cmds
end
def cask_internal_commands
Cask::Cmd.commands
end
def cask_internal_command_aliases
Cask::Cmd.aliases.keys
end
def cask_external_commands
PATH.new(Tap.cmd_directories, ENV["HOMEBREW_PATH"]).flat_map do |search_path|
find_commands(search_path).map do |possible_command|
path = possible_command.to_path
command_name = path.match(/brewcask-(.*)\.rb/) { |data| data[1].delete_suffix(".rb") }
if command_name.blank? && possible_command.executable?
command_name = path.match(/brewcask-(.*)/) { |data| data[1] }
end
command_name
end.compact
end
end
def basename_without_extension(path)
path.basename(path.extname)
end
@ -196,10 +163,7 @@ module Commands
# Ensure that the cache exists so we can build the commands list
HOMEBREW_CACHE.mkpath
cmds = commands(aliases: true).reject do |cmd|
# TODO: (2.8) remove the cask check when `brew cask` is removed
cmd.start_with?("cask ") || Homebrew::Completions::COMPLETIONS_EXCLUSION_LIST.include?(cmd)
end
cmds = commands(aliases: true) - Homebrew::Completions::COMPLETIONS_EXCLUSION_LIST
all_commands_file = HOMEBREW_CACHE/"all_commands_list.txt"
external_commands_file = HOMEBREW_CACHE/"external_commands_list.txt"

View File

@ -85,10 +85,6 @@ class DependencyCollector
Dependency.new("bzip2", tags) unless which("bzip2")
end
def java_dep_if_needed(tags)
JavaRequirement.new(tags)
end
def self.tar_needs_xz_dependency?
!new.xz_dep_if_needed([]).nil?
end
@ -124,7 +120,6 @@ class DependencyCollector
case spec
when :arch then ArchRequirement.new(tags)
when :codesign then CodesignRequirement.new(tags)
when :java then java_dep_if_needed(tags)
when :linux then LinuxRequirement.new(tags)
when :macos then MacOSRequirement.new(tags)
when :maximum_macos then MacOSRequirement.new(tags, comparator: "<=")

View File

@ -1,35 +0,0 @@
# typed: true
# frozen_string_literal: true
require "formula"
require "cli/parser"
module Homebrew
extend T::Sig
module_function
sig { returns(CLI::Parser) }
def diy_args
Homebrew::CLI::Parser.new do
description <<~EOS
Automatically determine the installation prefix for non-Homebrew software.
Using the output from this command, you can install your own software into
the Cellar and then link it into Homebrew's prefix with `brew link`.
EOS
flag "--name=",
description: "Explicitly set the <name> of the package being installed."
flag "--version=",
description: "Explicitly set the <version> of the package being installed."
max_named 0
hide_from_man_page!
end
end
def diy
diy_args.parse
odisabled "`brew diy`"
end
end

View File

@ -67,7 +67,7 @@ module Homebrew
template = (SOURCE_PATH/"brew.1.md.erb").read
variables = OpenStruct.new
variables[:commands] = generate_cmd_manpages(Commands.internal_commands_paths(cask: false))
variables[:commands] = generate_cmd_manpages(Commands.internal_commands_paths)
variables[:developer_commands] = generate_cmd_manpages(Commands.internal_developer_commands_paths)
variables[:official_external_commands] =
generate_cmd_manpages(Commands.official_external_commands_paths(quiet: quiet))

View File

@ -47,9 +47,6 @@ module Homebrew
flag "--message=",
depends_on: "--autosquash",
description: "Message to include when autosquashing revision bumps, deletions, and rebuilds."
flag "--workflow=",
description: "Retrieve artifacts from the specified workflow (default: `tests.yml`).",
replacement: "`--workflows`"
flag "--artifact=",
description: "Download artifacts with the specified name (default: `bottles`)."
flag "--bintray-org=",
@ -358,13 +355,7 @@ module Homebrew
def pr_pull
args = pr_pull_args.parse
odisabled "`brew pr-pull --workflow`", "`brew pr-pull --workflows=`" if args.workflow.presence
workflows = if args.workflow.blank?
args.workflows.presence || ["tests.yml"]
else
[args.workflow].compact.presence || ["tests.yml"]
end
workflows = args.workflows.presence || ["tests.yml"]
artifact = args.artifact || "bottles"
bintray_org = args.bintray_org || "homebrew"
mirror_repo = args.bintray_mirror || "mirror"

View File

@ -26,14 +26,15 @@ module Homebrew
description: "Print as a Markdown list."
named_args max: 2
hide_from_man_page!
end
end
def release_notes
args = release_notes_args.parse
# TODO: (2.8) Deprecate this command now that the `brew release` command exists.
# odeprecated "`brew release-notes`"
odeprecated "`brew release-notes`", "`brew release`"
previous_tag = args.named.first

View File

@ -241,7 +241,7 @@ module SharedEnvExtension
# Currently only used by aalib in core.
sig { void }
def ncurses_define
# odeprecated "ENV.ncurses_define"
odeprecated "ENV.ncurses_define"
append "CPPFLAGS", "-DNCURSES_OPAQUE=0"
end
@ -249,6 +249,8 @@ module SharedEnvExtension
# @private
sig { void }
def userpaths!
odeprecated "ENV.userpaths!"
path = PATH.new(self["PATH"]).select do |p|
# put Superenv.bin and opt path at the first
p.start_with?("#{HOMEBREW_REPOSITORY}/Library/ENV", "#{HOMEBREW_PREFIX}/opt")
@ -343,9 +345,10 @@ module SharedEnvExtension
sig { void }
def permit_arch_flags; end
# A no-op until we enable this by default again (which we may never do).
sig { void }
def permit_weak_imports; end
def permit_weak_imports
odeprecated "ENV.permit_weak_imports"
end
# @private
sig { params(cc: T.any(Symbol, String)).returns(T::Boolean) }

View File

@ -99,7 +99,7 @@ module Stdenv
%w[O3 O2 O1 O0 Os].each do |opt|
define_method opt do
odeprecated "ENV.#{opt}"
odisabled "ENV.#{opt}"
send(:remove_from_cflags, /-O./)
send(:append_to_cflags, "-#{opt}")
@ -141,7 +141,7 @@ module Stdenv
sig { void }
def m64
odeprecated "ENV.m64"
odisabled "ENV.m64"
append_to_cflags "-m64"
append "LDFLAGS", "-arch #{Hardware::CPU.arch_64_bit}"
@ -149,7 +149,7 @@ module Stdenv
sig { void }
def m32
odeprecated "ENV.m32"
odisabled "ENV.m32"
append_to_cflags "-m32"
append "LDFLAGS", "-arch #{Hardware::CPU.arch_32_bit}"
@ -157,7 +157,7 @@ module Stdenv
sig { void }
def universal_binary
odeprecated "ENV.universal_binary"
odisabled "ENV.universal_binary"
check_for_compiler_universal_support
@ -184,7 +184,7 @@ module Stdenv
sig { void }
def libstdcxx
odeprecated "ENV.libstdcxx"
odisabled "ENV.libstdcxx"
append "CXX", "-stdlib=libstdc++" if compiler == :clang
end
@ -220,7 +220,7 @@ module Stdenv
sig { void }
def x11
odeprecated "ENV.x11", "depends_on specific X11 formula(e)"
odisabled "ENV.x11", "depends_on specific X11 formula(e)"
end
# @private

View File

@ -294,7 +294,7 @@ module Superenv
sig { void }
def universal_binary
odeprecated "ENV.universal_binary"
odisabled "ENV.universal_binary"
check_for_compiler_universal_support
@ -308,14 +308,14 @@ module Superenv
sig { void }
def m32
odeprecated "ENV.m32"
odisabled "ENV.m32"
append "HOMEBREW_ARCHFLAGS", "-m32"
end
sig { void }
def m64
odeprecated "ENV.m64"
odisabled "ENV.m64"
append "HOMEBREW_ARCHFLAGS", "-m64"
end
@ -333,7 +333,7 @@ module Superenv
sig { void }
def libstdcxx
odeprecated "ENV.libstdcxx"
odisabled "ENV.libstdcxx"
append_to_cccfg "h" if compiler == :clang
end
@ -346,7 +346,7 @@ module Superenv
%w[O3 O2 O1 O0 Os].each do |opt|
define_method opt do
odeprecated "ENV.#{opt}"
odisabled "ENV.#{opt}"
send(:[]=, "HOMEBREW_OPTIMIZATION_LEVEL", opt)
end
@ -354,7 +354,7 @@ module Superenv
sig { void }
def set_x11_env_if_installed
odeprecated "ENV.set_x11_env_if_installed"
odisabled "ENV.set_x11_env_if_installed"
end
end

View File

@ -1,8 +1,4 @@
# typed: strict
# frozen_string_literal: true
if OS.mac?
require "extend/os/mac/dependency_collector"
elsif OS.linux?
require "extend/os/linux/dependency_collector"
end
require "extend/os/mac/dependency_collector" if OS.mac?

View File

@ -1,4 +0,0 @@
# typed: strict
# frozen_string_literal: true
require "extend/os/mac/language/java" if OS.mac?

View File

@ -1,17 +0,0 @@
# typed: true
# frozen_string_literal: true
class DependencyCollector
def java_dep_if_needed(tags)
req = JavaRequirement.new(tags)
begin
dep = Dependency.new("adoptopenjdk", tags)
return dep if dep.installed?
return req if req.satisfied?
dep
rescue FormulaUnavailableError
req
end
end
end

View File

@ -1,17 +0,0 @@
# typed: false
# frozen_string_literal: true
require "language/java"
class JavaRequirement < Requirement
env do
env_java_common
env_oracle_jdk
end
private
def oracle_java_os
:linux
end
end

View File

@ -7,7 +7,7 @@ class OsxfuseRequirement < Requirement
extend T::Sig
def initialize(tags = [])
odeprecated "depends_on :osxfuse", 'on_linux do; depends_on "libfuse"; end'
odisabled "depends_on :osxfuse", 'on_linux do; depends_on "libfuse"; end'
super(tags)
end

View File

@ -1,30 +0,0 @@
# typed: true
# frozen_string_literal: true
module Language
module Java
def self.system_java_home_cmd(version = nil)
version_flag = " --version #{version}" if version
"/usr/libexec/java_home#{version_flag} --failfast 2>/dev/null"
end
private_class_method :system_java_home_cmd
def self.java_home(version = nil)
f = find_openjdk_formula(version)
return f.opt_libexec/"openjdk.jdk/Contents/Home" if f
cmd = system_java_home_cmd(version)
path = Utils.popen_read(cmd).chomp
Pathname.new path if path.present?
end
def self.java_home_shell(version = nil)
f = find_openjdk_formula(version)
return (f.opt_libexec/"openjdk.jdk/Contents/Home").to_s if f
"$(#{system_java_home_cmd(version)})"
end
private_class_method :java_home_shell
end
end

View File

@ -1,36 +0,0 @@
# typed: false
# frozen_string_literal: true
class JavaRequirement < Requirement
env do
env_java_common
env_oracle_jdk || env_apple
end
private
undef possible_javas, oracle_java_os
def possible_javas
javas = []
javas << Pathname.new(ENV["JAVA_HOME"])/"bin/java" if ENV["JAVA_HOME"]
javas << java_home_cmd
which_java = which("java")
# /usr/bin/java is a stub on macOS
javas << which_java if which_java.to_s != "/usr/bin/java"
javas
end
def oracle_java_os
:darwin
end
def java_home_cmd
odisabled "depends_on :java",
'depends_on "openjdk@11", depends_on "openjdk@8" or depends_on "openjdk"'
end
def env_apple
ENV.append_to_cflags "-I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/"
end
end

View File

@ -7,7 +7,7 @@ class OsxfuseRequirement < Requirement
extend T::Sig
def initialize(tags = [])
odeprecated "depends_on :osxfuse"
odisabled "depends_on :osxfuse"
super(tags)
end

View File

@ -7,17 +7,7 @@ module SystemConfig
class << self
include SystemCommand::Mixin
undef describe_java, describe_homebrew_ruby
def describe_java
# java_home doesn't exist on all macOSs; it might be missing on older versions.
return "N/A" unless File.executable? "/usr/libexec/java_home"
result = system_command("/usr/libexec/java_home", args: ["--xml", "--failfast"], print_stderr: false)
return "N/A" unless result.success?
result.plist.map { |jvm| jvm["JVMVersion"] }.uniq.join(", ")
end
undef describe_homebrew_ruby
def describe_homebrew_ruby
s = describe_homebrew_ruby_version

View File

@ -1,8 +0,0 @@
# typed: strict
# frozen_string_literal: true
if OS.mac?
require "extend/os/mac/requirements/java_requirement"
elsif OS.linux?
require "extend/os/linux/requirements/java_requirement"
end

View File

@ -28,13 +28,7 @@ module Language
private_class_method :find_openjdk_formula
def self.java_home(version = nil)
f = find_openjdk_formula(version)
return f.opt_libexec if f
req = JavaRequirement.new Array(version)
raise UnsatisfiedRequirements, req.message unless req.satisfied?
req.java_home
find_openjdk_formula(version)&.opt_libexec
end
def self.java_home_shell(version = nil)
@ -51,5 +45,3 @@ module Language
end
end
end
require "extend/os/language/java"

View File

@ -4,7 +4,6 @@
require "requirement"
require "requirements/arch_requirement"
require "requirements/codesign_requirement"
require "requirements/java_requirement"
require "requirements/linux_requirement"
require "requirements/macos_requirement"
require "requirements/osxfuse_requirement"

View File

@ -1,169 +0,0 @@
# typed: false
# frozen_string_literal: true
require "language/java"
# A requirement on Java.
#
# @api private
class JavaRequirement < Requirement
extend T::Sig
fatal true
attr_reader :java_home, :version
# A strict Java 8 requirement (1.8) should prompt the user to install
# an OpenJDK 1.8 distribution. Versions newer than Java 8 are not
# completely backwards compatible, and contain breaking changes such as
# strong encapsulation of JDK-internal APIs and a modified version scheme
# (*.0 not 1.*).
def suggestion
if fits_latest?
JAVA_SUGGESTION_MAP.fetch(JAVA_SUGGESTION_MAP.keys.max)
else
JAVA_SUGGESTION_MAP.fetch("1.8")
end
end
satisfy build_env: false do
setup_java
next false unless @java
next true
end
def initialize(_tags = [])
odisabled "depends_on :java",
'"depends_on "openjdk@11", "depends_on "openjdk@8" or "depends_on "openjdk"'
super
end
sig { returns(String) }
def message
version_string = " #{@version}" if @version
s = "Java#{version_string} is required for this software.\n"
s += suggestion
s
end
sig { returns(String) }
def inspect
"#<#{self.class.name}: version=#{@version.inspect} #{tags.inspect}>"
end
def display_s
if @version
op = if exact_version?
"="
else
">="
end
"#{name.capitalize} #{op} #{version_without_plus}"
else
name.capitalize
end
end
private
CaskSuggestion = Struct.new(:token, :title) do
extend T::Sig
sig { returns(String) }
def to_str
title_string = " #{title}" if title
<<~EOS
Install#{title_string} with Homebrew Cask:
brew install --cask #{token}
EOS
end
end
JAVA_SUGGESTION_MAP = {
"1.8" => CaskSuggestion.new(
"homebrew/cask-versions/adoptopenjdk8",
"AdoptOpenJDK 8",
),
"12.0" => CaskSuggestion.new("adoptopenjdk", "AdoptOpenJDK"),
}.freeze
def version_without_plus
if exact_version?
@version
else
@version[0, @version.length - 1]
end
end
def exact_version?
@version && @version.to_s[-1] != "+"
end
def fits_latest?
@version.nil? ||
@version.to_s.end_with?("+") ||
@version.to_f >= JAVA_SUGGESTION_MAP.keys.max.to_f
end
def setup_java
java = preferred_java
return unless java
@java = java
@java_home = java.parent.parent
end
def possible_javas
javas = []
javas << Pathname.new(ENV["JAVA_HOME"])/"bin/java" if ENV["JAVA_HOME"]
javas << which("java")
javas
end
def preferred_java
possible_javas.find do |java|
next false unless java&.executable?
next true unless @version
next true if satisfies_version(java)
end
end
def env_java_common
return unless @java_home
java_home = Pathname.new(@java_home)
ENV["JAVA_HOME"] = java_home
ENV.prepend_path "PATH", java_home/"bin"
end
def env_oracle_jdk
return unless @java_home
java_home = Pathname.new(@java_home)
return unless (java_home/"include").exist?
ENV.append_to_cflags "-I#{java_home}/include"
ENV.append_to_cflags "-I#{java_home}/include/#{oracle_java_os}"
true
end
def oracle_java_os
nil
end
def satisfies_version(java)
java_version_s = system_command(java, args: ["-version"], print_stderr: false).stderr[/\d+(\.\d+)?/]
return false unless java_version_s
java_version = Version.create(java_version_s)
needed_version = Version.create(version_without_plus)
if exact_version?
java_version == needed_version
else
java_version >= needed_version
end
end
end
require "extend/os/requirements/java_requirement"

View File

@ -10,7 +10,7 @@ class TuntapRequirement < Requirement
extend T::Sig
def initialize(tags = [])
odeprecated "depends_on :tuntap"
odisabled "depends_on :tuntap"
super(tags)
end

View File

@ -11,7 +11,7 @@ class X11Requirement < Requirement
include Comparable
def initialize(tags = [])
odeprecated "depends_on :x11", "depends_on specific X11 formula(e)"
odisabled "depends_on :x11", "depends_on specific X11 formula(e)"
super(tags)
end

View File

@ -630,20 +630,13 @@ module RuboCop
end
end
# This cop ensures that new formulae depending on Requirements are not introduced in homebrew/core.
class CoreRequirements < FormulaCop
# This cop ensures that new formulae depending on removed Requirements are not used
class Requirements < FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, _body_node)
return if formula_tap != "homebrew-core"
if depends_on? :java
problem "Formulae in homebrew/core should depend on a versioned `openjdk` instead of :java"
end
if depends_on? :x11
problem "Formulae in homebrew/core should depend on specific X libraries instead of :x11"
end
problem ":osxfuse is deprecated in homebrew/core" if depends_on? :osxfuse
problem "Formulae should depend on a versioned `openjdk` instead of :java" if depends_on? :java
problem "Formulae should depend on specific X libraries instead of :x11" if depends_on? :x11
problem "Formulae should not depend on :osxfuse" if depends_on? :osxfuse
problem "Formulae should not depend on :tuntap" if depends_on? :tuntap
end
end

View File

@ -356,7 +356,7 @@ class BottleSpecification
if [HOMEBREW_DEFAULT_PREFIX,
HOMEBREW_MACOS_ARM_DEFAULT_PREFIX,
HOMEBREW_LINUX_DEFAULT_PREFIX].exclude?(prefix)
odeprecated "setting 'prefix' for bottles"
odisabled "setting 'prefix' for bottles"
end
@prefix = prefix
end

View File

@ -107,7 +107,6 @@ RSpec/NamedSubject:
- "cache_store_spec.rb"
- "cask/audit_spec.rb"
- "cask/cmd/style_spec.rb"
- "cask/cmd_spec.rb"
- "cask/dsl/appcast_spec.rb"
- "caveats_spec.rb"
- "cleaner_spec.rb"

View File

@ -1,15 +1,12 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/invalid_option"
require "cask/auditor"
describe Cask::Cmd::Audit, :cask do
let(:cask) { Cask::Cask.new("cask") }
let(:result) { { warnings: Set.new, errors: Set.new } }
it_behaves_like "a command that handles invalid options"
describe "selection of Casks to audit" do
it "audits all Casks if no tokens are given" do
allow(Cask::Cask).to receive(:to_a).and_return([cask, cask])

View File

@ -1,34 +0,0 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Cache, :cask do
let(:local_transmission) {
Cask::CaskLoader.load(cask_path("local-transmission"))
}
let(:local_caffeine) {
Cask::CaskLoader.load(cask_path("local-caffeine"))
}
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
it "prints the file used to cache the Cask" do
transmission_location = CurlDownloadStrategy.new(
local_transmission.url.to_s, local_transmission.token, local_transmission.version,
cache: Cask::Cache.path, **local_transmission.url.specs
).cached_location
caffeine_location = CurlDownloadStrategy.new(
local_caffeine.url.to_s, local_caffeine.token, local_caffeine.version,
cache: Cask::Cache.path, **local_caffeine.url.specs
).cached_location
expect(described_class.cached_location(local_transmission))
.to eql transmission_location
expect(described_class.cached_location(local_caffeine))
.to eql caffeine_location
end
end

View File

@ -1,58 +0,0 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Cat, :cask do
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
describe "given a basic Cask" do
let(:basic_cask_content) {
<<~'RUBY'
cask "basic-cask" do
version "1.2.3"
sha256 "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
url "https://brew.sh/TestCask-#{version}.dmg"
name "Basic Cask"
desc "Cask for testing basic functionality"
homepage "https://brew.sh/"
app "TestCask.app"
end
RUBY
}
let(:caffeine_content) {
<<~'RUBY'
cask "local-caffeine" do
version "1.2.3"
sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94"
url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
homepage "https://brew.sh/"
app "Caffeine.app"
end
RUBY
}
it "displays the Cask file content about the specified Cask" do
expect {
described_class.run("basic-cask")
}.to output(basic_cask_content).to_stdout
end
it "can display multiple Casks" do
expect {
described_class.run("basic-cask", "local-caffeine")
}.to output(basic_cask_content + caffeine_content).to_stdout
end
end
it "raises an exception when the Cask does not exist" do
expect { described_class.run("notacask") }
.to raise_error(Cask::CaskUnavailableError, /is unavailable/)
end
end

View File

@ -1,64 +0,0 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Create, :cask do
around do |example|
example.run
ensure
%w[new-cask additional-cask another-cask yet-another-cask local-caff].each do |cask|
FileUtils.rm_f Cask::CaskLoader.path(cask)
end
end
before do
allow_any_instance_of(described_class).to receive(:exec_editor)
end
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
it "opens the editor for the specified Cask" do
command = described_class.new("new-cask")
expect(command).to receive(:exec_editor).with(Cask::CaskLoader.path("new-cask"))
command.run
end
it "drops a template down for the specified Cask" do
described_class.run("new-cask")
template = File.read(Cask::CaskLoader.path("new-cask"))
expect(template).to eq <<~RUBY
cask "new-cask" do
version ""
sha256 ""
url "https://"
name ""
desc ""
homepage ""
app ""
end
RUBY
end
it "raises an exception when more than one Cask is given" do
expect {
described_class.run("additional-cask", "another-cask")
}.to raise_error(Homebrew::CLI::NumberOfNamedArgumentsError)
end
it "raises an exception when the Cask already exists" do
expect {
described_class.run("basic-cask")
}.to raise_error(Cask::CaskAlreadyCreatedError)
end
it "allows creating Casks that are substrings of existing Casks" do
command = described_class.new("local-caff")
expect(command).to receive(:exec_editor).with(Cask::CaskLoader.path("local-caff"))
command.run
end
end

View File

@ -1,20 +0,0 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Doctor, :cask do
it_behaves_like "a command that handles invalid options"
it "displays some nice info about the environment" do
expect {
described_class.run
}.to output(/^==> Homebrew Version/).to_stdout
end
it "raises an exception when arguments are given" do
expect {
described_class.run("argument")
}.to raise_error(UsageError, /does not take named arguments/)
end
end

View File

@ -1,32 +0,0 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Edit, :cask do
before do
allow_any_instance_of(described_class).to receive(:exec_editor)
end
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
it "opens the editor for the specified Cask" do
command = described_class.new("local-caffeine")
expect(command).to receive(:exec_editor).with(Cask::CaskLoader.path("local-caffeine"))
command.run
end
it "raises an error when given more than one argument" do
expect {
described_class.new("local-caffeine", "local-transmission")
}.to raise_error(Homebrew::CLI::NumberOfNamedArgumentsError)
end
it "raises an exception when the Cask doesn't exist" do
expect {
described_class.run("notacask")
}.to raise_error(Cask::CaskUnavailableError)
end
end

View File

@ -1,9 +1,6 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Fetch, :cask do
let(:local_transmission) {
Cask::CaskLoader.load(cask_path("local-transmission"))
@ -13,9 +10,6 @@ describe Cask::Cmd::Fetch, :cask do
Cask::CaskLoader.load(cask_path("local-caffeine"))
}
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
it "allows downloading the installer of a Cask" do
transmission_location = CurlDownloadStrategy.new(
local_transmission.url.to_s, local_transmission.token, local_transmission.version,

View File

@ -1,12 +0,0 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Home, :cask do
before do
allow(described_class).to receive(:open_url)
end
it_behaves_like "a command that handles invalid options"
end

View File

@ -1,14 +1,9 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
require "utils"
describe Cask::Cmd::Info, :cask do
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
it "displays some nice info about the specified Cask" do
expect {
described_class.run("local-transmission")

View File

@ -1,13 +1,7 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Install, :cask do
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
it "displays the installation progress" do
output = Regexp.new <<~EOS
==> Downloading file:.*caffeine.zip

View File

@ -1,45 +0,0 @@
# typed: false
# frozen_string_literal: true
describe Cask::Cmd::InternalStanza, :cask do
it "shows stanza of the Specified Cask" do
command = described_class.new("homepage", "local-caffeine")
expect {
command.run
}.to output("https://brew.sh/\n").to_stdout
end
it "raises an exception when stanza is unknown/unsupported" do
expect {
described_class.new("this_stanza_does_not_exist", "local-caffeine")
}.to raise_error(%r{Unknown/unsupported stanza})
end
it "raises an exception when normal stanza is not present on cask" do
command = described_class.new("caveats", "local-caffeine")
expect {
command.run
}.to raise_error(/no such stanza/)
end
it "raises an exception when artifact stanza is not present on cask" do
command = described_class.new("zap", "local-caffeine")
expect {
command.run
}.to raise_error(/no such stanza/)
end
it "raises an exception when 'depends_on' stanza is not present on cask" do
command = described_class.new("depends_on", "local-caffeine")
expect {
command.run
}.to raise_error(/no such stanza/)
end
it "shows all artifact stanzas when using 'artifacts' keyword" do
command = described_class.new("artifacts", "local-caffeine")
expect {
command.run
}.to output(/Caffeine\.app/).to_stdout
end
end

View File

@ -1,11 +1,7 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::List, :cask do
it_behaves_like "a command that handles invalid options"
it "lists the installed Casks in a pretty fashion" do
casks = %w[local-caffeine local-transmission].map { |c| Cask::CaskLoader.load(c) }

View File

@ -1,197 +0,0 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Outdated, :cask do
let(:installed) do
[
Cask::CaskLoader.load(cask_path("basic-cask")),
Cask::CaskLoader.load(cask_path("outdated/local-caffeine")),
Cask::CaskLoader.load(cask_path("outdated/local-transmission")),
Cask::CaskLoader.load(cask_path("version-latest-string")),
Cask::CaskLoader.load(cask_path("outdated/auto-updates")),
]
end
before do
installed.each { |cask| InstallHelper.install_with_caskfile(cask) }
end
it_behaves_like "a command that handles invalid options"
describe 'without --greedy it ignores the Casks with "version latest" or "auto_updates true"' do
it "checks all the installed Casks when no token is provided" do
expect {
described_class.run
}.to output(<<~EOS).to_stdout.as_tty
local-caffeine (1.2.2) != 1.2.3
local-transmission (2.60) != 2.61
EOS
end
it "checks only the tokens specified in the command line" do
expect {
described_class.run("local-caffeine")
}.to output(<<~EOS).to_stdout.as_tty
local-caffeine (1.2.2) != 1.2.3
EOS
end
it 'ignores "auto_updates" and "latest" Casks even when their tokens are provided in the command line' do
expect {
described_class.run("local-caffeine", "auto-updates", "version-latest-string")
}.to output(<<~EOS).to_stdout.as_tty
local-caffeine (1.2.2) != 1.2.3
EOS
end
end
describe "--quiet overrides TTY" do
it "lists only the names (no versions) of the outdated Casks with --quiet" do
expect {
described_class.run("--quiet")
}.to output(<<~EOS).to_stdout.as_tty
local-caffeine
local-transmission
EOS
end
end
describe "--quiet overrides --verbose" do
it "lists only the names (no versions) of the outdated Casks with --quiet" do
expect {
described_class.run("--verbose", "--quiet")
}.to output(<<~EOS).to_stdout
local-caffeine
local-transmission
EOS
end
end
describe "with --greedy it checks additional Casks" do
it 'includes the Casks with "auto_updates true" or "version latest" with --greedy' do
expect {
described_class.run("--greedy")
}.to output(<<~EOS).to_stdout.as_tty
auto-updates (2.57) != 2.61
local-caffeine (1.2.2) != 1.2.3
local-transmission (2.60) != 2.61
version-latest-string (latest) != latest
EOS
end
it 'does not include the Casks with "auto_updates true" when the version did not change' do
cask = Cask::CaskLoader.load(cask_path("auto-updates"))
InstallHelper.install_with_caskfile(cask)
expect {
described_class.run("--greedy")
}.to output(<<~EOS).to_stdout.as_tty
local-caffeine (1.2.2) != 1.2.3
local-transmission (2.60) != 2.61
version-latest-string (latest) != latest
EOS
end
end
describe "--json" do
it "lists outdated Casks in JSON format" do
result = [
{
name: "local-caffeine",
installed_versions: "1.2.2",
current_version: "1.2.3",
},
{
name: "local-transmission",
installed_versions: "2.60",
current_version: "2.61",
},
].to_json
expect {
described_class.run("--json")
}.to output("#{result}\n").to_stdout
end
end
describe "--json overrides --quiet" do
it "ignores --quiet and lists outdated Casks in JSON format" do
result = [
{
name: "local-caffeine",
installed_versions: "1.2.2",
current_version: "1.2.3",
},
{
name: "local-transmission",
installed_versions: "2.60",
current_version: "2.61",
},
].to_json
expect {
described_class.run("--json", "--quiet")
}.to output("#{result}\n").to_stdout
end
end
describe "--json and --greedy" do
it 'includes the Casks with "auto_updates true" or "version latest" in JSON format' do
result = [
{
name: "auto-updates",
installed_versions: "2.57",
current_version: "2.61",
},
{
name: "local-caffeine",
installed_versions: "1.2.2",
current_version: "1.2.3",
},
{
name: "local-transmission",
installed_versions: "2.60",
current_version: "2.61",
},
{
name: "version-latest-string",
installed_versions: "latest",
current_version: "latest",
},
].to_json
expect {
described_class.run("--json", "--greedy")
}.to output("#{result}\n").to_stdout
end
it 'does not include the Casks with "auto_updates true" with no version change in JSON format' do
cask = Cask::CaskLoader.load(cask_path("auto-updates"))
InstallHelper.install_with_caskfile(cask)
result = [
{
name: "local-caffeine",
installed_versions: "1.2.2",
current_version: "1.2.3",
},
{
name: "local-transmission",
installed_versions: "2.60",
current_version: "2.61",
},
{
name: "version-latest-string",
installed_versions: "latest",
current_version: "latest",
},
].to_json
expect {
described_class.run("--json", "--greedy")
}.to output("#{result}\n").to_stdout
end
end
end

View File

@ -1,11 +1,7 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Reinstall, :cask do
it_behaves_like "a command that handles invalid options"
it "displays the reinstallation progress" do
caffeine = Cask::CaskLoader.load(cask_path("local-caffeine"))

View File

@ -1,18 +0,0 @@
# typed: false
# frozen_string_literal: true
shared_examples "a command that handles invalid options" do
context "when an invalid option is specified" do
it "raises an exception when no Cask is specified" do
expect {
described_class.run("--not-a-valid-option")
}.to raise_error("invalid option: --not-a-valid-option")
end
it "raises an exception when a Cask is specified" do
expect {
described_class.run("--not-a-valid-option", "basic-cask")
}.to raise_error("invalid option: --not-a-valid-option")
end
end
end

View File

@ -1,12 +0,0 @@
# typed: false
# frozen_string_literal: true
shared_examples "a command that requires a Cask token" do
context "when no Cask is specified" do
it "raises an exception " do
expect {
described_class.run
}.to raise_error(UsageError, /This command requires .*cask.* argument/)
end
end
end

View File

@ -1,86 +0,0 @@
# typed: false
# frozen_string_literal: true
require "open3"
require "cli/args"
require "cli/named_args"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Style, :cask do
let(:args) { [] }
let(:cli) { described_class.new(*args) }
it_behaves_like "a command that handles invalid options"
describe "::run" do
subject { described_class.rubocop(cask_path) }
context "with a valid Cask" do
let(:cask_path) do
Pathname.new("#{HOMEBREW_LIBRARY_PATH}/test/support/fixtures/cask/Casks/version-latest.rb")
end
it "is successful" do
expect {
described_class.run(cask_path)
}.not_to raise_error
end
end
end
describe "#cask_paths" do
subject { cli.cask_paths }
before do
args = instance_double(Homebrew::CLI::Args, named: Homebrew::CLI::NamedArgs.new(*tokens))
allow(cli).to receive(:args).and_return(args)
end
context "when no cask tokens are given" do
let(:tokens) { [] }
matcher :a_path_ending_with do |end_string|
match do |actual|
expect(actual.to_s).to end_with(end_string)
end
end
it {
expect(subject).to contain_exactly(
a_path_ending_with("/homebrew/homebrew-cask/Casks"),
a_path_ending_with("/third-party/homebrew-tap/Casks"),
)
}
end
context "when at least one cask token is a path that exists" do
let(:tokens) { ["adium", "Casks/dropbox.rb"] }
before do
allow(File).to receive(:exist?).and_return(false, true)
end
it "treats all tokens as paths" do
expect(subject).to eq [
Pathname("adium").expand_path,
Pathname("Casks/dropbox.rb").expand_path,
]
end
end
context "when no cask tokens are paths that exist" do
let(:tokens) { %w[adium dropbox] }
before do
allow(File).to receive(:exist?).and_return(false)
end
it "tries to find paths for all tokens" do
expect(Cask::CaskLoader).to receive(:load).twice.and_return(instance_double(Cask::Cask, sourcefile_path: nil))
subject
end
end
end
end

View File

@ -1,13 +1,7 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Uninstall, :cask do
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
it "displays the uninstallation progress" do
caffeine = Cask::CaskLoader.load(cask_path("local-caffeine"))

View File

@ -1,8 +1,6 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Upgrade, :cask do
let(:version_latest_path_2) { version_latest.config.appdir.join("Caffeine Pro.app") }
let(:version_latest_path_1) { version_latest.config.appdir.join("Caffeine Mini.app") }
@ -14,8 +12,6 @@ describe Cask::Cmd::Upgrade, :cask do
let(:local_caffeine_path) { local_caffeine.config.appdir.join("Caffeine.app") }
let(:local_caffeine) { Cask::CaskLoader.load("local-caffeine") }
it_behaves_like "a command that handles invalid options"
context "successful upgrade" do
let(:installed) {
[

View File

@ -1,13 +1,7 @@
# typed: false
# frozen_string_literal: true
require_relative "shared_examples/requires_cask_token"
require_relative "shared_examples/invalid_option"
describe Cask::Cmd::Zap, :cask do
it_behaves_like "a command that requires a Cask token"
it_behaves_like "a command that handles invalid options"
it "shows an error when a bad Cask is provided" do
expect { described_class.run("notacask") }
.to raise_error(Cask::CaskUnavailableError, /is unavailable/)

View File

@ -1,31 +0,0 @@
# typed: false
# frozen_string_literal: true
describe Cask::Cmd, :cask do
context "when no subcommand is given" do
it "raises an error" do
expect { subject.run }.to raise_error(UsageError, /subcommand/)
end
end
context "::run" do
let(:noop_command) { double("Cmd::Noop", run: nil) }
before do
allow(Homebrew).to receive(:raise_deprecation_exceptions?).and_return(false)
end
it "exits with a status of 1 when something goes wrong" do
allow(described_class).to receive(:lookup_command).and_raise(Cask::CaskError)
command = described_class.new("noop")
expect(command).to receive(:exit).with(1)
command.run
end
end
it "provides a help message for all commands" do
described_class.command_classes.each do |command_class|
expect(command_class.help).to match(/\w+/), command_class.name
end
end
end

View File

@ -1,8 +1,6 @@
# typed: false
# frozen_string_literal: true
require "cmd/cask"
describe Cask::DSL::Appcast do
subject { described_class.new(url, params) }

View File

@ -529,73 +529,4 @@ describe Homebrew::CLI::Parser do
)
end
end
describe "named" do
subject(:parser) {
described_class.new do
named 1
end
}
it "allows the specified number of arguments" do
expect { parser.parse(["foo"]) }.not_to raise_error
end
it "doesn't allow less than the specified number of arguments" do
expect { parser.parse([]) }.to raise_error(Homebrew::CLI::NumberOfNamedArgumentsError)
end
it "treats a symbol as a single argument of the specified type" do
formula_parser = described_class.new do
named :formula
end
expect { formula_parser.parse([]) }.to raise_error(
Homebrew::CLI::NumberOfNamedArgumentsError, /This command requires exactly 1 formula argument/
)
end
it "doesn't allow more than the specified number of arguments" do
expect { parser.parse(["foo", "bar"]) }.to raise_error(Homebrew::CLI::NumberOfNamedArgumentsError)
end
end
describe "min_named" do
subject(:parser) {
described_class.new do
min_named 1
end
}
it "doesn't allow less than the minimum number of arguments" do
expect { parser.parse([]) }.to raise_error(Homebrew::CLI::MinNamedArgumentsError)
end
it "allows the minimum number of arguments" do
expect { parser.parse(["foo"]) }.not_to raise_error
end
it "allows more than the specified number of arguments" do
expect { parser.parse(["foo", "bar"]) }.not_to raise_error
end
end
describe "max_named" do
subject(:parser) {
described_class.new do
max_named 1
end
}
it "doesn't allow more than the minimum number of arguments" do
expect { parser.parse(["foo", "bar"]) }.to raise_error(Homebrew::CLI::MaxNamedArgumentsError)
end
it "allows the minimum number of arguments" do
expect { parser.parse(["foo"]) }.not_to raise_error
end
it "allows less than the specified number of arguments" do
expect { parser.parse([]) }.not_to raise_error
end
end
end

View File

@ -1,8 +0,0 @@
# typed: false
# frozen_string_literal: true
require "cmd/shared_examples/args_parse"
describe "Homebrew.switch_args" do
it_behaves_like "parseable arguments"
end

View File

@ -1,8 +0,0 @@
# typed: false
# frozen_string_literal: true
require "cmd/shared_examples/args_parse"
describe "Homebrew.diy_args" do
it_behaves_like "parseable arguments"
end

View File

@ -4,41 +4,52 @@
require "language/java"
describe Language::Java do
let(:f) do
formula("openjdk") do
url "openjdk"
version "15.0.1"
end
end
before do
allow(Formula).to receive(:[]).and_return(f)
allow(f).to receive(:any_version_installed?).and_return(true)
allow(f).to receive(:any_installed_version).and_return(f.version)
end
describe "::java_home" do
if !OS.mac? || MacOS.version < :big_sur
it "returns valid JAVA_HOME if version is specified", :needs_macos do
java_home = described_class.java_home("1.6+")
expect(java_home/"bin/java").to be_an_executable
end
it "returns valid JAVA_HOME if version is specified" do
java_home = described_class.java_home("1.8+")
expect(java_home).to eql(f.opt_libexec)
end
it "returns valid JAVA_HOME if version is not specified", :needs_macos do
it "returns valid JAVA_HOME if version is not specified" do
java_home = described_class.java_home
expect(java_home/"bin/java").to be_an_executable
expect(java_home).to eql(f.opt_libexec)
end
end
describe "::java_home_env" do
it "returns java_home path with version if version specified", :needs_macos do
java_home = described_class.java_home_env("blah")
expect(java_home[:JAVA_HOME]).to include("--version blah")
it "returns java_home path if version specified" do
java_home_env = described_class.java_home_env("1.8+")
expect(java_home_env[:JAVA_HOME]).to eql(f.opt_libexec.to_s)
end
it "returns java_home path without version if version is not specified", :needs_macos do
java_home = described_class.java_home_env
expect(java_home[:JAVA_HOME]).not_to include("--version")
it "returns java_home path if version is not specified" do
java_home_env = described_class.java_home_env
expect(java_home_env[:JAVA_HOME]).to eql(f.opt_libexec.to_s)
end
end
describe "::overridable_java_home_env" do
it "returns java_home path with version if version specified", :needs_macos do
java_home = described_class.overridable_java_home_env("blah")
expect(java_home[:JAVA_HOME]).to include("--version blah")
it "returns java_home path if version specified" do
overridable_java_home_env = described_class.overridable_java_home_env("1.8+")
expect(overridable_java_home_env[:JAVA_HOME]).to eql("${JAVA_HOME:-#{f.opt_libexec}}")
end
it "returns java_home path without version if version is not specified", :needs_macos do
java_home = described_class.overridable_java_home_env
expect(java_home[:JAVA_HOME]).not_to include("--version")
it "returns java_home path if version is not specified" do
overridable_java_home_env = described_class.overridable_java_home_env
expect(overridable_java_home_env[:JAVA_HOME]).to eql("${JAVA_HOME:-#{f.opt_libexec}}")
end
end
end

View File

@ -123,13 +123,7 @@ RSpec.configure do |config|
end
config.before(:each, :needs_java) do
java_installed = if OS.mac?
Utils.popen_read("/usr/libexec/java_home", "--failfast")
$CHILD_STATUS.success?
else
which("java")
end
skip "Java is not installed." unless java_installed
skip "Java is not installed." unless which("java")
end
config.before(:each, :needs_python) do

View File

@ -88,10 +88,6 @@ module Utils
Utils.popen_read(git, "-C", repo, "show", "#{commit}:#{relative_file}")
end
def commit_message(_repo, _commit = nil)
odisabled "Utils::Git.commit_message(repo)", "Pathname(repo).git_commit_message"
end
def ensure_installed!
return if available?
@ -133,14 +129,6 @@ module Utils
.prepend(Formula["gnupg"].opt_bin)
end
def origin_branch(_repo)
odisabled "Utils::Git.origin_branch(repo)", "Pathname(repo).git_origin_branch"
end
def current_branch(_repo)
odisabled "Utils::Git.current_branch(repo)", "Pathname(repo).git_branch"
end
# Special case of `git cherry-pick` that permits non-verbose output and
# optional resolution on merge conflict.
def cherry_pick!(repo, *args, resolve: false, verbose: false)

View File

@ -537,36 +537,6 @@ _brew_bump_unversioned_casks() {
__brew_complete_tapped
}
_brew_cask() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
-*)
__brewcomp "
--appdir
--audio-unit-plugindir
--colorpickerdir
--debug
--dictionarydir
--fontdir
--help
--input-methoddir
--internet-plugindir
--language
--mdimporterdir
--prefpanedir
--qlplugindir
--quiet
--screen-saverdir
--servicedir
--verbose
--vst-plugindir
--vst3-plugindir
"
return
;;
esac
}
_brew_cat() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
@ -670,23 +640,6 @@ _brew_config() {
esac
}
_brew_configure() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
-*)
__brewcomp "
--debug
--help
--name
--quiet
--verbose
--version
"
return
;;
esac
}
_brew_create() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
@ -793,23 +746,6 @@ _brew_dispatch_build_bottle() {
__brew_complete_formulae
}
_brew_diy() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
-*)
__brewcomp "
--debug
--help
--name
--quiet
--verbose
--version
"
return
;;
esac
}
_brew_doctor() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
@ -1845,21 +1781,6 @@ _brew_style() {
__brew_complete_casks
}
_brew_switch() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
-*)
__brewcomp "
--debug
--help
--quiet
--verbose
"
return
;;
esac
}
_brew_tap() {
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
@ -2385,19 +2306,16 @@ _brew() {
bump-formula-pr) _brew_bump_formula_pr ;;
bump-revision) _brew_bump_revision ;;
bump-unversioned-casks) _brew_bump_unversioned_casks ;;
cask) _brew_cask ;;
cat) _brew_cat ;;
cleanup) _brew_cleanup ;;
command) _brew_command ;;
commands) _brew_commands ;;
completions) _brew_completions ;;
config) _brew_config ;;
configure) _brew_configure ;;
create) _brew_create ;;
deps) _brew_deps ;;
desc) _brew_desc ;;
dispatch-build-bottle) _brew_dispatch_build_bottle ;;
diy) _brew_diy ;;
doctor) _brew_doctor ;;
dr) _brew_dr ;;
edit) _brew_edit ;;
@ -2445,7 +2363,6 @@ _brew() {
sh) _brew_sh ;;
sponsors) _brew_sponsors ;;
style) _brew_style ;;
switch) _brew_switch ;;
tap) _brew_tap ;;
tap-info) _brew_tap_info ;;
tap-new) _brew_tap_new ;;

View File

@ -461,28 +461,6 @@ __fish_brew_complete_arg 'bump-unversioned-casks' -a '(__fish_brew_suggest_casks
__fish_brew_complete_arg 'bump-unversioned-casks' -a '(__fish_brew_suggest_taps_installed)'
__fish_brew_complete_cmd 'cask' 'Homebrew Cask provides a friendly CLI workflow for the administration of macOS applications distributed as binaries'
__fish_brew_complete_arg 'cask' -l appdir -d 'Target location for Applications (default: `/Applications`)'
__fish_brew_complete_arg 'cask' -l audio-unit-plugindir -d 'Target location for Audio Unit Plugins (default: `~/Library/Audio/Plug-Ins/Components`)'
__fish_brew_complete_arg 'cask' -l colorpickerdir -d 'Target location for Color Pickers (default: `~/Library/ColorPickers`)'
__fish_brew_complete_arg 'cask' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'cask' -l dictionarydir -d 'Target location for Dictionaries (default: `~/Library/Dictionaries`)'
__fish_brew_complete_arg 'cask' -l fontdir -d 'Target location for Fonts (default: `~/Library/Fonts`)'
__fish_brew_complete_arg 'cask' -l help -d 'Show this message'
__fish_brew_complete_arg 'cask' -l input-methoddir -d 'Target location for Input Methods (default: `~/Library/Input Methods`)'
__fish_brew_complete_arg 'cask' -l internet-plugindir -d 'Target location for Internet Plugins (default: `~/Library/Internet Plug-Ins`)'
__fish_brew_complete_arg 'cask' -l language -d 'Comma-separated list of language codes to prefer for cask installation. The first matching language is used, otherwise it reverts to the cask\'s default language. The default value is the language of your system'
__fish_brew_complete_arg 'cask' -l mdimporterdir -d 'Target location for Spotlight Plugins (default: `~/Library/Spotlight`)'
__fish_brew_complete_arg 'cask' -l prefpanedir -d 'Target location for Preference Panes (default: `~/Library/PreferencePanes`)'
__fish_brew_complete_arg 'cask' -l qlplugindir -d 'Target location for QuickLook Plugins (default: `~/Library/QuickLook`)'
__fish_brew_complete_arg 'cask' -l quiet -d 'Make some output more quiet'
__fish_brew_complete_arg 'cask' -l screen-saverdir -d 'Target location for Screen Savers (default: `~/Library/Screen Savers`)'
__fish_brew_complete_arg 'cask' -l servicedir -d 'Target location for Services (default: `~/Library/Services`)'
__fish_brew_complete_arg 'cask' -l verbose -d 'Make some output more verbose'
__fish_brew_complete_arg 'cask' -l vst-plugindir -d 'Target location for VST Plugins (default: `~/Library/Audio/Plug-Ins/VST`)'
__fish_brew_complete_arg 'cask' -l vst3-plugindir -d 'Target location for VST3 Plugins (default: `~/Library/Audio/Plug-Ins/VST3`)'
__fish_brew_complete_cmd 'cat' 'Display the source of a formula or cask'
__fish_brew_complete_arg 'cat' -l cask -d 'Treat all named arguments as casks'
__fish_brew_complete_arg 'cat' -l debug -d 'Display any debugging information'
@ -540,15 +518,6 @@ __fish_brew_complete_arg 'config' -l quiet -d 'Make some output more quiet'
__fish_brew_complete_arg 'config' -l verbose -d 'Make some output more verbose'
__fish_brew_complete_cmd 'configure' 'Automatically determine the installation prefix for non-Homebrew software'
__fish_brew_complete_arg 'configure' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'configure' -l help -d 'Show this message'
__fish_brew_complete_arg 'configure' -l name -d 'Explicitly set the name of the package being installed'
__fish_brew_complete_arg 'configure' -l quiet -d 'Make some output more quiet'
__fish_brew_complete_arg 'configure' -l verbose -d 'Make some output more verbose'
__fish_brew_complete_arg 'configure' -l version -d 'Explicitly set the version of the package being installed'
__fish_brew_complete_cmd 'create' 'Generate a formula or, with `--cask`, a cask for the downloadable file at URL and open it in the editor'
__fish_brew_complete_arg 'create' -l HEAD -d 'Indicate that URL points to the package\'s repository rather than a file'
__fish_brew_complete_arg 'create' -l autotools -d 'Create a basic template for an Autotools-style build'
@ -623,15 +592,6 @@ __fish_brew_complete_arg 'dispatch-build-bottle' -l workflow -d 'Dispatch specif
__fish_brew_complete_arg 'dispatch-build-bottle' -a '(__fish_brew_suggest_formulae_all)'
__fish_brew_complete_cmd 'diy' 'Automatically determine the installation prefix for non-Homebrew software'
__fish_brew_complete_arg 'diy' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'diy' -l help -d 'Show this message'
__fish_brew_complete_arg 'diy' -l name -d 'Explicitly set the name of the package being installed'
__fish_brew_complete_arg 'diy' -l quiet -d 'Make some output more quiet'
__fish_brew_complete_arg 'diy' -l verbose -d 'Make some output more verbose'
__fish_brew_complete_arg 'diy' -l version -d 'Explicitly set the version of the package being installed'
__fish_brew_complete_cmd 'doctor' 'Check your system for potential problems'
__fish_brew_complete_arg 'doctor' -l audit-debug -d 'Enable debugging and profiling of audit methods'
__fish_brew_complete_arg 'doctor' -l debug -d 'Display any debugging information'
@ -1288,13 +1248,6 @@ __fish_brew_complete_arg 'style' -a '(__fish_brew_suggest_formulae_all)'
__fish_brew_complete_arg 'style' -a '(__fish_brew_suggest_casks_all)'
__fish_brew_complete_cmd 'switch' 'Symlink all of the specified version of formula\'s installation into Homebrew\'s prefix'
__fish_brew_complete_arg 'switch' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'switch' -l help -d 'Show this message'
__fish_brew_complete_arg 'switch' -l quiet -d 'Make some output more quiet'
__fish_brew_complete_arg 'switch' -l verbose -d 'Make some output more verbose'
__fish_brew_complete_cmd 'tap' 'Tap a formula repository'
__fish_brew_complete_arg 'tap' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'tap' -l force-auto-update -d 'Auto-update tap even if it is not hosted on GitHub. By default, only taps hosted on GitHub are auto-updated (for performance reasons)'

View File

@ -19,7 +19,6 @@ bump-cask-pr
bump-formula-pr
bump-revision
bump-unversioned-casks
cask
casks
cat
cleanup
@ -32,7 +31,6 @@ create
deps
desc
dispatch-build-bottle
diy
doctor
dr
edit
@ -83,7 +81,6 @@ sh
shellenv
sponsors
style
switch
tap
tap-info
tap-new

View File

@ -145,7 +145,6 @@ __brew_internal_commands() {
'bump-formula-pr:Create a pull request to update formula with a new URL or a new tag'
'bump-revision:Create a commit to increment the revision of formula'
'bump-unversioned-casks:Check all casks with unversioned URLs in a given tap for updates'
'cask:Homebrew Cask provides a friendly CLI workflow for the administration of macOS applications distributed as binaries'
'casks:List all locally installable casks including short names'
'cat:Display the source of a formula or cask'
'cleanup:Remove stale lock files and outdated downloads for all formulae and casks, and remove old versions of installed formulae'
@ -157,7 +156,6 @@ __brew_internal_commands() {
'deps:Show dependencies for formula'
'desc:Display formula'\''s name and one-line description'
'dispatch-build-bottle:Build bottles for these formulae with GitHub Actions'
'diy:Automatically determine the installation prefix for non-Homebrew software'
'doctor:Check your system for potential problems'
'edit:Open a formula or cask in the editor set by `EDITOR` or `HOMEBREW_EDITOR`, or open the Homebrew repository for editing if no formula is provided'
'extract:Look through repository history to find the most recent version of formula and create a copy in tap'
@ -200,7 +198,6 @@ __brew_internal_commands() {
'shellenv:Print export statements'
'sponsors:Print a Markdown summary of Homebrew'\''s GitHub Sponsors, suitable for pasting into a README'
'style:Check formulae or files for conformance to Homebrew style guidelines'
'switch:Symlink all of the specified version of formula'\''s installation into Homebrew'\''s prefix'
'tap:Tap a formula repository'
'tap-info:Show detailed information about one or more taps'
'tap-new:Generate the template files for a new tap'
@ -553,30 +550,6 @@ _brew_bump_unversioned_casks() {
'::tap:__brew_any_tap'
}
# brew cask
_brew_cask() {
_arguments \
'(--formula)--appdir[Target location for Applications (default: `/Applications`)]' \
'(--formula)--audio-unit-plugindir[Target location for Audio Unit Plugins (default: `~/Library/Audio/Plug-Ins/Components`)]' \
'(--formula)--colorpickerdir[Target location for Color Pickers (default: `~/Library/ColorPickers`)]' \
'--debug[Display any debugging information]' \
'(--formula)--dictionarydir[Target location for Dictionaries (default: `~/Library/Dictionaries`)]' \
'(--formula)--fontdir[Target location for Fonts (default: `~/Library/Fonts`)]' \
'--help[Show this message]' \
'(--formula)--input-methoddir[Target location for Input Methods (default: `~/Library/Input Methods`)]' \
'(--formula)--internet-plugindir[Target location for Internet Plugins (default: `~/Library/Internet Plug-Ins`)]' \
'(--formula)--language[Comma-separated list of language codes to prefer for cask installation. The first matching language is used, otherwise it reverts to the cask'\''s default language. The default value is the language of your system]' \
'(--formula)--mdimporterdir[Target location for Spotlight Plugins (default: `~/Library/Spotlight`)]' \
'(--formula)--prefpanedir[Target location for Preference Panes (default: `~/Library/PreferencePanes`)]' \
'(--formula)--qlplugindir[Target location for QuickLook Plugins (default: `~/Library/QuickLook`)]' \
'--quiet[Make some output more quiet]' \
'(--formula)--screen-saverdir[Target location for Screen Savers (default: `~/Library/Screen Savers`)]' \
'(--formula)--servicedir[Target location for Services (default: `~/Library/Services`)]' \
'--verbose[Make some output more verbose]' \
'(--formula)--vst-plugindir[Target location for VST Plugins (default: `~/Library/Audio/Plug-Ins/VST`)]' \
'(--formula)--vst3-plugindir[Target location for VST3 Plugins (default: `~/Library/Audio/Plug-Ins/VST3`)]'
}
# brew cat
_brew_cat() {
_arguments \
@ -644,17 +617,6 @@ _brew_config() {
'--verbose[Make some output more verbose]'
}
# brew configure
_brew_configure() {
_arguments \
'--debug[Display any debugging information]' \
'--help[Show this message]' \
'--name[Explicitly set the name of the package being installed]' \
'--quiet[Make some output more quiet]' \
'--verbose[Make some output more verbose]' \
'--version[Explicitly set the version of the package being installed]'
}
# brew create
_brew_create() {
_arguments \
@ -737,17 +699,6 @@ _brew_dispatch_build_bottle() {
'::formula:__brew_formulae'
}
# brew diy
_brew_diy() {
_arguments \
'--debug[Display any debugging information]' \
'--help[Show this message]' \
'--name[Explicitly set the name of the package being installed]' \
'--quiet[Make some output more quiet]' \
'--verbose[Make some output more verbose]' \
'--version[Explicitly set the version of the package being installed]'
}
# brew doctor
_brew_doctor() {
_arguments \
@ -1501,15 +1452,6 @@ _brew_style() {
'::cask:__brew_casks'
}
# brew switch
_brew_switch() {
_arguments \
'--debug[Display any debugging information]' \
'--help[Show this message]' \
'--quiet[Make some output more quiet]' \
'--verbose[Make some output more verbose]'
}
# brew tap
_brew_tap() {
_arguments \

View File

@ -1225,19 +1225,6 @@ Requires write access to the Homebrew/brew repository.
* `--minor`:
Create a minor release.
### `release-notes` [*`options`*] [*`previous_tag`*] [*`end_ref`*]
Print the merged pull requests on Homebrew/brew between two Git refs.
If no *`previous_tag`* is provided it defaults to the latest tag.
If no *`end_ref`* is provided it defaults to `origin/master`.
If `--markdown` and a *`previous_tag`* are passed, an extra line containing
a link to the Homebrew blog will be adding to the output. Additionally,
a warning will be shown if the latest minor release was less than one month ago.
* `--markdown`:
Print as a Markdown list.
### `rubocop`
Installs, configures and runs Homebrew's `rubocop`.

View File

@ -1703,16 +1703,6 @@ Create a major release\.
\fB\-\-minor\fR
Create a minor release\.
.
.SS "\fBrelease\-notes\fR [\fIoptions\fR] [\fIprevious_tag\fR] [\fIend_ref\fR]"
Print the merged pull requests on Homebrew/brew between two Git refs\. If no \fIprevious_tag\fR is provided it defaults to the latest tag\. If no \fIend_ref\fR is provided it defaults to \fBorigin/master\fR\.
.
.P
If \fB\-\-markdown\fR and a \fIprevious_tag\fR are passed, an extra line containing a link to the Homebrew blog will be adding to the output\. Additionally, a warning will be shown if the latest minor release was less than one month ago\.
.
.TP
\fB\-\-markdown\fR
Print as a Markdown list\.
.
.SS "\fBrubocop\fR"
Installs, configures and runs Homebrew\'s \fBrubocop\fR\.
.