Merge pull request #8795 from reitermarkus/homebrew-args

Completely deprecate `Homebrew.args`.
This commit is contained in:
Markus Reiter 2020-11-11 22:44:59 +01:00 committed by GitHub
commit 08d4ba6877
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 358 additions and 69 deletions

View File

@ -68,7 +68,6 @@ begin
ARGV.delete_at(help_cmd_index) if help_cmd_index
args = Homebrew::CLI::Parser.new.parse(ARGV.dup.freeze, ignore_invalid_options: true)
Homebrew.args = args
Context.current = args.context
path = PATH.new(ENV["PATH"])

View File

@ -6,6 +6,7 @@ require "compat/cli/parser"
require "compat/extend/nil"
require "compat/extend/string"
require "compat/formula"
require "compat/global"
require "compat/language/java"
require "compat/language/python"
require "compat/os/mac" if OS.mac?

View File

@ -1,27 +1,15 @@
# typed: true
# frozen_string_literal: true
require "compat/global"
module Homebrew
module CLI
class Parser
module Compat
module DeprecatedArgs
# No need to define it as it's the default/superclass implementation.
# rubocop:disable Style/MissingRespondToMissing
def method_missing(method, *)
if ![:debug?, :quiet?, :verbose?, :value].include?(method) && !@printed_args_warning
odeprecated "Homebrew.args", "`args = <command>_args.parse` and pass `args` along the call chain"
@printed_args_warning = true
end
super
end
# rubocop:enable Style/MissingRespondToMissing
end
def parse(*)
args = super
Homebrew.args = args.dup.extend(DeprecatedArgs)
Homebrew.args = args.dup
args
end
end

View File

@ -0,0 +1,21 @@
# typed: true
# frozen_string_literal: true
module Homebrew
module Compat
attr_writer :args
def args
unless @printed_args_warning
odeprecated "Homebrew.args", "`args = <command>_args.parse` and pass `args` along the call chain"
@printed_args_warning = true
end
@args ||= CLI::Args.new
end
end
class << self
prepend Compat
end
end

View File

@ -0,0 +1,8 @@
# typed: strict
# frozen_string_literal: true
module Homebrew
module Compat
include Kernel
end
end

View File

@ -82,7 +82,7 @@ module Homebrew
DEFAULT_REPOSITORY = "#{DEFAULT_PREFIX}/Homebrew"
class << self
attr_writer :failed, :raise_deprecation_exceptions, :auditing, :args
attr_writer :failed, :raise_deprecation_exceptions, :auditing
def Homebrew.default_prefix?(prefix = HOMEBREW_PREFIX)
prefix.to_s == DEFAULT_PREFIX
@ -93,10 +93,6 @@ module Homebrew
@failed == true
end
def args
@args ||= CLI::Args.new
end
def messages
@messages ||= Messages.new
end

View File

@ -2980,10 +2980,6 @@ end
BasicObject::BasicObject = BasicObject
class BasicSocket
def read_nonblock(len, str=T.unsafe(nil), exception: T.unsafe(nil)); end
end
class Benchmark::Job
def initialize(width); end
end
@ -5584,6 +5580,10 @@ class Cask::Cask
def zap(&block); end
end
class Cask::Cmd::AbstractCommand
include ::Homebrew::Search::Extension
end
class Cask::Config
def appdir(); end
@ -6725,6 +6725,10 @@ module DependenciesHelpers
include ::DependenciesHelpers::Compat
end
class Descriptions
extend ::Homebrew::Search::Extension
end
class Dir
def children(); end
@ -6979,37 +6983,81 @@ class Enumerator::Generator
def initialize(*_); end
end
Errno::EAUTH = Errno::NOERROR
class Errno::EAUTH
Errno = ::T.let(nil, ::T.untyped)
end
Errno::EBADARCH = Errno::NOERROR
class Errno::EAUTH
end
Errno::EBADEXEC = Errno::NOERROR
class Errno::EBADARCH
Errno = ::T.let(nil, ::T.untyped)
end
Errno::EBADMACHO = Errno::NOERROR
class Errno::EBADARCH
end
Errno::EBADRPC = Errno::NOERROR
class Errno::EBADEXEC
Errno = ::T.let(nil, ::T.untyped)
end
Errno::ECAPMODE = Errno::NOERROR
class Errno::EBADEXEC
end
Errno::EDEADLOCK = Errno::EDEADLK
class Errno::EBADMACHO
Errno = ::T.let(nil, ::T.untyped)
end
Errno::EDEVERR = Errno::NOERROR
class Errno::EBADMACHO
end
class Errno::EBADRPC
Errno = ::T.let(nil, ::T.untyped)
end
class Errno::EBADRPC
end
Errno::EDEADLOCK = Errno::NOERROR
class Errno::EDEVERR
Errno = ::T.let(nil, ::T.untyped)
end
class Errno::EDEVERR
end
Errno::EDOOFUS = Errno::NOERROR
Errno::EFTYPE = Errno::NOERROR
class Errno::EFTYPE
Errno = ::T.let(nil, ::T.untyped)
end
class Errno::EFTYPE
end
Errno::EIPSEC = Errno::NOERROR
Errno::ELAST = Errno::NOERROR
class Errno::ENEEDAUTH
Errno = ::T.let(nil, ::T.untyped)
end
Errno::ENEEDAUTH = Errno::NOERROR
class Errno::ENEEDAUTH
end
Errno::ENOATTR = Errno::NOERROR
class Errno::ENOATTR
Errno = ::T.let(nil, ::T.untyped)
end
Errno::ENOPOLICY = Errno::NOERROR
class Errno::ENOATTR
end
Errno::ENOTCAPABLE = Errno::NOERROR
class Errno::ENOPOLICY
Errno = ::T.let(nil, ::T.untyped)
end
class Errno::ENOPOLICY
end
class Errno::ENOTSUP
Errno = ::T.let(nil, ::T.untyped)
@ -7018,21 +7066,61 @@ end
class Errno::ENOTSUP
end
Errno::EPROCLIM = Errno::NOERROR
class Errno::EPROCLIM
Errno = ::T.let(nil, ::T.untyped)
end
Errno::EPROCUNAVAIL = Errno::NOERROR
class Errno::EPROCLIM
end
Errno::EPROGMISMATCH = Errno::NOERROR
class Errno::EPROCUNAVAIL
Errno = ::T.let(nil, ::T.untyped)
end
Errno::EPROGUNAVAIL = Errno::NOERROR
class Errno::EPROCUNAVAIL
end
Errno::EPWROFF = Errno::NOERROR
class Errno::EPROGMISMATCH
Errno = ::T.let(nil, ::T.untyped)
end
Errno::EQFULL = Errno::NOERROR
class Errno::EPROGMISMATCH
end
Errno::ERPCMISMATCH = Errno::NOERROR
class Errno::EPROGUNAVAIL
Errno = ::T.let(nil, ::T.untyped)
end
Errno::ESHLIBVERS = Errno::NOERROR
class Errno::EPROGUNAVAIL
end
class Errno::EPWROFF
Errno = ::T.let(nil, ::T.untyped)
end
class Errno::EPWROFF
end
class Errno::EQFULL
Errno = ::T.let(nil, ::T.untyped)
end
class Errno::EQFULL
end
class Errno::ERPCMISMATCH
Errno = ::T.let(nil, ::T.untyped)
end
class Errno::ERPCMISMATCH
end
class Errno::ESHLIBVERS
Errno = ::T.let(nil, ::T.untyped)
end
class Errno::ESHLIBVERS
end
class Etc::Group
def gid(); end
@ -7062,8 +7150,16 @@ class Etc::Group
end
class Etc::Passwd
def change(); end
def change=(_); end
def dir=(_); end
def expire(); end
def expire=(_); end
def gecos(); end
def gecos=(_); end
@ -7076,6 +7172,10 @@ class Etc::Passwd
def shell=(_); end
def uclass(); end
def uclass=(_); end
def uid=(_); end
end
@ -7171,10 +7271,6 @@ module Fiddle
WINDOWS = ::T.let(nil, ::T.untyped)
end
class Fiddle::Function
STDCALL = ::T.let(nil, ::T.untyped)
end
class File
def self.atomic_write(file_name, temp_dir=T.unsafe(nil)); end
@ -8203,9 +8299,15 @@ module Homebrew::MissingFormula
extend ::T::Private::Methods::SingletonMethodHooks
end
module Homebrew::Search
include ::Homebrew::Search::Extension
end
module Homebrew
extend ::FileUtils::StreamUtils_
extend ::Homebrew::Search::Extension
extend ::DependenciesHelpers::Compat
extend ::Homebrew::Compat
def self.default_prefix?(prefix=T.unsafe(nil)); end
end
@ -13375,6 +13477,7 @@ class Object
def to_query(key); end
def to_yaml(options=T.unsafe(nil)); end
APPLE_GEM_HOME = ::T.let(nil, ::T.untyped)
APPLY_A = ::T.let(nil, ::T.untyped)
APPLY_B = ::T.let(nil, ::T.untyped)
APPLY_C = ::T.let(nil, ::T.untyped)
@ -13447,6 +13550,8 @@ class Object
RUBY_DESCRIPTION = ::T.let(nil, ::T.untyped)
RUBY_ENGINE = ::T.let(nil, ::T.untyped)
RUBY_ENGINE_VERSION = ::T.let(nil, ::T.untyped)
RUBY_FRAMEWORK = ::T.let(nil, ::T.untyped)
RUBY_FRAMEWORK_VERSION = ::T.let(nil, ::T.untyped)
RUBY_PATCHLEVEL = ::T.let(nil, ::T.untyped)
RUBY_PATH = ::T.let(nil, ::T.untyped)
RUBY_PLATFORM = ::T.let(nil, ::T.untyped)
@ -13507,11 +13612,7 @@ class OpenSSL::KDF::KDFError
end
module OpenSSL::KDF
def self.hkdf(*_); end
def self.pbkdf2_hmac(*_); end
def self.scrypt(*_); end
end
class OpenSSL::OCSP::Request
@ -13520,29 +13621,20 @@ end
OpenSSL::PKCS7::Signer = OpenSSL::PKCS7::SignerInfo
class OpenSSL::PKey::EC
EXPLICIT_CURVE = ::T.let(nil, ::T.untyped)
end
class OpenSSL::PKey::EC::Point
def to_octet_string(_); end
end
module OpenSSL::SSL
OP_ALLOW_NO_DHE_KEX = ::T.let(nil, ::T.untyped)
OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION = ::T.let(nil, ::T.untyped)
OP_CRYPTOPRO_TLSEXT_BUG = ::T.let(nil, ::T.untyped)
OP_LEGACY_SERVER_CONNECT = ::T.let(nil, ::T.untyped)
OP_NO_ENCRYPT_THEN_MAC = ::T.let(nil, ::T.untyped)
OP_NO_RENEGOTIATION = ::T.let(nil, ::T.untyped)
OP_NO_TLSv1_3 = ::T.let(nil, ::T.untyped)
OP_SAFARI_ECDHE_ECDSA_BUG = ::T.let(nil, ::T.untyped)
OP_TLSEXT_PADDING = ::T.let(nil, ::T.untyped)
SSL2_VERSION = ::T.let(nil, ::T.untyped)
SSL3_VERSION = ::T.let(nil, ::T.untyped)
TLS1_1_VERSION = ::T.let(nil, ::T.untyped)
TLS1_2_VERSION = ::T.let(nil, ::T.untyped)
TLS1_3_VERSION = ::T.let(nil, ::T.untyped)
TLS1_VERSION = ::T.let(nil, ::T.untyped)
end
@ -13557,8 +13649,6 @@ class OpenSSL::SSL::SSLContext
def alpn_select_cb=(alpn_select_cb); end
def enable_fallback_scsv(); end
def max_version=(version); end
def min_version=(version); end
@ -15139,8 +15229,8 @@ class Parser::Ruby26
end
class Pathname
include ::ELFShim
include ::MachOShim
include ::ELFShim
def fnmatch?(*_); end
def glob(*_); end
@ -28283,6 +28373,188 @@ module Singleton
def self.__init__(klass); end
end
class Socket
AF_CCITT = ::T.let(nil, ::T.untyped)
AF_CHAOS = ::T.let(nil, ::T.untyped)
AF_CNT = ::T.let(nil, ::T.untyped)
AF_COIP = ::T.let(nil, ::T.untyped)
AF_DATAKIT = ::T.let(nil, ::T.untyped)
AF_DLI = ::T.let(nil, ::T.untyped)
AF_E164 = ::T.let(nil, ::T.untyped)
AF_ECMA = ::T.let(nil, ::T.untyped)
AF_HYLINK = ::T.let(nil, ::T.untyped)
AF_IMPLINK = ::T.let(nil, ::T.untyped)
AF_ISO = ::T.let(nil, ::T.untyped)
AF_LAT = ::T.let(nil, ::T.untyped)
AF_LINK = ::T.let(nil, ::T.untyped)
AF_NATM = ::T.let(nil, ::T.untyped)
AF_NDRV = ::T.let(nil, ::T.untyped)
AF_NETBIOS = ::T.let(nil, ::T.untyped)
AF_NS = ::T.let(nil, ::T.untyped)
AF_OSI = ::T.let(nil, ::T.untyped)
AF_PPP = ::T.let(nil, ::T.untyped)
AF_PUP = ::T.let(nil, ::T.untyped)
AF_SIP = ::T.let(nil, ::T.untyped)
AF_SYSTEM = ::T.let(nil, ::T.untyped)
AI_DEFAULT = ::T.let(nil, ::T.untyped)
AI_MASK = ::T.let(nil, ::T.untyped)
AI_V4MAPPED_CFG = ::T.let(nil, ::T.untyped)
EAI_BADHINTS = ::T.let(nil, ::T.untyped)
EAI_MAX = ::T.let(nil, ::T.untyped)
EAI_PROTOCOL = ::T.let(nil, ::T.untyped)
IFF_ALTPHYS = ::T.let(nil, ::T.untyped)
IFF_LINK0 = ::T.let(nil, ::T.untyped)
IFF_LINK1 = ::T.let(nil, ::T.untyped)
IFF_LINK2 = ::T.let(nil, ::T.untyped)
IFF_OACTIVE = ::T.let(nil, ::T.untyped)
IFF_SIMPLEX = ::T.let(nil, ::T.untyped)
IPPROTO_EON = ::T.let(nil, ::T.untyped)
IPPROTO_GGP = ::T.let(nil, ::T.untyped)
IPPROTO_HELLO = ::T.let(nil, ::T.untyped)
IPPROTO_MAX = ::T.let(nil, ::T.untyped)
IPPROTO_ND = ::T.let(nil, ::T.untyped)
IPPROTO_XTP = ::T.let(nil, ::T.untyped)
IPV6_DONTFRAG = ::T.let(nil, ::T.untyped)
IPV6_PATHMTU = ::T.let(nil, ::T.untyped)
IPV6_RECVPATHMTU = ::T.let(nil, ::T.untyped)
IPV6_USE_MIN_MTU = ::T.let(nil, ::T.untyped)
IP_PORTRANGE = ::T.let(nil, ::T.untyped)
IP_RECVDSTADDR = ::T.let(nil, ::T.untyped)
IP_RECVIF = ::T.let(nil, ::T.untyped)
LOCAL_PEERCRED = ::T.let(nil, ::T.untyped)
MSG_EOF = ::T.let(nil, ::T.untyped)
MSG_FLUSH = ::T.let(nil, ::T.untyped)
MSG_HAVEMORE = ::T.let(nil, ::T.untyped)
MSG_HOLD = ::T.let(nil, ::T.untyped)
MSG_RCVMORE = ::T.let(nil, ::T.untyped)
MSG_SEND = ::T.let(nil, ::T.untyped)
PF_CCITT = ::T.let(nil, ::T.untyped)
PF_CHAOS = ::T.let(nil, ::T.untyped)
PF_CNT = ::T.let(nil, ::T.untyped)
PF_COIP = ::T.let(nil, ::T.untyped)
PF_DATAKIT = ::T.let(nil, ::T.untyped)
PF_DLI = ::T.let(nil, ::T.untyped)
PF_ECMA = ::T.let(nil, ::T.untyped)
PF_HYLINK = ::T.let(nil, ::T.untyped)
PF_IMPLINK = ::T.let(nil, ::T.untyped)
PF_ISO = ::T.let(nil, ::T.untyped)
PF_LAT = ::T.let(nil, ::T.untyped)
PF_LINK = ::T.let(nil, ::T.untyped)
PF_NATM = ::T.let(nil, ::T.untyped)
PF_NDRV = ::T.let(nil, ::T.untyped)
PF_NETBIOS = ::T.let(nil, ::T.untyped)
PF_NS = ::T.let(nil, ::T.untyped)
PF_OSI = ::T.let(nil, ::T.untyped)
PF_PIP = ::T.let(nil, ::T.untyped)
PF_PPP = ::T.let(nil, ::T.untyped)
PF_PUP = ::T.let(nil, ::T.untyped)
PF_RTIP = ::T.let(nil, ::T.untyped)
PF_SIP = ::T.let(nil, ::T.untyped)
PF_SYSTEM = ::T.let(nil, ::T.untyped)
PF_XTP = ::T.let(nil, ::T.untyped)
SCM_CREDS = ::T.let(nil, ::T.untyped)
SO_DONTTRUNC = ::T.let(nil, ::T.untyped)
SO_NKE = ::T.let(nil, ::T.untyped)
SO_NOSIGPIPE = ::T.let(nil, ::T.untyped)
SO_NREAD = ::T.let(nil, ::T.untyped)
SO_USELOOPBACK = ::T.let(nil, ::T.untyped)
SO_WANTMORE = ::T.let(nil, ::T.untyped)
SO_WANTOOBFLAG = ::T.let(nil, ::T.untyped)
TCP_NOOPT = ::T.let(nil, ::T.untyped)
TCP_NOPUSH = ::T.let(nil, ::T.untyped)
end
module Socket::Constants
AF_CCITT = ::T.let(nil, ::T.untyped)
AF_CHAOS = ::T.let(nil, ::T.untyped)
AF_CNT = ::T.let(nil, ::T.untyped)
AF_COIP = ::T.let(nil, ::T.untyped)
AF_DATAKIT = ::T.let(nil, ::T.untyped)
AF_DLI = ::T.let(nil, ::T.untyped)
AF_E164 = ::T.let(nil, ::T.untyped)
AF_ECMA = ::T.let(nil, ::T.untyped)
AF_HYLINK = ::T.let(nil, ::T.untyped)
AF_IMPLINK = ::T.let(nil, ::T.untyped)
AF_ISO = ::T.let(nil, ::T.untyped)
AF_LAT = ::T.let(nil, ::T.untyped)
AF_LINK = ::T.let(nil, ::T.untyped)
AF_NATM = ::T.let(nil, ::T.untyped)
AF_NDRV = ::T.let(nil, ::T.untyped)
AF_NETBIOS = ::T.let(nil, ::T.untyped)
AF_NS = ::T.let(nil, ::T.untyped)
AF_OSI = ::T.let(nil, ::T.untyped)
AF_PPP = ::T.let(nil, ::T.untyped)
AF_PUP = ::T.let(nil, ::T.untyped)
AF_SIP = ::T.let(nil, ::T.untyped)
AF_SYSTEM = ::T.let(nil, ::T.untyped)
AI_DEFAULT = ::T.let(nil, ::T.untyped)
AI_MASK = ::T.let(nil, ::T.untyped)
AI_V4MAPPED_CFG = ::T.let(nil, ::T.untyped)
EAI_BADHINTS = ::T.let(nil, ::T.untyped)
EAI_MAX = ::T.let(nil, ::T.untyped)
EAI_PROTOCOL = ::T.let(nil, ::T.untyped)
IFF_ALTPHYS = ::T.let(nil, ::T.untyped)
IFF_LINK0 = ::T.let(nil, ::T.untyped)
IFF_LINK1 = ::T.let(nil, ::T.untyped)
IFF_LINK2 = ::T.let(nil, ::T.untyped)
IFF_OACTIVE = ::T.let(nil, ::T.untyped)
IFF_SIMPLEX = ::T.let(nil, ::T.untyped)
IPPROTO_EON = ::T.let(nil, ::T.untyped)
IPPROTO_GGP = ::T.let(nil, ::T.untyped)
IPPROTO_HELLO = ::T.let(nil, ::T.untyped)
IPPROTO_MAX = ::T.let(nil, ::T.untyped)
IPPROTO_ND = ::T.let(nil, ::T.untyped)
IPPROTO_XTP = ::T.let(nil, ::T.untyped)
IPV6_DONTFRAG = ::T.let(nil, ::T.untyped)
IPV6_PATHMTU = ::T.let(nil, ::T.untyped)
IPV6_RECVPATHMTU = ::T.let(nil, ::T.untyped)
IPV6_USE_MIN_MTU = ::T.let(nil, ::T.untyped)
IP_PORTRANGE = ::T.let(nil, ::T.untyped)
IP_RECVDSTADDR = ::T.let(nil, ::T.untyped)
IP_RECVIF = ::T.let(nil, ::T.untyped)
LOCAL_PEERCRED = ::T.let(nil, ::T.untyped)
MSG_EOF = ::T.let(nil, ::T.untyped)
MSG_FLUSH = ::T.let(nil, ::T.untyped)
MSG_HAVEMORE = ::T.let(nil, ::T.untyped)
MSG_HOLD = ::T.let(nil, ::T.untyped)
MSG_RCVMORE = ::T.let(nil, ::T.untyped)
MSG_SEND = ::T.let(nil, ::T.untyped)
PF_CCITT = ::T.let(nil, ::T.untyped)
PF_CHAOS = ::T.let(nil, ::T.untyped)
PF_CNT = ::T.let(nil, ::T.untyped)
PF_COIP = ::T.let(nil, ::T.untyped)
PF_DATAKIT = ::T.let(nil, ::T.untyped)
PF_DLI = ::T.let(nil, ::T.untyped)
PF_ECMA = ::T.let(nil, ::T.untyped)
PF_HYLINK = ::T.let(nil, ::T.untyped)
PF_IMPLINK = ::T.let(nil, ::T.untyped)
PF_ISO = ::T.let(nil, ::T.untyped)
PF_LAT = ::T.let(nil, ::T.untyped)
PF_LINK = ::T.let(nil, ::T.untyped)
PF_NATM = ::T.let(nil, ::T.untyped)
PF_NDRV = ::T.let(nil, ::T.untyped)
PF_NETBIOS = ::T.let(nil, ::T.untyped)
PF_NS = ::T.let(nil, ::T.untyped)
PF_OSI = ::T.let(nil, ::T.untyped)
PF_PIP = ::T.let(nil, ::T.untyped)
PF_PPP = ::T.let(nil, ::T.untyped)
PF_PUP = ::T.let(nil, ::T.untyped)
PF_RTIP = ::T.let(nil, ::T.untyped)
PF_SIP = ::T.let(nil, ::T.untyped)
PF_SYSTEM = ::T.let(nil, ::T.untyped)
PF_XTP = ::T.let(nil, ::T.untyped)
SCM_CREDS = ::T.let(nil, ::T.untyped)
SO_DONTTRUNC = ::T.let(nil, ::T.untyped)
SO_NKE = ::T.let(nil, ::T.untyped)
SO_NOSIGPIPE = ::T.let(nil, ::T.untyped)
SO_NREAD = ::T.let(nil, ::T.untyped)
SO_USELOOPBACK = ::T.let(nil, ::T.untyped)
SO_WANTMORE = ::T.let(nil, ::T.untyped)
SO_WANTOOBFLAG = ::T.let(nil, ::T.untyped)
TCP_NOOPT = ::T.let(nil, ::T.untyped)
TCP_NOPUSH = ::T.let(nil, ::T.untyped)
end
class SoftwareSpec
def cached_download(*args, &block); end

View File

@ -246,7 +246,7 @@ describe Homebrew::CLI::Parser do
end
}
it "raises exception upon Homebrew.args mutation" do
it "raises exception when arguments were already parsed" do
parser.parse(["--switch-a"])
expect { parser.parse(["--switch-b"]) }.to raise_error(RuntimeError, /Arguments were already parsed!/)
end

View File

@ -1,14 +1,18 @@
# typed: false
# frozen_string_literal: true
require "context"
# Helper module for parsing output of `brew livecheck`.
#
# @api private
module LivecheckFormula
extend Context
module_function
def init(formula)
ohai "Checking livecheck formula: #{formula}" if Homebrew.args.verbose?
ohai "Checking livecheck formula: #{formula}" if verbose?
response = Utils.popen_read(HOMEBREW_BREW_FILE, "livecheck", formula, "--quiet").chomp