Merge branch 'master' into install-upgrade-outdated
This commit is contained in:
commit
4b59636ae8
14
.github/workflows/tests.yml
vendored
14
.github/workflows/tests.yml
vendored
@ -24,7 +24,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-rubygems-
|
restore-keys: ${{ runner.os }}-rubygems-
|
||||||
|
|
||||||
- name: Install Bundler RubyGems
|
- name: Install Bundler RubyGems
|
||||||
run: brew install-bundler-gems
|
run: brew install-bundler-gems --groups=sorbet
|
||||||
|
|
||||||
- name: Install shellcheck
|
- name: Install shellcheck
|
||||||
run: brew install shellcheck
|
run: brew install shellcheck
|
||||||
@ -60,7 +60,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-rubygems-
|
restore-keys: ${{ runner.os }}-rubygems-
|
||||||
|
|
||||||
- name: Install Bundler RubyGems
|
- name: Install Bundler RubyGems
|
||||||
run: brew install-bundler-gems
|
run: brew install-bundler-gems --groups=sorbet
|
||||||
|
|
||||||
- run: brew doctor
|
- run: brew doctor
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ jobs:
|
|||||||
# Can't cache this because we need to check that it doesn't fail the
|
# Can't cache this because we need to check that it doesn't fail the
|
||||||
# "uncommitted RubyGems" step with a cold cache.
|
# "uncommitted RubyGems" step with a cold cache.
|
||||||
- name: Install Bundler RubyGems
|
- name: Install Bundler RubyGems
|
||||||
run: brew install-bundler-gems
|
run: brew install-bundler-gems --groups=sorbet
|
||||||
|
|
||||||
- name: Check for uncommitted RubyGems
|
- name: Check for uncommitted RubyGems
|
||||||
run: git diff --stat --exit-code Library/Homebrew/vendor/bundle/ruby
|
run: git diff --stat --exit-code Library/Homebrew/vendor/bundle/ruby
|
||||||
@ -206,7 +206,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-rubygems-
|
restore-keys: ${{ runner.os }}-rubygems-
|
||||||
|
|
||||||
- name: Install Bundler RubyGems
|
- name: Install Bundler RubyGems
|
||||||
run: brew install-bundler-gems
|
run: brew install-bundler-gems --groups=sorbet
|
||||||
|
|
||||||
- name: Create parallel test log directory
|
- name: Create parallel test log directory
|
||||||
run: mkdir tests
|
run: mkdir tests
|
||||||
@ -227,7 +227,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- uses: codecov/codecov-action@a1ed4b322b4b38cb846afb5a0ebfa17086917d27
|
- uses: codecov/codecov-action@29386c70ef20e286228c72b668a06fd0e8399192
|
||||||
|
|
||||||
test-default-formula-linux:
|
test-default-formula-linux:
|
||||||
name: test default formula (Linux)
|
name: test default formula (Linux)
|
||||||
@ -265,7 +265,7 @@ jobs:
|
|||||||
# Can't cache this because we need to check that it doesn't fail the
|
# Can't cache this because we need to check that it doesn't fail the
|
||||||
# "uncommitted RubyGems" step with a cold cache.
|
# "uncommitted RubyGems" step with a cold cache.
|
||||||
- name: Install Bundler RubyGems
|
- name: Install Bundler RubyGems
|
||||||
run: brew install-bundler-gems
|
run: brew install-bundler-gems --groups=sorbet
|
||||||
|
|
||||||
- name: Check for uncommitted RubyGems
|
- name: Check for uncommitted RubyGems
|
||||||
run: git diff --stat --exit-code Library/Homebrew/vendor/bundle/ruby
|
run: git diff --stat --exit-code Library/Homebrew/vendor/bundle/ruby
|
||||||
@ -319,4 +319,4 @@ jobs:
|
|||||||
|
|
||||||
- run: brew test-bot --only-formulae --test-default-formula
|
- run: brew test-bot --only-formulae --test-default-formula
|
||||||
|
|
||||||
- uses: codecov/codecov-action@a1ed4b322b4b38cb846afb5a0ebfa17086917d27
|
- uses: codecov/codecov-action@29386c70ef20e286228c72b668a06fd0e8399192
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
BUNDLE_BIN: "false"
|
BUNDLE_BIN: "false"
|
||||||
BUNDLE_CLEAN: "true"
|
BUNDLE_CLEAN: "true"
|
||||||
BUNDLE_DISABLE_SHARED_GEMS: "true"
|
BUNDLE_DISABLE_SHARED_GEMS: "true"
|
||||||
|
BUNDLE_FORGET_CLI_OPTIONS: "true"
|
||||||
BUNDLE_JOBS: "4"
|
BUNDLE_JOBS: "4"
|
||||||
BUNDLE_PATH: "vendor/bundle"
|
BUNDLE_PATH: "vendor/bundle"
|
||||||
BUNDLE_RETRY: "3"
|
BUNDLE_RETRY: "3"
|
||||||
|
|||||||
@ -8,6 +8,7 @@ Style/Documentation:
|
|||||||
- "cask/macos.rb"
|
- "cask/macos.rb"
|
||||||
- "cli/args.rb"
|
- "cli/args.rb"
|
||||||
- "cli/parser.rb"
|
- "cli/parser.rb"
|
||||||
|
- "default_prefix.rb"
|
||||||
- "global.rb"
|
- "global.rb"
|
||||||
- "keg_relocate.rb"
|
- "keg_relocate.rb"
|
||||||
- "os/linux/global.rb"
|
- "os/linux/global.rb"
|
||||||
|
|||||||
@ -13,16 +13,19 @@ gem "rspec", require: false
|
|||||||
gem "rspec-github", require: false
|
gem "rspec-github", require: false
|
||||||
gem "rspec-its", require: false
|
gem "rspec-its", require: false
|
||||||
gem "rspec-retry", require: false
|
gem "rspec-retry", require: false
|
||||||
gem "rspec-sorbet", require: false
|
|
||||||
gem "rspec-wait", require: false
|
gem "rspec-wait", require: false
|
||||||
gem "rubocop", require: false
|
gem "rubocop", require: false
|
||||||
gem "rubocop-ast", require: false
|
gem "rubocop-ast", require: false
|
||||||
gem "simplecov", require: false
|
gem "simplecov", require: false
|
||||||
gem "simplecov-cobertura", require: false
|
gem "simplecov-cobertura", require: false
|
||||||
|
gem "warning", require: false
|
||||||
|
|
||||||
|
group :sorbet, optional: true do
|
||||||
|
gem "rspec-sorbet", require: false
|
||||||
gem "sorbet", require: false
|
gem "sorbet", require: false
|
||||||
gem "sorbet-runtime", require: false
|
gem "sorbet-runtime", require: false
|
||||||
gem "tapioca", require: false
|
gem "tapioca", require: false
|
||||||
gem "warning", require: false
|
end
|
||||||
|
|
||||||
# vendored gems
|
# vendored gems
|
||||||
gem "activesupport"
|
gem "activesupport"
|
||||||
|
|||||||
@ -109,7 +109,7 @@ GEM
|
|||||||
rspec-support (3.10.2)
|
rspec-support (3.10.2)
|
||||||
rspec-wait (0.0.9)
|
rspec-wait (0.0.9)
|
||||||
rspec (>= 3, < 4)
|
rspec (>= 3, < 4)
|
||||||
rubocop (1.16.0)
|
rubocop (1.16.1)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.0.0.0)
|
parser (>= 3.0.0.0)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
@ -127,7 +127,7 @@ GEM
|
|||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
rack (>= 1.1)
|
rack (>= 1.1)
|
||||||
rubocop (>= 1.7.0, < 2.0)
|
rubocop (>= 1.7.0, < 2.0)
|
||||||
rubocop-rspec (2.3.0)
|
rubocop-rspec (2.4.0)
|
||||||
rubocop (~> 1.0)
|
rubocop (~> 1.0)
|
||||||
rubocop-ast (>= 1.1.0)
|
rubocop-ast (>= 1.1.0)
|
||||||
rubocop-sorbet (0.6.2)
|
rubocop-sorbet (0.6.2)
|
||||||
|
|||||||
@ -56,6 +56,8 @@ module Cask
|
|||||||
caveats = cask.caveats
|
caveats = cask.caveats
|
||||||
return if caveats.empty?
|
return if caveats.empty?
|
||||||
|
|
||||||
|
Homebrew.messages.record_caveats(cask.token, caveats)
|
||||||
|
|
||||||
<<~EOS
|
<<~EOS
|
||||||
#{ohai_title "Caveats"}
|
#{ohai_title "Caveats"}
|
||||||
#{caveats}
|
#{caveats}
|
||||||
|
|||||||
@ -275,6 +275,9 @@ module Homebrew
|
|||||||
|
|
||||||
sig { returns(T.nilable(String)) }
|
sig { returns(T.nilable(String)) }
|
||||||
def screen_saverdir; end
|
def screen_saverdir; end
|
||||||
|
|
||||||
|
sig { returns(T.nilable(T::Array[String])) }
|
||||||
|
def groups; end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -10,6 +10,7 @@ require "utils/tty"
|
|||||||
|
|
||||||
COMMAND_DESC_WIDTH = 80
|
COMMAND_DESC_WIDTH = 80
|
||||||
OPTION_DESC_WIDTH = 43
|
OPTION_DESC_WIDTH = 43
|
||||||
|
HIDDEN_DESC_PLACEHOLDER = "@@HIDDEN@@"
|
||||||
|
|
||||||
module Homebrew
|
module Homebrew
|
||||||
module CLI
|
module CLI
|
||||||
@ -148,13 +149,13 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def switch(*names, description: nil, replacement: nil, env: nil, required_for: nil, depends_on: nil,
|
def switch(*names, description: nil, replacement: nil, env: nil, required_for: nil, depends_on: nil,
|
||||||
method: :on)
|
method: :on, hidden: false)
|
||||||
global_switch = names.first.is_a?(Symbol)
|
global_switch = names.first.is_a?(Symbol)
|
||||||
return if global_switch
|
return if global_switch
|
||||||
|
|
||||||
description = option_to_description(*names) if description.nil?
|
description = option_description(description, *names, hidden: hidden)
|
||||||
if replacement.nil?
|
if replacement.nil?
|
||||||
process_option(*names, description, type: :switch)
|
process_option(*names, description, type: :switch, hidden: hidden)
|
||||||
else
|
else
|
||||||
description += " (disabled#{"; replaced by #{replacement}" if replacement.present?})"
|
description += " (disabled#{"; replaced by #{replacement}" if replacement.present?})"
|
||||||
end
|
end
|
||||||
@ -198,10 +199,10 @@ module Homebrew
|
|||||||
@parser.banner
|
@parser.banner
|
||||||
end
|
end
|
||||||
|
|
||||||
def comma_array(name, description: nil)
|
def comma_array(name, description: nil, hidden: false)
|
||||||
name = name.chomp "="
|
name = name.chomp "="
|
||||||
description = option_to_description(name) if description.nil?
|
description = option_description(description, name, hidden: hidden)
|
||||||
process_option(name, description, type: :comma_array)
|
process_option(name, description, type: :comma_array, hidden: hidden)
|
||||||
@parser.on(name, OptionParser::REQUIRED_ARGUMENT, Array, *wrap_option_desc(description)) do |list|
|
@parser.on(name, OptionParser::REQUIRED_ARGUMENT, Array, *wrap_option_desc(description)) do |list|
|
||||||
@args[option_to_name(name)] = list
|
@args[option_to_name(name)] = list
|
||||||
end
|
end
|
||||||
@ -215,7 +216,7 @@ module Homebrew
|
|||||||
[OptionParser::OPTIONAL_ARGUMENT, :optional_flag]
|
[OptionParser::OPTIONAL_ARGUMENT, :optional_flag]
|
||||||
end
|
end
|
||||||
names.map! { |name| name.chomp "=" }
|
names.map! { |name| name.chomp "=" }
|
||||||
description = option_to_description(*names) if description.nil?
|
description = option_description(description, *names, hidden: hidden)
|
||||||
if replacement.nil?
|
if replacement.nil?
|
||||||
process_option(*names, description, type: flag_type, hidden: hidden)
|
process_option(*names, description, type: flag_type, hidden: hidden)
|
||||||
else
|
else
|
||||||
@ -255,6 +256,13 @@ module Homebrew
|
|||||||
names.map { |name| name.to_s.sub(/\A--?/, "").tr("-", " ") }.max
|
names.map { |name| name.to_s.sub(/\A--?/, "").tr("-", " ") }.max
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def option_description(description, *names, hidden: false)
|
||||||
|
return HIDDEN_DESC_PLACEHOLDER if hidden
|
||||||
|
return description if description.present?
|
||||||
|
|
||||||
|
option_to_description(*names)
|
||||||
|
end
|
||||||
|
|
||||||
def parse_remaining(argv, ignore_invalid_options: false)
|
def parse_remaining(argv, ignore_invalid_options: false)
|
||||||
i = 0
|
i = 0
|
||||||
remaining = []
|
remaining = []
|
||||||
@ -347,6 +355,7 @@ module Homebrew
|
|||||||
|
|
||||||
def generate_help_text
|
def generate_help_text
|
||||||
Formatter.wrap(@parser.to_s, COMMAND_DESC_WIDTH)
|
Formatter.wrap(@parser.to_s, COMMAND_DESC_WIDTH)
|
||||||
|
.gsub(/\n.*?@@HIDDEN@@.*?(?=\n)/, "")
|
||||||
.sub(/^/, "#{Tty.bold}Usage: brew#{Tty.reset} ")
|
.sub(/^/, "#{Tty.bold}Usage: brew#{Tty.reset} ")
|
||||||
.gsub(/`(.*?)`/m, "#{Tty.bold}\\1#{Tty.reset}")
|
.gsub(/`(.*?)`/m, "#{Tty.bold}\\1#{Tty.reset}")
|
||||||
.gsub(%r{<([^\s]+?://[^\s]+?)>}) { |url| Formatter.url(url) }
|
.gsub(%r{<([^\s]+?://[^\s]+?)>}) { |url| Formatter.url(url) }
|
||||||
@ -597,7 +606,7 @@ module Homebrew
|
|||||||
def process_option(*args, type:, hidden: false)
|
def process_option(*args, type:, hidden: false)
|
||||||
option, = @parser.make_switch(args)
|
option, = @parser.make_switch(args)
|
||||||
@processed_options.reject! { |existing| existing.second == option.long.first } if option.long.first.present?
|
@processed_options.reject! { |existing| existing.second == option.long.first } if option.long.first.present?
|
||||||
@processed_options << [option.short.first, option.long.first, option.arg, option.desc.first]
|
@processed_options << [option.short.first, option.long.first, option.arg, option.desc.first, hidden]
|
||||||
|
|
||||||
if type == :switch
|
if type == :switch
|
||||||
disable_switch(*args)
|
disable_switch(*args)
|
||||||
@ -607,6 +616,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return if hidden
|
||||||
return if self.class.global_options.include? [option.short.first, option.long.first, option.desc.first]
|
return if self.class.global_options.include? [option.short.first, option.long.first, option.desc.first]
|
||||||
|
|
||||||
@non_global_processed_options << [option.long.first || option.short.first, type]
|
@non_global_processed_options << [option.long.first || option.short.first, type]
|
||||||
|
|||||||
@ -52,7 +52,8 @@ module Homebrew
|
|||||||
"JSON output: <https://docs.brew.sh/Querying-Brew>"
|
"JSON output: <https://docs.brew.sh/Querying-Brew>"
|
||||||
switch "--bottle",
|
switch "--bottle",
|
||||||
depends_on: "--json",
|
depends_on: "--json",
|
||||||
description: "Output information about the bottles for <formula> and its dependencies."
|
description: "Output information about the bottles for <formula> and its dependencies.",
|
||||||
|
hidden: true
|
||||||
switch "--installed",
|
switch "--installed",
|
||||||
depends_on: "--json",
|
depends_on: "--json",
|
||||||
description: "Print JSON of formulae that are currently installed."
|
description: "Print JSON of formulae that are currently installed."
|
||||||
|
|||||||
@ -187,136 +187,15 @@ module Homebrew
|
|||||||
raise BuildFlagsError.new(build_flags, bottled: formulae.all?(&:bottled?)) if build_flags.present?
|
raise BuildFlagsError.new(build_flags, bottled: formulae.all?(&:bottled?)) if build_flags.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
installed_formulae = []
|
installed_formulae = formulae.select do |f|
|
||||||
|
Install.install_formula?(
|
||||||
formulae.each do |f|
|
f,
|
||||||
# head-only without --HEAD is an error
|
head: args.HEAD?,
|
||||||
if !args.HEAD? && f.stable.nil?
|
fetch_head: args.fetch_HEAD?,
|
||||||
odie <<~EOS
|
only_dependencies: args.only_dependencies?,
|
||||||
#{f.full_name} is a head-only formula.
|
force: args.force?,
|
||||||
To install it, run:
|
quiet: args.quiet?,
|
||||||
brew install --HEAD #{f.full_name}
|
)
|
||||||
EOS
|
|
||||||
end
|
|
||||||
|
|
||||||
# --HEAD, fail with no head defined
|
|
||||||
odie "No head is defined for #{f.full_name}" if args.HEAD? && f.head.nil?
|
|
||||||
|
|
||||||
installed_head_version = f.latest_head_version
|
|
||||||
if installed_head_version &&
|
|
||||||
!f.head_version_outdated?(installed_head_version, fetch_head: args.fetch_HEAD?)
|
|
||||||
new_head_installed = true
|
|
||||||
end
|
|
||||||
prefix_installed = f.prefix.exist? && !f.prefix.children.empty?
|
|
||||||
|
|
||||||
if f.keg_only? && f.any_version_installed? && f.optlinked? && !args.force?
|
|
||||||
# keg-only install is only possible when no other version is
|
|
||||||
# linked to opt, because installing without any warnings can break
|
|
||||||
# dependencies. Therefore before performing other checks we need to be
|
|
||||||
# sure --force flag is passed.
|
|
||||||
if f.outdated?
|
|
||||||
if Homebrew::EnvConfig.no_install_upgrade?
|
|
||||||
optlinked_version = Keg.for(f.opt_prefix).version
|
|
||||||
onoe <<~EOS
|
|
||||||
#{f.full_name} #{optlinked_version} is already installed.
|
|
||||||
To upgrade to #{f.version}, run:
|
|
||||||
brew upgrade #{f.full_name}
|
|
||||||
EOS
|
|
||||||
else
|
|
||||||
installed_formulae << f
|
|
||||||
end
|
|
||||||
elsif args.only_dependencies?
|
|
||||||
installed_formulae << f
|
|
||||||
elsif !args.quiet?
|
|
||||||
opoo <<~EOS
|
|
||||||
#{f.full_name} #{f.pkg_version} is already installed and up-to-date.
|
|
||||||
To reinstall #{f.pkg_version}, run:
|
|
||||||
brew reinstall #{f.name}
|
|
||||||
EOS
|
|
||||||
end
|
|
||||||
elsif (args.HEAD? && new_head_installed) || prefix_installed
|
|
||||||
# After we're sure that --force flag is passed for linked to opt
|
|
||||||
# keg-only we need to be sure that the version we're attempting to
|
|
||||||
# install is not already installed.
|
|
||||||
|
|
||||||
installed_version = if args.HEAD?
|
|
||||||
f.latest_head_version
|
|
||||||
else
|
|
||||||
f.pkg_version
|
|
||||||
end
|
|
||||||
|
|
||||||
msg = "#{f.full_name} #{installed_version} is already installed"
|
|
||||||
linked_not_equals_installed = f.linked_version != installed_version
|
|
||||||
if f.linked? && linked_not_equals_installed
|
|
||||||
msg = if args.quiet?
|
|
||||||
nil
|
|
||||||
else
|
|
||||||
<<~EOS
|
|
||||||
#{msg}.
|
|
||||||
The currently linked version is: #{f.linked_version}
|
|
||||||
EOS
|
|
||||||
end
|
|
||||||
elsif !f.linked? || f.keg_only?
|
|
||||||
msg = <<~EOS
|
|
||||||
#{msg}, it's just not linked.
|
|
||||||
To link this version, run:
|
|
||||||
brew link #{f}
|
|
||||||
EOS
|
|
||||||
elsif args.only_dependencies?
|
|
||||||
msg = nil
|
|
||||||
installed_formulae << f
|
|
||||||
else
|
|
||||||
msg = if args.quiet?
|
|
||||||
nil
|
|
||||||
else
|
|
||||||
<<~EOS
|
|
||||||
#{msg} and up-to-date.
|
|
||||||
To reinstall #{f.pkg_version}, run:
|
|
||||||
brew reinstall #{f.name}
|
|
||||||
EOS
|
|
||||||
end
|
|
||||||
end
|
|
||||||
opoo msg if msg
|
|
||||||
elsif !f.any_version_installed? && (old_formula = f.old_installed_formulae.first)
|
|
||||||
msg = "#{old_formula.full_name} #{old_formula.any_installed_version} already installed"
|
|
||||||
msg = if !old_formula.linked? && !old_formula.keg_only?
|
|
||||||
<<~EOS
|
|
||||||
#{msg}, it's just not linked.
|
|
||||||
To link this version, run:
|
|
||||||
brew link #{old_formula.full_name}
|
|
||||||
EOS
|
|
||||||
elsif args.quiet?
|
|
||||||
nil
|
|
||||||
else
|
|
||||||
"#{msg}."
|
|
||||||
end
|
|
||||||
opoo msg if msg
|
|
||||||
elsif f.migration_needed? && !args.force?
|
|
||||||
# Check if the formula we try to install is the same as installed
|
|
||||||
# but not migrated one. If --force is passed then install anyway.
|
|
||||||
opoo <<~EOS
|
|
||||||
#{f.oldname} is already installed, it's just not migrated.
|
|
||||||
To migrate this formula, run:
|
|
||||||
brew migrate #{f}
|
|
||||||
Or to force-install it, run:
|
|
||||||
brew install #{f} --force
|
|
||||||
EOS
|
|
||||||
else
|
|
||||||
# If none of the above is true and the formula is linked, then
|
|
||||||
# FormulaInstaller will handle this case.
|
|
||||||
installed_formulae << f
|
|
||||||
end
|
|
||||||
|
|
||||||
# Even if we don't install this formula mark it as no longer just
|
|
||||||
# installed as a dependency.
|
|
||||||
next unless f.opt_prefix.directory?
|
|
||||||
|
|
||||||
keg = Keg.new(f.opt_prefix.resolved_path)
|
|
||||||
tab = Tab.for_keg(keg)
|
|
||||||
unless tab.installed_on_request
|
|
||||||
tab.installed_on_request = true
|
|
||||||
tab.write
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return if installed_formulae.empty?
|
return if installed_formulae.empty?
|
||||||
@ -325,7 +204,24 @@ module Homebrew
|
|||||||
|
|
||||||
installed_formulae.each do |f|
|
installed_formulae.each do |f|
|
||||||
Migrator.migrate_if_needed(f, force: args.force?)
|
Migrator.migrate_if_needed(f, force: args.force?)
|
||||||
install_formula(f, args: args)
|
Install.install_formula(
|
||||||
|
f,
|
||||||
|
build_bottle: args.build_bottle?,
|
||||||
|
force_bottle: args.force_bottle?,
|
||||||
|
bottle_arch: args.bottle_arch,
|
||||||
|
ignore_deps: args.ignore_dependencies?,
|
||||||
|
only_deps: args.only_dependencies?,
|
||||||
|
include_test_formulae: args.include_test_formulae,
|
||||||
|
build_from_source_formulae: args.build_from_source_formulae,
|
||||||
|
cc: args.cc,
|
||||||
|
git: args.git?,
|
||||||
|
interactive: args.interactive?,
|
||||||
|
keep_tmp: args.keep_tmp?,
|
||||||
|
force: args.force?,
|
||||||
|
debug: args.debug?,
|
||||||
|
quiet: args.quiet?,
|
||||||
|
verbose: args.verbose?,
|
||||||
|
)
|
||||||
Cleanup.install_formula_clean!(f)
|
Cleanup.install_formula_clean!(f)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -395,65 +291,4 @@ module Homebrew
|
|||||||
puts "To install one of them, run (for example):\n brew install #{taps_search_results.first}"
|
puts "To install one of them, run (for example):\n brew install #{taps_search_results.first}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_formula(f, args:)
|
|
||||||
f.print_tap_action
|
|
||||||
build_options = f.build
|
|
||||||
|
|
||||||
if !Homebrew::EnvConfig.no_install_upgrade? && f.outdated? && !f.head?
|
|
||||||
formulae = [f, *f.old_installed_formulae]
|
|
||||||
version_upgrade = "#{f.linked_version} -> #{f.pkg_version}"
|
|
||||||
|
|
||||||
oh1 <<~EOS
|
|
||||||
#{f.name} #{f.linked_version} is installed and out of date
|
|
||||||
Upgrading #{Formatter.identifier(f.name)} #{version_upgrade}
|
|
||||||
EOS
|
|
||||||
outdated_kegs = formulae.map(&:linked_keg)
|
|
||||||
.select(&:directory?)
|
|
||||||
.map { |k| Keg.new(k.resolved_path) }
|
|
||||||
linked_kegs = outdated_kegs.select(&:linked?)
|
|
||||||
end
|
|
||||||
|
|
||||||
fi = FormulaInstaller.new(
|
|
||||||
f,
|
|
||||||
**{
|
|
||||||
options: build_options.used_options,
|
|
||||||
build_bottle: args.build_bottle?,
|
|
||||||
force_bottle: args.force_bottle?,
|
|
||||||
bottle_arch: args.bottle_arch,
|
|
||||||
ignore_deps: args.ignore_dependencies?,
|
|
||||||
only_deps: args.only_dependencies?,
|
|
||||||
include_test_formulae: args.include_test_formulae,
|
|
||||||
build_from_source_formulae: args.build_from_source_formulae,
|
|
||||||
cc: args.cc,
|
|
||||||
git: args.git?,
|
|
||||||
interactive: args.interactive?,
|
|
||||||
keep_tmp: args.keep_tmp?,
|
|
||||||
force: args.force?,
|
|
||||||
debug: args.debug?,
|
|
||||||
quiet: args.quiet?,
|
|
||||||
verbose: args.verbose?,
|
|
||||||
}.compact,
|
|
||||||
)
|
|
||||||
fi.prelude
|
|
||||||
fi.fetch
|
|
||||||
|
|
||||||
outdated_kegs.each(&:unlink) if outdated_kegs.present?
|
|
||||||
|
|
||||||
fi.install
|
|
||||||
fi.finish
|
|
||||||
rescue FormulaInstallationAlreadyAttemptedError
|
|
||||||
# We already attempted to install f as part of the dependency tree of
|
|
||||||
# another formula. In that case, don't generate an error, just move on.
|
|
||||||
nil
|
|
||||||
rescue CannotInstallFormulaError => e
|
|
||||||
ofail e.message
|
|
||||||
ensure
|
|
||||||
begin
|
|
||||||
# Re-link kegs if upgrade fails
|
|
||||||
linked_kegs.each(&:link) unless formula.latest_version_installed?
|
|
||||||
rescue
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -176,9 +176,11 @@ module Commands
|
|||||||
return if path.blank?
|
return if path.blank?
|
||||||
|
|
||||||
if (cmd_parser = Homebrew::CLI::Parser.from_cmd_path(path))
|
if (cmd_parser = Homebrew::CLI::Parser.from_cmd_path(path))
|
||||||
cmd_parser.processed_options.map do |short, long, _, desc|
|
cmd_parser.processed_options.map do |short, long, _, desc, hidden|
|
||||||
|
next if hidden
|
||||||
|
|
||||||
[long || short, desc]
|
[long || short, desc]
|
||||||
end
|
end.compact
|
||||||
else
|
else
|
||||||
options = []
|
options = []
|
||||||
comment_lines = path.read.lines.grep(/^#:/)
|
comment_lines = path.read.lines.grep(/^#:/)
|
||||||
|
|||||||
6
Library/Homebrew/config.rbi
Normal file
6
Library/Homebrew/config.rbi
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# typed: strict
|
||||||
|
|
||||||
|
module EnvVar
|
||||||
|
sig { params(env: String).returns(String) }
|
||||||
|
def self.[](env); end
|
||||||
|
end
|
||||||
12
Library/Homebrew/default_prefix.rb
Normal file
12
Library/Homebrew/default_prefix.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# typed: true
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Homebrew
|
||||||
|
DEFAULT_PREFIX, DEFAULT_REPOSITORY = if OS.mac? && Hardware::CPU.arm?
|
||||||
|
[HOMEBREW_MACOS_ARM_DEFAULT_PREFIX, HOMEBREW_MACOS_ARM_DEFAULT_REPOSITORY]
|
||||||
|
elsif OS.linux? && !EnvConfig.force_homebrew_on_linux?
|
||||||
|
[HOMEBREW_LINUX_DEFAULT_PREFIX, HOMEBREW_LINUX_DEFAULT_REPOSITORY]
|
||||||
|
else
|
||||||
|
[HOMEBREW_DEFAULT_PREFIX, HOMEBREW_DEFAULT_REPOSITORY]
|
||||||
|
end.freeze
|
||||||
|
end
|
||||||
@ -204,6 +204,7 @@ module Homebrew
|
|||||||
cask_results = if audit_casks.empty?
|
cask_results = if audit_casks.empty?
|
||||||
{}
|
{}
|
||||||
else
|
else
|
||||||
|
require "cask/cmd/abstract_command"
|
||||||
require "cask/cmd/audit"
|
require "cask/cmd/audit"
|
||||||
|
|
||||||
Cask::Cmd::Audit.audit_casks(
|
Cask::Cmd::Audit.audit_casks(
|
||||||
|
|||||||
@ -172,7 +172,9 @@ module Homebrew
|
|||||||
|
|
||||||
def cmd_parser_manpage_lines(cmd_parser)
|
def cmd_parser_manpage_lines(cmd_parser)
|
||||||
lines = [format_usage_banner(cmd_parser.usage_banner_text)]
|
lines = [format_usage_banner(cmd_parser.usage_banner_text)]
|
||||||
lines += cmd_parser.processed_options.map do |short, long, _, desc|
|
lines += cmd_parser.processed_options.map do |short, long, _, desc, hidden|
|
||||||
|
next if hidden
|
||||||
|
|
||||||
if long.present?
|
if long.present?
|
||||||
next if Homebrew::CLI::Parser.global_options.include?([short, long, desc])
|
next if Homebrew::CLI::Parser.global_options.include?([short, long, desc])
|
||||||
next if Homebrew::CLI::Parser.global_cask_options.any? do |_, option, description:, **|
|
next if Homebrew::CLI::Parser.global_cask_options.any? do |_, option, description:, **|
|
||||||
@ -181,7 +183,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
generate_option_doc(short, long, desc)
|
generate_option_doc(short, long, desc)
|
||||||
end.reject(&:blank?)
|
end.compact
|
||||||
lines
|
lines
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -15,14 +15,19 @@ module Homebrew
|
|||||||
description <<~EOS
|
description <<~EOS
|
||||||
Install Homebrew's Bundler gems.
|
Install Homebrew's Bundler gems.
|
||||||
EOS
|
EOS
|
||||||
|
comma_array "--groups=",
|
||||||
|
description: "Installs the specified comma-separated list of gem groups (default: last used)."
|
||||||
|
|
||||||
named_args :none
|
named_args :none
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_bundler_gems
|
def install_bundler_gems
|
||||||
install_bundler_gems_args.parse
|
args = install_bundler_gems_args.parse
|
||||||
|
|
||||||
Homebrew.install_bundler_gems!
|
# Clear previous settings. We want to fully replace - not append.
|
||||||
|
Homebrew::Settings.delete(:gemgroups) if args.groups
|
||||||
|
|
||||||
|
Homebrew.install_bundler_gems!(groups: args.groups || [])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -39,15 +39,17 @@ module Homebrew
|
|||||||
def tests
|
def tests
|
||||||
args = tests_args.parse
|
args = tests_args.parse
|
||||||
|
|
||||||
Homebrew.install_bundler_gems!
|
Homebrew.install_bundler_gems!(groups: ["sorbet"])
|
||||||
|
|
||||||
require "byebug" if args.byebug?
|
require "byebug" if args.byebug?
|
||||||
|
|
||||||
HOMEBREW_LIBRARY_PATH.cd do
|
HOMEBREW_LIBRARY_PATH.cd do
|
||||||
# Cleanup any unwanted user configuration.
|
# Cleanup any unwanted user configuration.
|
||||||
allowed_test_env = [
|
allowed_test_env = %w[
|
||||||
"HOMEBREW_GITHUB_API_TOKEN",
|
HOMEBREW_GITHUB_API_TOKEN
|
||||||
"HOMEBREW_TEMP",
|
HOMEBREW_CACHE
|
||||||
|
HOMEBREW_LOGS
|
||||||
|
HOMEBREW_TEMP
|
||||||
]
|
]
|
||||||
Homebrew::EnvConfig::ENVS.keys.map(&:to_s).each do |env|
|
Homebrew::EnvConfig::ENVS.keys.map(&:to_s).each do |env|
|
||||||
next if allowed_test_env.include?(env)
|
next if allowed_test_env.include?(env)
|
||||||
|
|||||||
@ -51,7 +51,7 @@ module Homebrew
|
|||||||
|
|
||||||
args = typecheck_args.parse
|
args = typecheck_args.parse
|
||||||
|
|
||||||
Homebrew.install_bundler_gems!
|
Homebrew.install_bundler_gems!(groups: ["sorbet"])
|
||||||
|
|
||||||
HOMEBREW_LIBRARY_PATH.cd do
|
HOMEBREW_LIBRARY_PATH.cd do
|
||||||
if args.update?
|
if args.update?
|
||||||
|
|||||||
@ -158,10 +158,6 @@ module Homebrew
|
|||||||
|
|
||||||
formulae.each do |f|
|
formulae.each do |f|
|
||||||
name = f.name.downcase
|
name = f.name.downcase
|
||||||
if f.bottle_specification.tag?(@bottle_tag, no_older_versions: true)
|
|
||||||
puts "#{Tty.bold}#{Tty.green}#{name}#{Tty.reset}: already bottled" if any_named_args
|
|
||||||
next
|
|
||||||
end
|
|
||||||
|
|
||||||
if f.disabled?
|
if f.disabled?
|
||||||
puts "#{Tty.bold}#{Tty.green}#{name}#{Tty.reset}: formula disabled" if any_named_args
|
puts "#{Tty.bold}#{Tty.green}#{name}#{Tty.reset}: formula disabled" if any_named_args
|
||||||
@ -190,11 +186,7 @@ module Homebrew
|
|||||||
|
|
||||||
Version.new(MacOS::Xcode.latest_version(macos: macos_version)) >= r.version
|
Version.new(MacOS::Xcode.latest_version(macos: macos_version)) >= r.version
|
||||||
when ArchRequirement
|
when ArchRequirement
|
||||||
arch = r.arch
|
r.arch == @bottle_tag.arch
|
||||||
arch = :intel if arch == :x86_64
|
|
||||||
arch = :arm64 if arch == :arm
|
|
||||||
|
|
||||||
arch == macos_version.arch
|
|
||||||
else
|
else
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
@ -215,6 +207,11 @@ module Homebrew
|
|||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if f.bottle_specification.tag?(@bottle_tag, no_older_versions: true)
|
||||||
|
puts "#{Tty.bold}#{Tty.green}#{name}#{Tty.reset}: already bottled" if any_named_args
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
deps = Array(deps_hash[f.name]).reject do |dep|
|
deps = Array(deps_hash[f.name]).reject do |dep|
|
||||||
dep.bottle_specification.tag?(@bottle_tag, no_older_versions: true) || dep.bottle_unneeded?
|
dep.bottle_specification.tag?(@bottle_tag, no_older_versions: true) || dep.bottle_unneeded?
|
||||||
end
|
end
|
||||||
|
|||||||
@ -29,6 +29,8 @@ module Homebrew
|
|||||||
|
|
||||||
Homebrew.install_bundler!
|
Homebrew.install_bundler!
|
||||||
|
|
||||||
|
ENV["BUNDLE_WITH"] = "sorbet"
|
||||||
|
|
||||||
ohai "cd #{HOMEBREW_LIBRARY_PATH}"
|
ohai "cd #{HOMEBREW_LIBRARY_PATH}"
|
||||||
HOMEBREW_LIBRARY_PATH.cd do
|
HOMEBREW_LIBRARY_PATH.cd do
|
||||||
if args.update
|
if args.update
|
||||||
|
|||||||
@ -149,7 +149,9 @@ module Homebrew
|
|||||||
|
|
||||||
def broken_tap(tap)
|
def broken_tap(tap)
|
||||||
return unless Utils::Git.available?
|
return unless Utils::Git.available?
|
||||||
return unless HOMEBREW_REPOSITORY.git?
|
|
||||||
|
repo = HOMEBREW_REPOSITORY.dup.extend(GitRepositoryExtension)
|
||||||
|
return unless repo.git?
|
||||||
|
|
||||||
message = <<~EOS
|
message = <<~EOS
|
||||||
#{tap.full_name} was not tapped properly! Run:
|
#{tap.full_name} was not tapped properly! Run:
|
||||||
@ -161,7 +163,7 @@ module Homebrew
|
|||||||
|
|
||||||
tap_head = tap.git_head
|
tap_head = tap.git_head
|
||||||
return message if tap_head.blank?
|
return message if tap_head.blank?
|
||||||
return if tap_head != HOMEBREW_REPOSITORY.git_head
|
return if tap_head != repo.git_head
|
||||||
|
|
||||||
message
|
message
|
||||||
end
|
end
|
||||||
@ -574,7 +576,8 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def check_brew_git_origin
|
def check_brew_git_origin
|
||||||
examine_git_origin(HOMEBREW_REPOSITORY, Homebrew::EnvConfig.brew_git_remote)
|
repo = HOMEBREW_REPOSITORY.dup.extend(GitRepositoryExtension)
|
||||||
|
examine_git_origin(repo, Homebrew::EnvConfig.brew_git_remote)
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_coretap_integrity
|
def check_coretap_integrity
|
||||||
|
|||||||
@ -651,6 +651,7 @@ end
|
|||||||
class LocalBottleDownloadStrategy < AbstractFileDownloadStrategy
|
class LocalBottleDownloadStrategy < AbstractFileDownloadStrategy
|
||||||
def initialize(path) # rubocop:disable Lint/MissingSuper
|
def initialize(path) # rubocop:disable Lint/MissingSuper
|
||||||
@cached_location = path
|
@cached_location = path
|
||||||
|
extend Pourable
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -159,13 +159,16 @@ class Keg
|
|||||||
brewed_perl = runtime_dependencies&.any? { |dep| dep["full_name"] == "perl" && dep["declared_directly"] }
|
brewed_perl = runtime_dependencies&.any? { |dep| dep["full_name"] == "perl" && dep["declared_directly"] }
|
||||||
perl_path = if brewed_perl || name == "perl"
|
perl_path = if brewed_perl || name == "perl"
|
||||||
"#{HOMEBREW_PREFIX}/opt/perl/bin/perl"
|
"#{HOMEBREW_PREFIX}/opt/perl/bin/perl"
|
||||||
|
elsif tab["built_on"].present?
|
||||||
|
perl_path = "/usr/bin/perl#{tab["built_on"]["preferred_perl"]}"
|
||||||
|
|
||||||
|
# For `:all` bottles, we could have built this bottle with a Perl we don't have.
|
||||||
|
# Such bottles typically don't have strict version requirements.
|
||||||
|
perl_path = "/usr/bin/perl#{MacOS.preferred_perl_version}" unless File.exist?(perl_path)
|
||||||
|
|
||||||
|
perl_path
|
||||||
else
|
else
|
||||||
perl_version = if tab["built_on"].present?
|
"/usr/bin/perl#{MacOS.preferred_perl_version}"
|
||||||
tab["built_on"]["preferred_perl"]
|
|
||||||
else
|
|
||||||
MacOS.preferred_perl_version
|
|
||||||
end
|
|
||||||
"/usr/bin/perl#{perl_version}"
|
|
||||||
end
|
end
|
||||||
relocation.add_replacement_pair(:perl, PERL_PLACEHOLDER, perl_path)
|
relocation.add_replacement_pair(:perl, PERL_PLACEHOLDER, perl_path)
|
||||||
|
|
||||||
|
|||||||
@ -1919,17 +1919,19 @@ class Formula
|
|||||||
[tag.to_s, info]
|
[tag.to_s, info]
|
||||||
end.to_h
|
end.to_h
|
||||||
|
|
||||||
return bottles unless top_level
|
hash = {
|
||||||
|
"name" => name,
|
||||||
|
"pkg_version" => pkg_version,
|
||||||
|
"rebuild" => bottle["rebuild"],
|
||||||
|
"bottles" => bottles,
|
||||||
|
}
|
||||||
|
|
||||||
dependencies = declared_runtime_dependencies.map do |dep|
|
return hash unless top_level
|
||||||
|
|
||||||
|
hash["dependencies"] = declared_runtime_dependencies.map do |dep|
|
||||||
dep.to_formula.to_recursive_bottle_hash(top_level: false)
|
dep.to_formula.to_recursive_bottle_hash(top_level: false)
|
||||||
end
|
end
|
||||||
|
hash
|
||||||
{
|
|
||||||
"name" => name,
|
|
||||||
"bottles" => bottles,
|
|
||||||
"dependencies" => dependencies,
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the bottle information for a formula
|
# Returns the bottle information for a formula
|
||||||
|
|||||||
@ -404,7 +404,7 @@ class FormulaInstaller
|
|||||||
options = display_options(formula).join(" ")
|
options = display_options(formula).join(" ")
|
||||||
oh1 "Installing #{Formatter.identifier(formula.full_name)} #{options}".strip if show_header?
|
oh1 "Installing #{Formatter.identifier(formula.full_name)} #{options}".strip if show_header?
|
||||||
|
|
||||||
unless formula.tap&.private?
|
if formula.tap&.installed? && !formula.tap&.private?
|
||||||
action = "#{formula.full_name} #{options}".strip
|
action = "#{formula.full_name} #{options}".strip
|
||||||
Utils::Analytics.report_event("install", action)
|
Utils::Analytics.report_event("install", action)
|
||||||
|
|
||||||
@ -769,7 +769,7 @@ class FormulaInstaller
|
|||||||
|
|
||||||
@show_summary_heading = true
|
@show_summary_heading = true
|
||||||
ohai "Caveats", caveats.to_s
|
ohai "Caveats", caveats.to_s
|
||||||
Homebrew.messages.record_caveats(formula, caveats)
|
Homebrew.messages.record_caveats(formula.name, caveats)
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { void }
|
sig { void }
|
||||||
@ -1074,9 +1074,14 @@ class FormulaInstaller
|
|||||||
-I #{$LOAD_PATH.join(File::PATH_SEPARATOR)}
|
-I #{$LOAD_PATH.join(File::PATH_SEPARATOR)}
|
||||||
--
|
--
|
||||||
#{HOMEBREW_LIBRARY_PATH}/postinstall.rb
|
#{HOMEBREW_LIBRARY_PATH}/postinstall.rb
|
||||||
#{formula.path}
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
args << if formula.local_bottle_path.present?
|
||||||
|
formula.prefix/".brew/#{formula.name}.rb"
|
||||||
|
else
|
||||||
|
formula.path
|
||||||
|
end
|
||||||
|
|
||||||
Utils.safe_fork do
|
Utils.safe_fork do
|
||||||
if Sandbox.available?
|
if Sandbox.available?
|
||||||
sandbox = Sandbox.new
|
sandbox = Sandbox.new
|
||||||
@ -1163,7 +1168,7 @@ class FormulaInstaller
|
|||||||
tab.source["versions"]["stable"] = formula.stable.version.to_s
|
tab.source["versions"]["stable"] = formula.stable.version.to_s
|
||||||
tab.source["versions"]["version_scheme"] = formula.version_scheme
|
tab.source["versions"]["version_scheme"] = formula.version_scheme
|
||||||
tab.source["path"] = formula.specified_path.to_s
|
tab.source["path"] = formula.specified_path.to_s
|
||||||
tab.source["tap_git_head"] = formula.tap&.git_head
|
tab.source["tap_git_head"] = formula.tap&.installed? ? formula.tap&.git_head : nil
|
||||||
tab.tap = formula.tap
|
tab.tap = formula.tap
|
||||||
tab.write
|
tab.write
|
||||||
|
|
||||||
|
|||||||
@ -1,22 +1,16 @@
|
|||||||
# typed: false
|
# typed: false
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative "load_path"
|
require_relative "startup"
|
||||||
|
|
||||||
require "English"
|
require "English"
|
||||||
require "fileutils"
|
require "fileutils"
|
||||||
require "json"
|
require "json"
|
||||||
require "json/add/exception"
|
require "json/add/exception"
|
||||||
require "pathname"
|
|
||||||
require "ostruct"
|
require "ostruct"
|
||||||
require "pp"
|
require "pp"
|
||||||
require "forwardable"
|
require "forwardable"
|
||||||
|
|
||||||
require "rbconfig"
|
|
||||||
|
|
||||||
RUBY_PATH = Pathname.new(RbConfig.ruby).freeze
|
|
||||||
RUBY_BIN = RUBY_PATH.dirname.freeze
|
|
||||||
|
|
||||||
# Only require "core_ext" here to ensure we're only requiring the minimum of
|
# Only require "core_ext" here to ensure we're only requiring the minimum of
|
||||||
# what we need.
|
# what we need.
|
||||||
require "active_support/core_ext/object/blank"
|
require "active_support/core_ext/object/blank"
|
||||||
@ -72,27 +66,15 @@ HOMEBREW_PULL_OR_COMMIT_URL_REGEX =
|
|||||||
%r[https://github\.com/([\w-]+)/([\w-]+)?/(?:pull/(\d+)|commit/[0-9a-fA-F]{4,40})].freeze
|
%r[https://github\.com/([\w-]+)/([\w-]+)?/(?:pull/(\d+)|commit/[0-9a-fA-F]{4,40})].freeze
|
||||||
HOMEBREW_BOTTLES_EXTNAME_REGEX = /\.([a-z0-9_]+)\.bottle\.(?:(\d+)\.)?tar\.gz$/.freeze
|
HOMEBREW_BOTTLES_EXTNAME_REGEX = /\.([a-z0-9_]+)\.bottle\.(?:(\d+)\.)?tar\.gz$/.freeze
|
||||||
|
|
||||||
require "utils/sorbet"
|
|
||||||
|
|
||||||
require "env_config"
|
require "env_config"
|
||||||
require "compat/early" unless Homebrew::EnvConfig.no_compat?
|
require "compat/early" unless Homebrew::EnvConfig.no_compat?
|
||||||
require "os"
|
require "os"
|
||||||
require "messages"
|
require "messages"
|
||||||
|
require "default_prefix"
|
||||||
|
|
||||||
module Homebrew
|
module Homebrew
|
||||||
extend FileUtils
|
extend FileUtils
|
||||||
|
|
||||||
remove_const :DEFAULT_PREFIX if defined?(DEFAULT_PREFIX)
|
|
||||||
remove_const :DEFAULT_REPOSITORY if defined?(DEFAULT_REPOSITORY)
|
|
||||||
|
|
||||||
DEFAULT_PREFIX, DEFAULT_REPOSITORY = if OS.mac? && Hardware::CPU.arm?
|
|
||||||
[HOMEBREW_MACOS_ARM_DEFAULT_PREFIX, HOMEBREW_MACOS_ARM_DEFAULT_REPOSITORY]
|
|
||||||
elsif OS.linux? && !EnvConfig.force_homebrew_on_linux?
|
|
||||||
[HOMEBREW_LINUX_DEFAULT_PREFIX, HOMEBREW_LINUX_DEFAULT_REPOSITORY]
|
|
||||||
else
|
|
||||||
[HOMEBREW_DEFAULT_PREFIX, HOMEBREW_DEFAULT_REPOSITORY]
|
|
||||||
end.freeze
|
|
||||||
|
|
||||||
DEFAULT_CELLAR = "#{DEFAULT_PREFIX}/Cellar"
|
DEFAULT_CELLAR = "#{DEFAULT_PREFIX}/Cellar"
|
||||||
DEFAULT_MACOS_CELLAR = "#{HOMEBREW_DEFAULT_PREFIX}/Cellar"
|
DEFAULT_MACOS_CELLAR = "#{HOMEBREW_DEFAULT_PREFIX}/Cellar"
|
||||||
DEFAULT_MACOS_ARM_CELLAR = "#{HOMEBREW_MACOS_ARM_DEFAULT_PREFIX}/Cellar"
|
DEFAULT_MACOS_ARM_CELLAR = "#{HOMEBREW_MACOS_ARM_DEFAULT_PREFIX}/Cellar"
|
||||||
@ -124,8 +106,8 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
require "config"
|
|
||||||
require "context"
|
require "context"
|
||||||
|
require "extend/git_repository"
|
||||||
require "extend/pathname"
|
require "extend/pathname"
|
||||||
require "extend/predicable"
|
require "extend/predicable"
|
||||||
require "extend/module"
|
require "extend/module"
|
||||||
|
|||||||
@ -90,6 +90,213 @@ module Homebrew
|
|||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
private_class_method :check_cc_argv
|
private_class_method :check_cc_argv
|
||||||
|
|
||||||
|
def install_formula?(
|
||||||
|
f,
|
||||||
|
head: false,
|
||||||
|
fetch_head: false,
|
||||||
|
only_dependencies: false,
|
||||||
|
force: false,
|
||||||
|
quiet: false
|
||||||
|
)
|
||||||
|
# head-only without --HEAD is an error
|
||||||
|
if !head && f.stable.nil?
|
||||||
|
odie <<~EOS
|
||||||
|
#{f.full_name} is a head-only formula.
|
||||||
|
To install it, run:
|
||||||
|
brew install --HEAD #{f.full_name}
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
# --HEAD, fail with no head defined
|
||||||
|
odie "No head is defined for #{f.full_name}" if head && f.head.nil?
|
||||||
|
|
||||||
|
installed_head_version = f.latest_head_version
|
||||||
|
if installed_head_version &&
|
||||||
|
!f.head_version_outdated?(installed_head_version, fetch_head: fetch_head)
|
||||||
|
new_head_installed = true
|
||||||
|
end
|
||||||
|
prefix_installed = f.prefix.exist? && !f.prefix.children.empty?
|
||||||
|
|
||||||
|
if f.keg_only? && f.any_version_installed? && f.optlinked? && !force
|
||||||
|
# keg-only install is only possible when no other version is
|
||||||
|
# linked to opt, because installing without any warnings can break
|
||||||
|
# dependencies. Therefore before performing other checks we need to be
|
||||||
|
# sure --force flag is passed.
|
||||||
|
if f.outdated?
|
||||||
|
return true unless Homebrew::EnvConfig.no_install_upgrade?
|
||||||
|
|
||||||
|
optlinked_version = Keg.for(f.opt_prefix).version
|
||||||
|
onoe <<~EOS
|
||||||
|
#{f.full_name} #{optlinked_version} is already installed.
|
||||||
|
To upgrade to #{f.version}, run:
|
||||||
|
brew upgrade #{f.full_name}
|
||||||
|
EOS
|
||||||
|
elsif only_dependencies
|
||||||
|
return true
|
||||||
|
elsif !quiet
|
||||||
|
opoo <<~EOS
|
||||||
|
#{f.full_name} #{f.pkg_version} is already installed and up-to-date.
|
||||||
|
To reinstall #{f.pkg_version}, run:
|
||||||
|
brew reinstall #{f.name}
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
elsif (head && new_head_installed) || prefix_installed
|
||||||
|
# After we're sure that --force flag is passed for linked to opt
|
||||||
|
# keg-only we need to be sure that the version we're attempting to
|
||||||
|
# install is not already installed.
|
||||||
|
|
||||||
|
installed_version = if head
|
||||||
|
f.latest_head_version
|
||||||
|
else
|
||||||
|
f.pkg_version
|
||||||
|
end
|
||||||
|
|
||||||
|
msg = "#{f.full_name} #{installed_version} is already installed"
|
||||||
|
linked_not_equals_installed = f.linked_version != installed_version
|
||||||
|
if f.linked? && linked_not_equals_installed
|
||||||
|
msg = if quiet
|
||||||
|
nil
|
||||||
|
else
|
||||||
|
<<~EOS
|
||||||
|
#{msg}.
|
||||||
|
The currently linked version is: #{f.linked_version}
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
elsif !f.linked? || f.keg_only?
|
||||||
|
msg = <<~EOS
|
||||||
|
#{msg}, it's just not linked.
|
||||||
|
To link this version, run:
|
||||||
|
brew link #{f}
|
||||||
|
EOS
|
||||||
|
elsif only_dependencies
|
||||||
|
msg = nil
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
msg = if quiet
|
||||||
|
nil
|
||||||
|
else
|
||||||
|
<<~EOS
|
||||||
|
#{msg} and up-to-date.
|
||||||
|
To reinstall #{f.pkg_version}, run:
|
||||||
|
brew reinstall #{f.name}
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
end
|
||||||
|
opoo msg if msg
|
||||||
|
elsif !f.any_version_installed? && (old_formula = f.old_installed_formulae.first)
|
||||||
|
msg = "#{old_formula.full_name} #{old_formula.any_installed_version} already installed"
|
||||||
|
msg = if !old_formula.linked? && !old_formula.keg_only?
|
||||||
|
<<~EOS
|
||||||
|
#{msg}, it's just not linked.
|
||||||
|
To link this version, run:
|
||||||
|
brew link #{old_formula.full_name}
|
||||||
|
EOS
|
||||||
|
elsif quiet
|
||||||
|
nil
|
||||||
|
else
|
||||||
|
"#{msg}."
|
||||||
|
end
|
||||||
|
opoo msg if msg
|
||||||
|
elsif f.migration_needed? && !force
|
||||||
|
# Check if the formula we try to install is the same as installed
|
||||||
|
# but not migrated one. If --force is passed then install anyway.
|
||||||
|
opoo <<~EOS
|
||||||
|
#{f.oldname} is already installed, it's just not migrated.
|
||||||
|
To migrate this formula, run:
|
||||||
|
brew migrate #{f}
|
||||||
|
Or to force-install it, run:
|
||||||
|
brew install #{f} --force
|
||||||
|
EOS
|
||||||
|
else
|
||||||
|
# If none of the above is true and the formula is linked, then
|
||||||
|
# FormulaInstaller will handle this case.
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
# Even if we don't install this formula mark it as no longer just
|
||||||
|
# installed as a dependency.
|
||||||
|
return false unless f.opt_prefix.directory?
|
||||||
|
|
||||||
|
keg = Keg.new(f.opt_prefix.resolved_path)
|
||||||
|
tab = Tab.for_keg(keg)
|
||||||
|
unless tab.installed_on_request
|
||||||
|
tab.installed_on_request = true
|
||||||
|
tab.write
|
||||||
|
end
|
||||||
|
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
def install_formula(
|
||||||
|
f,
|
||||||
|
build_bottle: false,
|
||||||
|
force_bottle: false,
|
||||||
|
bottle_arch: nil,
|
||||||
|
ignore_deps: false,
|
||||||
|
only_deps: false,
|
||||||
|
include_test_formulae: [],
|
||||||
|
build_from_source_formulae: [],
|
||||||
|
cc: nil,
|
||||||
|
git: false,
|
||||||
|
interactive: false,
|
||||||
|
keep_tmp: false,
|
||||||
|
force: false,
|
||||||
|
debug: false,
|
||||||
|
quiet: false,
|
||||||
|
verbose: false
|
||||||
|
)
|
||||||
|
f.print_tap_action
|
||||||
|
build_options = f.build
|
||||||
|
|
||||||
|
if !Homebrew::EnvConfig.no_install_upgrade? && f.outdated? && !f.head?
|
||||||
|
outdated_formulae = [f, *f.old_installed_formulae]
|
||||||
|
version_upgrade = "#{f.linked_version} -> #{f.pkg_version}"
|
||||||
|
|
||||||
|
oh1 <<~EOS
|
||||||
|
#{f.name} #{f.linked_version} is installed and outdated
|
||||||
|
Upgrading #{Formatted.identifier(f.name)} #{version_upgrade}
|
||||||
|
EOS
|
||||||
|
outdated_kegs = outdated_formulae.map(&:linked_keg).select(&:directory?).map { |k| Keg.new(k.resolved_path) }
|
||||||
|
linked_kegs = outdated_kegs.select(&:linked)
|
||||||
|
end
|
||||||
|
|
||||||
|
fi = FormulaInstaller.new(
|
||||||
|
f,
|
||||||
|
options: build_options.used_options,
|
||||||
|
build_bottle: build_bottle,
|
||||||
|
force_bottle: force_bottle,
|
||||||
|
bottle_arch: bottle_arch,
|
||||||
|
ignore_deps: ignore_deps,
|
||||||
|
only_deps: only_deps,
|
||||||
|
include_test_formulae: include_test_formulae,
|
||||||
|
build_from_source_formulae: build_from_source_formulae,
|
||||||
|
cc: cc,
|
||||||
|
git: git,
|
||||||
|
interactive: interactive,
|
||||||
|
keep_tmp: keep_tmp,
|
||||||
|
force: force,
|
||||||
|
debug: debug,
|
||||||
|
quiet: quiet,
|
||||||
|
verbose: verbose,
|
||||||
|
)
|
||||||
|
fi.prelude
|
||||||
|
fi.fetch
|
||||||
|
|
||||||
|
outdated_kegs.each(&:unlink) if outdated_kegs.present?
|
||||||
|
|
||||||
|
fi.install
|
||||||
|
fi.finish
|
||||||
|
rescue FormulaInstallationAlreadyAttemptedError
|
||||||
|
# We already attempted to install f as part of the dependency tree of
|
||||||
|
# another formula. In that case, don't generate an error, just move on.
|
||||||
|
nil
|
||||||
|
rescue CannotInstallFormulaError => e
|
||||||
|
ofail e.message
|
||||||
|
ensure
|
||||||
|
# Re-link kegs if upgrade fails
|
||||||
|
linked_kegs.each(&:link) unless f.latest_version_installed?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -15,8 +15,8 @@ class Messages
|
|||||||
@install_times = []
|
@install_times = []
|
||||||
end
|
end
|
||||||
|
|
||||||
def record_caveats(f, caveats)
|
def record_caveats(package, caveats)
|
||||||
@caveats.push(formula: f.name, caveats: caveats)
|
@caveats.push(package: package, caveats: caveats)
|
||||||
end
|
end
|
||||||
|
|
||||||
def formula_installed(f, elapsed_time)
|
def formula_installed(f, elapsed_time)
|
||||||
@ -36,7 +36,7 @@ class Messages
|
|||||||
|
|
||||||
oh1 "Caveats"
|
oh1 "Caveats"
|
||||||
@caveats.each do |c|
|
@caveats.each do |c|
|
||||||
ohai c[:formula], c[:caveats]
|
ohai c[:package], c[:caveats]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
12
Library/Homebrew/os/mac/pkgconfig/12/expat.pc
Normal file
12
Library/Homebrew/os/mac/pkgconfig/12/expat.pc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
Name: expat
|
||||||
|
Version: 2.2.8
|
||||||
|
Description: expat XML parser
|
||||||
|
URL: http://www.libexpat.org
|
||||||
|
Libs: -L${libdir} -lexpat
|
||||||
|
Cflags:
|
||||||
40
Library/Homebrew/os/mac/pkgconfig/12/libcurl.pc
Normal file
40
Library/Homebrew/os/mac/pkgconfig/12/libcurl.pc
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 2001 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# This software is licensed as described in the file COPYING, which
|
||||||
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
#
|
||||||
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
|
#
|
||||||
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
# KIND, either express or implied.
|
||||||
|
#
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
# This should most probably benefit from getting a "Requires:" field added
|
||||||
|
# dynamically by configure.
|
||||||
|
#
|
||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
supported_protocols="DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP"
|
||||||
|
supported_features="AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO MultiSSL NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy"
|
||||||
|
|
||||||
|
Name: libcurl
|
||||||
|
URL: https://curl.haxx.se/
|
||||||
|
Description: Library to transfer files with ftp, http, etc.
|
||||||
|
Version: 7.64.1
|
||||||
|
Libs: -L${libdir} -lcurl
|
||||||
|
Libs.private: -lldap -lz
|
||||||
|
Cflags:
|
||||||
12
Library/Homebrew/os/mac/pkgconfig/12/libedit.pc
Normal file
12
Library/Homebrew/os/mac/pkgconfig/12/libedit.pc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
Name: libedit
|
||||||
|
Description: command line editor library provides generic line editing, history, and tokenization functions.
|
||||||
|
Version: 3.0
|
||||||
|
Requires:
|
||||||
|
Libs: -L${libdir} -ledit
|
||||||
|
Cflags: -I${includedir}/editline
|
||||||
13
Library/Homebrew/os/mac/pkgconfig/12/libexslt.pc
Normal file
13
Library/Homebrew/os/mac/pkgconfig/12/libexslt.pc
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
|
||||||
|
Name: libexslt
|
||||||
|
Version: 0.8.17
|
||||||
|
Description: EXSLT Extension library
|
||||||
|
Requires: libxml-2.0
|
||||||
|
Libs: -L${libdir} -lexslt -lxslt -lxml2 -lz -lpthread -licucore -lm
|
||||||
|
Cflags:
|
||||||
12
Library/Homebrew/os/mac/pkgconfig/12/libffi.pc
Normal file
12
Library/Homebrew/os/mac/pkgconfig/12/libffi.pc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
toolexeclibdir=${libdir}
|
||||||
|
includedir=${prefix}/include/ffi
|
||||||
|
|
||||||
|
Name: libffi
|
||||||
|
Description: Library supporting Foreign Function Interfaces
|
||||||
|
Version: 3.3-rc0
|
||||||
|
Libs: -L${toolexeclibdir} -lffi
|
||||||
|
Cflags: -I${includedir}
|
||||||
14
Library/Homebrew/os/mac/pkgconfig/12/libxml-2.0.pc
Normal file
14
Library/Homebrew/os/mac/pkgconfig/12/libxml-2.0.pc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
modules=1
|
||||||
|
|
||||||
|
Name: libXML
|
||||||
|
Version: 2.9.4
|
||||||
|
Description: libXML library version2.
|
||||||
|
Requires:
|
||||||
|
Libs: -L${libdir} -lxml2
|
||||||
|
Libs.private: -lz -lpthread -licucore -lm
|
||||||
|
Cflags:
|
||||||
13
Library/Homebrew/os/mac/pkgconfig/12/libxslt.pc
Normal file
13
Library/Homebrew/os/mac/pkgconfig/12/libxslt.pc
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
|
||||||
|
Name: libxslt
|
||||||
|
Version: 1.1.29
|
||||||
|
Description: XSLT library version 2.
|
||||||
|
Requires: libxml-2.0
|
||||||
|
Libs: -L${libdir} -lxslt -lxml2 -lz -lpthread -licucore -lm
|
||||||
|
Cflags:
|
||||||
14
Library/Homebrew/os/mac/pkgconfig/12/ncurses.pc
Normal file
14
Library/Homebrew/os/mac/pkgconfig/12/ncurses.pc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
major_version=5
|
||||||
|
version=5.7.20081102
|
||||||
|
|
||||||
|
Name: ncurses
|
||||||
|
Description: ncurses 5.7 library
|
||||||
|
Version: ${version}
|
||||||
|
Requires:
|
||||||
|
Libs: -L${libdir} -lncurses
|
||||||
|
Cflags:
|
||||||
14
Library/Homebrew/os/mac/pkgconfig/12/ncursesw.pc
Normal file
14
Library/Homebrew/os/mac/pkgconfig/12/ncursesw.pc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
major_version=5
|
||||||
|
version=5.7.20081102
|
||||||
|
|
||||||
|
Name: ncursesw
|
||||||
|
Description: ncurses 5.7 library
|
||||||
|
Version: ${version}
|
||||||
|
Requires:
|
||||||
|
Libs: -L${libdir} -lncurses
|
||||||
|
Cflags:
|
||||||
12
Library/Homebrew/os/mac/pkgconfig/12/sqlite3.pc
Normal file
12
Library/Homebrew/os/mac/pkgconfig/12/sqlite3.pc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
Name: SQLite
|
||||||
|
Description: SQL database engine
|
||||||
|
Version: 3.32.3
|
||||||
|
Libs: -L${libdir} -lsqlite3
|
||||||
|
Libs.private:
|
||||||
|
Cflags:
|
||||||
14
Library/Homebrew/os/mac/pkgconfig/12/uuid.pc
Normal file
14
Library/Homebrew/os/mac/pkgconfig/12/uuid.pc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
sharedlibdir=${libdir}
|
||||||
|
includedir=${prefix}/include/uuid
|
||||||
|
|
||||||
|
Name: uuid
|
||||||
|
Description: Universally unique id library
|
||||||
|
Version: 1.0
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
Libs:
|
||||||
|
Cflags: -I${includedir}
|
||||||
14
Library/Homebrew/os/mac/pkgconfig/12/zlib.pc
Normal file
14
Library/Homebrew/os/mac/pkgconfig/12/zlib.pc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
homebrew_sdkroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk
|
||||||
|
prefix=${homebrew_sdkroot}/usr
|
||||||
|
exec_prefix=/usr
|
||||||
|
libdir=${exec_prefix}/lib
|
||||||
|
sharedlibdir=${libdir}
|
||||||
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
Name: zlib
|
||||||
|
Description: zlib compression library
|
||||||
|
Version: 1.2.11
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
Libs: -L${libdir} -L${sharedlibdir} -lz
|
||||||
|
Cflags:
|
||||||
@ -22,6 +22,7 @@ module OS
|
|||||||
def latest_version(macos: MacOS.version)
|
def latest_version(macos: MacOS.version)
|
||||||
latest_stable = "12.5"
|
latest_stable = "12.5"
|
||||||
case macos
|
case macos
|
||||||
|
when "12" then "13.0"
|
||||||
when "11" then latest_stable
|
when "11" then latest_stable
|
||||||
when "10.15" then "12.4"
|
when "10.15" then "12.4"
|
||||||
when "10.14" then "11.3.1"
|
when "10.14" then "11.3.1"
|
||||||
@ -45,6 +46,7 @@ module OS
|
|||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def minimum_version
|
def minimum_version
|
||||||
case MacOS.version
|
case MacOS.version
|
||||||
|
when "12" then "13.0"
|
||||||
when "11" then "12.2"
|
when "11" then "12.2"
|
||||||
when "10.15" then "11.0"
|
when "10.15" then "11.0"
|
||||||
when "10.14" then "10.2"
|
when "10.14" then "10.2"
|
||||||
@ -224,6 +226,7 @@ module OS
|
|||||||
when "11.0.0" then "11.3.1"
|
when "11.0.0" then "11.3.1"
|
||||||
when "11.0.3" then "11.7"
|
when "11.0.3" then "11.7"
|
||||||
when "12.0.0" then "12.4"
|
when "12.0.0" then "12.4"
|
||||||
|
when "13.0.0" then "13.0"
|
||||||
else "12.5"
|
else "12.5"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -314,6 +317,7 @@ module OS
|
|||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def latest_clang_version
|
def latest_clang_version
|
||||||
case MacOS.version
|
case MacOS.version
|
||||||
|
when "12" then "1300.0.18.6"
|
||||||
when "11" then "1205.0.22.9"
|
when "11" then "1205.0.22.9"
|
||||||
when "10.15" then "1200.0.32.29"
|
when "10.15" then "1200.0.32.29"
|
||||||
when "10.14" then "1100.0.33.17"
|
when "10.14" then "1100.0.33.17"
|
||||||
@ -331,6 +335,7 @@ module OS
|
|||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def minimum_version
|
def minimum_version
|
||||||
case MacOS.version
|
case MacOS.version
|
||||||
|
when "12" then "13.0.0"
|
||||||
when "11" then "12.0.0"
|
when "11" then "12.0.0"
|
||||||
when "10.15" then "11.0.0"
|
when "10.15" then "11.0.0"
|
||||||
when "10.14" then "10.0.0"
|
when "10.14" then "10.0.0"
|
||||||
|
|||||||
@ -1,40 +1,6 @@
|
|||||||
# typed: strict
|
# typed: strict
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative "load_path"
|
require_relative "standalone"
|
||||||
|
|
||||||
require "active_support/core_ext/array/conversions"
|
require "rubocops/all"
|
||||||
|
|
||||||
require "utils/sorbet"
|
|
||||||
|
|
||||||
require "rubocop-performance"
|
|
||||||
require "rubocop-rails"
|
|
||||||
require "rubocop-rspec"
|
|
||||||
require "rubocop-sorbet"
|
|
||||||
|
|
||||||
require "rubocops/io_read"
|
|
||||||
require "rubocops/shell_commands"
|
|
||||||
|
|
||||||
require "rubocops/formula_desc"
|
|
||||||
require "rubocops/components_order"
|
|
||||||
require "rubocops/components_redundancy"
|
|
||||||
require "rubocops/dependency_order"
|
|
||||||
require "rubocops/homepage"
|
|
||||||
require "rubocops/text"
|
|
||||||
require "rubocops/caveats"
|
|
||||||
require "rubocops/checksum"
|
|
||||||
require "rubocops/patches"
|
|
||||||
require "rubocops/conflicts"
|
|
||||||
require "rubocops/options"
|
|
||||||
require "rubocops/urls"
|
|
||||||
require "rubocops/lines"
|
|
||||||
require "rubocops/livecheck"
|
|
||||||
require "rubocops/class"
|
|
||||||
require "rubocops/uses_from_macos"
|
|
||||||
require "rubocops/files"
|
|
||||||
require "rubocops/keg_only"
|
|
||||||
require "rubocops/version"
|
|
||||||
require "rubocops/deprecate_disable"
|
|
||||||
require "rubocops/bottle"
|
|
||||||
|
|
||||||
require "rubocops/rubocop-cask"
|
|
||||||
|
|||||||
36
Library/Homebrew/rubocops/all.rb
Normal file
36
Library/Homebrew/rubocops/all.rb
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# typed: strict
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "active_support/core_ext/array/conversions"
|
||||||
|
|
||||||
|
require "rubocop-performance"
|
||||||
|
require "rubocop-rails"
|
||||||
|
require "rubocop-rspec"
|
||||||
|
require "rubocop-sorbet"
|
||||||
|
|
||||||
|
require_relative "io_read"
|
||||||
|
require_relative "shell_commands"
|
||||||
|
|
||||||
|
require_relative "formula_desc"
|
||||||
|
require_relative "components_order"
|
||||||
|
require_relative "components_redundancy"
|
||||||
|
require_relative "dependency_order"
|
||||||
|
require_relative "homepage"
|
||||||
|
require_relative "text"
|
||||||
|
require_relative "caveats"
|
||||||
|
require_relative "checksum"
|
||||||
|
require_relative "patches"
|
||||||
|
require_relative "conflicts"
|
||||||
|
require_relative "options"
|
||||||
|
require_relative "urls"
|
||||||
|
require_relative "lines"
|
||||||
|
require_relative "livecheck"
|
||||||
|
require_relative "class"
|
||||||
|
require_relative "uses_from_macos"
|
||||||
|
require_relative "files"
|
||||||
|
require_relative "keg_only"
|
||||||
|
require_relative "version"
|
||||||
|
require_relative "deprecate_disable"
|
||||||
|
require_relative "bottle"
|
||||||
|
|
||||||
|
require_relative "rubocop-cask"
|
||||||
@ -3,17 +3,17 @@
|
|||||||
|
|
||||||
require "rubocop"
|
require "rubocop"
|
||||||
|
|
||||||
require "rubocops/cask/constants/stanza"
|
require_relative "cask/constants/stanza"
|
||||||
|
|
||||||
require "rubocops/cask/ast/stanza"
|
require_relative "cask/ast/stanza"
|
||||||
require "rubocops/cask/ast/cask_header"
|
require_relative "cask/ast/cask_header"
|
||||||
require "rubocops/cask/ast/cask_block"
|
require_relative "cask/ast/cask_block"
|
||||||
require "rubocops/cask/extend/string"
|
require_relative "cask/extend/string"
|
||||||
require "rubocops/cask/extend/node"
|
require_relative "cask/extend/node"
|
||||||
require "rubocops/cask/mixin/cask_help"
|
require_relative "cask/mixin/cask_help"
|
||||||
require "rubocops/cask/mixin/on_homepage_stanza"
|
require_relative "cask/mixin/on_homepage_stanza"
|
||||||
require "rubocops/cask/desc"
|
require_relative "cask/desc"
|
||||||
require "rubocops/cask/homepage_url_trailing_slash"
|
require_relative "cask/homepage_url_trailing_slash"
|
||||||
require "rubocops/cask/no_dsl_version"
|
require_relative "cask/no_dsl_version"
|
||||||
require "rubocops/cask/stanza_order"
|
require_relative "cask/stanza_order"
|
||||||
require "rubocops/cask/stanza_grouping"
|
require_relative "cask/stanza_grouping"
|
||||||
|
|||||||
@ -1,26 +1,25 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "system_command"
|
require "utils/popen"
|
||||||
|
|
||||||
module Homebrew
|
module Homebrew
|
||||||
# Helper functions for reading and writing settings.
|
# Helper functions for reading and writing settings.
|
||||||
#
|
#
|
||||||
# @api private
|
# @api private
|
||||||
module Settings
|
module Settings
|
||||||
extend T::Sig
|
|
||||||
include SystemCommand::Mixin
|
|
||||||
|
|
||||||
module_function
|
module_function
|
||||||
|
|
||||||
sig { params(setting: T.any(String, Symbol), repo: Pathname).returns(T.nilable(String)) }
|
|
||||||
def read(setting, repo: HOMEBREW_REPOSITORY)
|
def read(setting, repo: HOMEBREW_REPOSITORY)
|
||||||
return unless (repo/".git/config").exist?
|
return unless (repo/".git/config").exist?
|
||||||
|
|
||||||
system_command("git", args: ["config", "--get", "homebrew.#{setting}"], chdir: repo).stdout.chomp.presence
|
value = Utils.popen_read("git", "-C", repo.to_s, "config", "--get", "homebrew.#{setting}").chomp
|
||||||
|
|
||||||
|
return if value.strip.empty?
|
||||||
|
|
||||||
|
value
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { params(setting: T.any(String, Symbol), value: T.any(String, T::Boolean), repo: Pathname).void }
|
|
||||||
def write(setting, value, repo: HOMEBREW_REPOSITORY)
|
def write(setting, value, repo: HOMEBREW_REPOSITORY)
|
||||||
return unless (repo/".git/config").exist?
|
return unless (repo/".git/config").exist?
|
||||||
|
|
||||||
@ -28,16 +27,15 @@ module Homebrew
|
|||||||
|
|
||||||
return if read(setting, repo: repo) == value
|
return if read(setting, repo: repo) == value
|
||||||
|
|
||||||
system_command! "git", args: ["config", "--replace-all", "homebrew.#{setting}", value], chdir: repo
|
Kernel.system("git", "-C", repo.to_s, "config", "--replace-all", "homebrew.#{setting}", value, exception: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { params(setting: T.any(String, Symbol), repo: Pathname).void }
|
|
||||||
def delete(setting, repo: HOMEBREW_REPOSITORY)
|
def delete(setting, repo: HOMEBREW_REPOSITORY)
|
||||||
return unless (repo/".git/config").exist?
|
return unless (repo/".git/config").exist?
|
||||||
|
|
||||||
return if read(setting, repo: repo).blank?
|
return if read(setting, repo: repo).blank?
|
||||||
|
|
||||||
system_command! "git", args: ["config", "--unset-all", "homebrew.#{setting}"], chdir: repo
|
Kernel.system("git", "-C", repo.to_s, "config", "--unset-all", "homebrew.#{setting}", exception: true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -3,5 +3,14 @@
|
|||||||
module Homebrew
|
module Homebrew
|
||||||
module Settings
|
module Settings
|
||||||
include Kernel
|
include Kernel
|
||||||
|
|
||||||
|
sig { params(setting: T.any(String, Symbol), repo: Pathname).returns(T.nilable(String)) }
|
||||||
|
def read(setting, repo: HOMEBREW_REPOSITORY); end
|
||||||
|
|
||||||
|
sig { params(setting: T.any(String, Symbol), value: T.any(String, T::Boolean), repo: Pathname).void }
|
||||||
|
def write(setting, value, repo: HOMEBREW_REPOSITORY); end
|
||||||
|
|
||||||
|
sig { params(setting: T.any(String, Symbol), repo: Pathname).void }
|
||||||
|
def delete(setting, repo: HOMEBREW_REPOSITORY); end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -10044,6 +10044,7 @@ class RuboCop::Cop::Style::QuotedSymbols < ::RuboCop::Cop::Base
|
|||||||
def alternative_style; end
|
def alternative_style; end
|
||||||
def autocorrect(corrector, node); end
|
def autocorrect(corrector, node); end
|
||||||
def correct_quotes(str); end
|
def correct_quotes(str); end
|
||||||
|
def hash_colon_key?(node); end
|
||||||
def quoted?(sym_node); end
|
def quoted?(sym_node); end
|
||||||
def style; end
|
def style; end
|
||||||
def wrong_quotes?(node); end
|
def wrong_quotes?(node); end
|
||||||
@ -10452,15 +10453,19 @@ class RuboCop::Cop::Style::RedundantSelf < ::RuboCop::Cop::Base
|
|||||||
def on_blockarg(node); end
|
def on_blockarg(node); end
|
||||||
def on_def(node); end
|
def on_def(node); end
|
||||||
def on_defs(node); end
|
def on_defs(node); end
|
||||||
|
def on_if(node); end
|
||||||
def on_lvasgn(node); end
|
def on_lvasgn(node); end
|
||||||
def on_masgn(node); end
|
def on_masgn(node); end
|
||||||
def on_op_asgn(node); end
|
def on_op_asgn(node); end
|
||||||
def on_or_asgn(node); end
|
def on_or_asgn(node); end
|
||||||
def on_send(node); end
|
def on_send(node); end
|
||||||
|
def on_until(node); end
|
||||||
|
def on_while(node); end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def add_lhs_to_local_variables_scopes(rhs, lhs); end
|
def add_lhs_to_local_variables_scopes(rhs, lhs); end
|
||||||
|
def add_masgn_lhs_variables(rhs, lhs); end
|
||||||
def add_scope(node, local_variables = T.unsafe(nil)); end
|
def add_scope(node, local_variables = T.unsafe(nil)); end
|
||||||
def allow_self(node); end
|
def allow_self(node); end
|
||||||
def allowed_send_node?(node); end
|
def allowed_send_node?(node); end
|
||||||
@ -6991,11 +6991,6 @@ class Enumerator::Generator
|
|||||||
def initialize(*_); end
|
def initialize(*_); end
|
||||||
end
|
end
|
||||||
|
|
||||||
module EnvVar
|
|
||||||
extend ::T::Private::Methods::MethodHooks
|
|
||||||
extend ::T::Private::Methods::SingletonMethodHooks
|
|
||||||
end
|
|
||||||
|
|
||||||
class Errno::EAUTH
|
class Errno::EAUTH
|
||||||
Errno = ::T.let(nil, ::T.untyped)
|
Errno = ::T.let(nil, ::T.untyped)
|
||||||
end
|
end
|
||||||
@ -8392,11 +8387,6 @@ class Homebrew::Service
|
|||||||
extend ::T::Private::Methods::SingletonMethodHooks
|
extend ::T::Private::Methods::SingletonMethodHooks
|
||||||
end
|
end
|
||||||
|
|
||||||
module Homebrew::Settings
|
|
||||||
extend ::T::Private::Methods::MethodHooks
|
|
||||||
extend ::T::Private::Methods::SingletonMethodHooks
|
|
||||||
end
|
|
||||||
|
|
||||||
class Homebrew::Style::LineLocation
|
class Homebrew::Style::LineLocation
|
||||||
extend ::T::Private::Methods::MethodHooks
|
extend ::T::Private::Methods::MethodHooks
|
||||||
extend ::T::Private::Methods::SingletonMethodHooks
|
extend ::T::Private::Methods::SingletonMethodHooks
|
||||||
@ -12636,8 +12626,8 @@ end
|
|||||||
class Object
|
class Object
|
||||||
include ::Minitest::Expectations
|
include ::Minitest::Expectations
|
||||||
include ::ActiveSupport::Tryable
|
include ::ActiveSupport::Tryable
|
||||||
include ::SystemCommand::Mixin
|
|
||||||
include ::Utils::Curl
|
include ::Utils::Curl
|
||||||
|
include ::SystemCommand::Mixin
|
||||||
include ::ActiveSupport::Dependencies::Loadable
|
include ::ActiveSupport::Dependencies::Loadable
|
||||||
include ::ActiveSupport::ForkTracker::CoreExtPrivate
|
include ::ActiveSupport::ForkTracker::CoreExtPrivate
|
||||||
include ::ActiveSupport::ForkTracker::CoreExt
|
include ::ActiveSupport::ForkTracker::CoreExt
|
||||||
@ -12662,6 +12652,7 @@ class Object
|
|||||||
DEPRECATED_OFFICIAL_TAPS = ::T.let(nil, ::T.untyped)
|
DEPRECATED_OFFICIAL_TAPS = ::T.let(nil, ::T.untyped)
|
||||||
ENV = ::T.let(nil, ::T.untyped)
|
ENV = ::T.let(nil, ::T.untyped)
|
||||||
FORMULA_COMPONENT_PRECEDENCE_LIST = ::T.let(nil, ::T.untyped)
|
FORMULA_COMPONENT_PRECEDENCE_LIST = ::T.let(nil, ::T.untyped)
|
||||||
|
HIDDEN_DESC_PLACEHOLDER = ::T.let(nil, ::T.untyped)
|
||||||
HOMEBREW_BOTTLES_EXTNAME_REGEX = ::T.let(nil, ::T.untyped)
|
HOMEBREW_BOTTLES_EXTNAME_REGEX = ::T.let(nil, ::T.untyped)
|
||||||
HOMEBREW_BOTTLE_DEFAULT_DOMAIN = ::T.let(nil, ::T.untyped)
|
HOMEBREW_BOTTLE_DEFAULT_DOMAIN = ::T.let(nil, ::T.untyped)
|
||||||
HOMEBREW_BREW_DEFAULT_GIT_REMOTE = ::T.let(nil, ::T.untyped)
|
HOMEBREW_BREW_DEFAULT_GIT_REMOTE = ::T.let(nil, ::T.untyped)
|
||||||
@ -26802,6 +26793,7 @@ end
|
|||||||
module RuboCop::AST::NodePattern::Sets
|
module RuboCop::AST::NodePattern::Sets
|
||||||
SET_BUILD_RECOMMENDED_TEST_OPTIONAL = ::T.let(nil, ::T.untyped)
|
SET_BUILD_RECOMMENDED_TEST_OPTIONAL = ::T.let(nil, ::T.untyped)
|
||||||
SET_DEPENDS_ON_USES_FROM_MACOS = ::T.let(nil, ::T.untyped)
|
SET_DEPENDS_ON_USES_FROM_MACOS = ::T.let(nil, ::T.untyped)
|
||||||
|
SET_EQL_EQ_BE = ::T.let(nil, ::T.untyped)
|
||||||
SET_INCLUDE_WITH_WITHOUT = ::T.let(nil, ::T.untyped)
|
SET_INCLUDE_WITH_WITHOUT = ::T.let(nil, ::T.untyped)
|
||||||
SET_SYSTEM_SHELL_OUTPUT_PIPE_OUTPUT = ::T.let(nil, ::T.untyped)
|
SET_SYSTEM_SHELL_OUTPUT_PIPE_OUTPUT = ::T.let(nil, ::T.untyped)
|
||||||
SET_WITH_WITHOUT = ::T.let(nil, ::T.untyped)
|
SET_WITH_WITHOUT = ::T.let(nil, ::T.untyped)
|
||||||
|
|||||||
7
Library/Homebrew/standalone.rb
Normal file
7
Library/Homebrew/standalone.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# typed: true
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# This file should be the first `require` in all entrypoints outside the `brew` environment.
|
||||||
|
|
||||||
|
require_relative "standalone/load_path"
|
||||||
|
require_relative "standalone/sorbet"
|
||||||
@ -3,13 +3,13 @@
|
|||||||
|
|
||||||
require "pathname"
|
require "pathname"
|
||||||
|
|
||||||
HOMEBREW_LIBRARY_PATH = Pathname(__dir__).realpath.freeze
|
HOMEBREW_LIBRARY_PATH = Pathname(__dir__).parent.realpath.freeze
|
||||||
|
|
||||||
require_relative "utils/gems"
|
require_relative "../utils/gems"
|
||||||
Homebrew.setup_gem_environment!(setup_path: false)
|
Homebrew.setup_gem_environment!(setup_path: false)
|
||||||
|
|
||||||
$LOAD_PATH.push HOMEBREW_LIBRARY_PATH.to_s unless $LOAD_PATH.include?(HOMEBREW_LIBRARY_PATH.to_s)
|
$LOAD_PATH.push HOMEBREW_LIBRARY_PATH.to_s unless $LOAD_PATH.include?(HOMEBREW_LIBRARY_PATH.to_s)
|
||||||
require_relative "vendor/bundle/bundler/setup"
|
require_relative "../vendor/bundle/bundler/setup"
|
||||||
$LOAD_PATH.uniq!
|
$LOAD_PATH.uniq!
|
||||||
|
|
||||||
# Block any gem loading by bypassing rubygem's `require`.
|
# Block any gem loading by bypassing rubygem's `require`.
|
||||||
@ -21,5 +21,3 @@ if Kernel.private_method_defined?(:gem_original_require)
|
|||||||
Kernel.send(:define_method, :require, Kernel.instance_method(:gem_original_require))
|
Kernel.send(:define_method, :require, Kernel.instance_method(:gem_original_require))
|
||||||
Kernel.send(:private, :require)
|
Kernel.send(:private, :require)
|
||||||
end
|
end
|
||||||
|
|
||||||
require_relative "homebrew_bootsnap"
|
|
||||||
11
Library/Homebrew/standalone/sorbet.rb
Normal file
11
Library/Homebrew/standalone/sorbet.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# typed: true
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# Explicitly prevent `sorbet-runtime` from being loaded.
|
||||||
|
def gem(name, *)
|
||||||
|
raise Gem::LoadError if name == "sorbet-runtime"
|
||||||
|
|
||||||
|
super
|
||||||
|
end
|
||||||
|
|
||||||
|
require "sorbet-runtime-stub"
|
||||||
10
Library/Homebrew/startup.rb
Normal file
10
Library/Homebrew/startup.rb
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# typed: true
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# This file should be the first `require` in all entrypoints of `brew`.
|
||||||
|
|
||||||
|
require_relative "standalone/load_path"
|
||||||
|
require_relative "startup/ruby_path"
|
||||||
|
require "startup/config"
|
||||||
|
require_relative "startup/bootsnap"
|
||||||
|
require_relative "startup/sorbet"
|
||||||
@ -12,9 +12,6 @@ class MissingEnvironmentVariables < RuntimeError; end
|
|||||||
#
|
#
|
||||||
# @api private
|
# @api private
|
||||||
module EnvVar
|
module EnvVar
|
||||||
extend T::Sig
|
|
||||||
|
|
||||||
sig { params(env: String).returns(String) }
|
|
||||||
def self.[](env)
|
def self.[](env)
|
||||||
raise MissingEnvironmentVariables, "#{env} was not exported!" unless ENV[env]
|
raise MissingEnvironmentVariables, "#{env} was not exported!" unless ENV[env]
|
||||||
|
|
||||||
@ -22,15 +19,11 @@ module EnvVar
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
require "extend/git_repository"
|
|
||||||
|
|
||||||
# Where we link under
|
# Where we link under
|
||||||
HOMEBREW_PREFIX = Pathname(EnvVar["HOMEBREW_PREFIX"]).freeze
|
HOMEBREW_PREFIX = Pathname(EnvVar["HOMEBREW_PREFIX"]).freeze
|
||||||
|
|
||||||
# Where `.git` is found
|
# Where `.git` is found
|
||||||
HOMEBREW_REPOSITORY = Pathname(EnvVar["HOMEBREW_REPOSITORY"])
|
HOMEBREW_REPOSITORY = Pathname(EnvVar["HOMEBREW_REPOSITORY"]).freeze
|
||||||
.extend(GitRepositoryExtension)
|
|
||||||
.freeze
|
|
||||||
|
|
||||||
# Where we store most of Homebrew, taps, and various metadata
|
# Where we store most of Homebrew, taps, and various metadata
|
||||||
HOMEBREW_LIBRARY = Pathname(EnvVar["HOMEBREW_LIBRARY"]).freeze
|
HOMEBREW_LIBRARY = Pathname(EnvVar["HOMEBREW_LIBRARY"]).freeze
|
||||||
7
Library/Homebrew/startup/ruby_path.rb
Normal file
7
Library/Homebrew/startup/ruby_path.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# typed: true
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "rbconfig"
|
||||||
|
|
||||||
|
RUBY_PATH = Pathname.new(RbConfig.ruby).freeze
|
||||||
|
RUBY_BIN = RUBY_PATH.dirname.freeze
|
||||||
10
Library/Homebrew/startup/sorbet.rb
Normal file
10
Library/Homebrew/startup/sorbet.rb
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# typed: true
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
if ENV["HOMEBREW_SORBET_RUNTIME"]
|
||||||
|
# This is only supported under the brew environment.
|
||||||
|
Homebrew.install_bundler_gems!(groups: ["sorbet"])
|
||||||
|
require "sorbet-runtime"
|
||||||
|
else
|
||||||
|
require "standalone/sorbet"
|
||||||
|
end
|
||||||
@ -85,7 +85,7 @@ module Homebrew
|
|||||||
require "rubocop"
|
require "rubocop"
|
||||||
end
|
end
|
||||||
|
|
||||||
require "rubocops"
|
require "rubocops/all"
|
||||||
|
|
||||||
args = %w[
|
args = %w[
|
||||||
--force-exclusion
|
--force-exclusion
|
||||||
|
|||||||
@ -32,19 +32,24 @@ module SystemConfig
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
sig { returns(Pathname) }
|
||||||
|
def homebrew_repo
|
||||||
|
HOMEBREW_REPOSITORY.dup.extend(GitRepositoryExtension)
|
||||||
|
end
|
||||||
|
|
||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def head
|
def head
|
||||||
HOMEBREW_REPOSITORY.git_head || "(none)"
|
homebrew_repo.git_head || "(none)"
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def last_commit
|
def last_commit
|
||||||
HOMEBREW_REPOSITORY.git_last_commit || "never"
|
homebrew_repo.git_last_commit || "never"
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
def origin
|
def origin
|
||||||
HOMEBREW_REPOSITORY.git_origin || "(none)"
|
homebrew_repo.git_origin || "(none)"
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { returns(String) }
|
sig { returns(String) }
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "config"
|
|
||||||
|
|
||||||
# Match taps' formulae, e.g. `someuser/sometap/someformula`
|
# Match taps' formulae, e.g. `someuser/sometap/someformula`
|
||||||
HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w+-.@]+)$}.freeze
|
HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w+-.@]+)$}.freeze
|
||||||
# Match taps' casks, e.g. `someuser/sometap/somecask`
|
# Match taps' casks, e.g. `someuser/sometap/somecask`
|
||||||
|
|||||||
@ -9,6 +9,7 @@ describe Homebrew::CLI::Parser do
|
|||||||
described_class.new do
|
described_class.new do
|
||||||
switch "--more-verbose", description: "Flag for higher verbosity"
|
switch "--more-verbose", description: "Flag for higher verbosity"
|
||||||
switch "--pry", env: :pry
|
switch "--pry", env: :pry
|
||||||
|
switch "--hidden", hidden: true
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,6 +99,11 @@ describe Homebrew::CLI::Parser do
|
|||||||
expect(args.more_verbose?).to be false
|
expect(args.more_verbose?).to be false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "sets the correct value for a hidden switch" do
|
||||||
|
args = parser.parse([])
|
||||||
|
expect(args.hidden?).to be false
|
||||||
|
end
|
||||||
|
|
||||||
it "raises an exception and outputs help text when an invalid option is passed" do
|
it "raises an exception and outputs help text when an invalid option is passed" do
|
||||||
expect { parser.parse(["--random"]) }.to raise_error(OptionParser::InvalidOption, /--random/)
|
expect { parser.parse(["--random"]) }.to raise_error(OptionParser::InvalidOption, /--random/)
|
||||||
.and output(/Usage: brew/).to_stderr
|
.and output(/Usage: brew/).to_stderr
|
||||||
@ -114,6 +120,8 @@ describe Homebrew::CLI::Parser do
|
|||||||
described_class.new do
|
described_class.new do
|
||||||
flag "--filename=", description: "Name of the file"
|
flag "--filename=", description: "Name of the file"
|
||||||
comma_array "--files", description: "Comma separated filenames"
|
comma_array "--files", description: "Comma separated filenames"
|
||||||
|
flag "--hidden=", hidden: true
|
||||||
|
comma_array "--hidden-array", hidden: true
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,6 +138,12 @@ describe Homebrew::CLI::Parser do
|
|||||||
args = parser.parse(["--files=random1.txt,random2.txt"])
|
args = parser.parse(["--files=random1.txt,random2.txt"])
|
||||||
expect(args.files).to eq %w[random1.txt random2.txt]
|
expect(args.files).to eq %w[random1.txt random2.txt]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "sets the correct value for hidden flags" do
|
||||||
|
args = parser.parse(["--hidden=foo", "--hidden-array=bar,baz"])
|
||||||
|
expect(args.hidden).to eq "foo"
|
||||||
|
expect(args.hidden_array).to eq %w[bar baz]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "test short flag options" do
|
describe "test short flag options" do
|
||||||
@ -361,6 +375,13 @@ describe Homebrew::CLI::Parser do
|
|||||||
expect(parser.generate_help_text).to match(/\[--foo=\]/)
|
expect(parser.generate_help_text).to match(/\[--foo=\]/)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "does not include hidden options" do
|
||||||
|
parser = described_class.new do
|
||||||
|
switch "--foo", hidden: true
|
||||||
|
end
|
||||||
|
expect(parser.generate_help_text).not_to match(/\[--foo\]/)
|
||||||
|
end
|
||||||
|
|
||||||
it "doesn't include `[options]` if non non-global options are available" do
|
it "doesn't include `[options]` if non non-global options are available" do
|
||||||
parser = described_class.new
|
parser = described_class.new
|
||||||
expect(parser.generate_help_text).not_to match(/\[options\]/)
|
expect(parser.generate_help_text).not_to match(/\[options\]/)
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "cmd/shared_examples/args_parse"
|
require "cmd/shared_examples/args_parse"
|
||||||
require "support/lib/config"
|
|
||||||
|
|
||||||
describe "brew home" do
|
describe "brew home" do
|
||||||
let(:testballhome_homepage) {
|
let(:testballhome_homepage) {
|
||||||
|
|||||||
@ -17,7 +17,9 @@ describe PkgVersion do
|
|||||||
|
|
||||||
specify "#==" do
|
specify "#==" do
|
||||||
expect(described_class.parse("1.0_0")).to be == described_class.parse("1.0")
|
expect(described_class.parse("1.0_0")).to be == described_class.parse("1.0")
|
||||||
expect(described_class.parse("1.0_1")).to be == described_class.parse("1.0_1")
|
version_to_compare = described_class.parse("1.0_1")
|
||||||
|
expect(version_to_compare == described_class.parse("1.0_1")).to be true
|
||||||
|
expect(version_to_compare == described_class.parse("1.0_2")).to be false
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#>" do
|
describe "#>" do
|
||||||
|
|||||||
8
Library/Homebrew/test/support/lib/default_prefix.rb
Normal file
8
Library/Homebrew/test/support/lib/default_prefix.rb
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# typed: true
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Homebrew
|
||||||
|
# For testing's sake always assume the default prefix
|
||||||
|
DEFAULT_PREFIX = HOMEBREW_PREFIX.to_s.freeze
|
||||||
|
DEFAULT_REPOSITORY = HOMEBREW_REPOSITORY.to_s.freeze
|
||||||
|
end
|
||||||
@ -3,8 +3,6 @@
|
|||||||
|
|
||||||
raise "HOMEBREW_BREW_FILE was not exported! Please call bin/brew directly!" unless ENV["HOMEBREW_BREW_FILE"]
|
raise "HOMEBREW_BREW_FILE was not exported! Please call bin/brew directly!" unless ENV["HOMEBREW_BREW_FILE"]
|
||||||
|
|
||||||
require "pathname"
|
|
||||||
|
|
||||||
HOMEBREW_BREW_FILE = Pathname.new(ENV["HOMEBREW_BREW_FILE"]).freeze
|
HOMEBREW_BREW_FILE = Pathname.new(ENV["HOMEBREW_BREW_FILE"]).freeze
|
||||||
|
|
||||||
TEST_TMPDIR = ENV.fetch("HOMEBREW_TEST_TMPDIR") do |k|
|
TEST_TMPDIR = ENV.fetch("HOMEBREW_TEST_TMPDIR") do |k|
|
||||||
@ -23,11 +21,9 @@ HOMEBREW_SHIMS_PATH = (HOMEBREW_LIBRARY_PATH/"shims").freeze
|
|||||||
# Where external data that has been incorporated into Homebrew is stored
|
# Where external data that has been incorporated into Homebrew is stored
|
||||||
HOMEBREW_DATA_PATH = (HOMEBREW_LIBRARY_PATH/"data").freeze
|
HOMEBREW_DATA_PATH = (HOMEBREW_LIBRARY_PATH/"data").freeze
|
||||||
|
|
||||||
require "extend/git_repository"
|
|
||||||
|
|
||||||
# Paths redirected to a temporary directory and wiped at the end of the test run
|
# Paths redirected to a temporary directory and wiped at the end of the test run
|
||||||
HOMEBREW_PREFIX = (Pathname(TEST_TMPDIR)/"prefix").freeze
|
HOMEBREW_PREFIX = (Pathname(TEST_TMPDIR)/"prefix").freeze
|
||||||
HOMEBREW_REPOSITORY = HOMEBREW_PREFIX.dup.extend(GitRepositoryExtension).freeze
|
HOMEBREW_REPOSITORY = HOMEBREW_PREFIX.dup.freeze
|
||||||
HOMEBREW_LIBRARY = (HOMEBREW_REPOSITORY/"Library").freeze
|
HOMEBREW_LIBRARY = (HOMEBREW_REPOSITORY/"Library").freeze
|
||||||
HOMEBREW_CACHE = (HOMEBREW_PREFIX.parent/"cache").freeze
|
HOMEBREW_CACHE = (HOMEBREW_PREFIX.parent/"cache").freeze
|
||||||
HOMEBREW_CACHE_FORMULA = (HOMEBREW_PREFIX.parent/"formula_cache").freeze
|
HOMEBREW_CACHE_FORMULA = (HOMEBREW_PREFIX.parent/"formula_cache").freeze
|
||||||
@ -52,12 +48,3 @@ PATCH_B_SHA256 = "57958271bb802a59452d0816e0670d16c8b70bdf6530bcf6f78726489ad89b
|
|||||||
|
|
||||||
TEST_SHA1 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
|
TEST_SHA1 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
|
||||||
TEST_SHA256 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
|
TEST_SHA256 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
|
||||||
|
|
||||||
# For testing's sake always assume the default prefix
|
|
||||||
module Homebrew
|
|
||||||
remove_const :DEFAULT_PREFIX if defined?(DEFAULT_PREFIX)
|
|
||||||
DEFAULT_PREFIX = HOMEBREW_PREFIX.to_s.freeze
|
|
||||||
|
|
||||||
remove_const :DEFAULT_REPOSITORY if defined?(DEFAULT_REPOSITORY)
|
|
||||||
DEFAULT_REPOSITORY = HOMEBREW_REPOSITORY.to_s.freeze
|
|
||||||
end
|
|
||||||
@ -52,7 +52,7 @@ module Homebrew
|
|||||||
|
|
||||||
def setup_gem_environment!(gem_home: nil, gem_bindir: nil, setup_path: true)
|
def setup_gem_environment!(gem_home: nil, gem_bindir: nil, setup_path: true)
|
||||||
# Match where our bundler gems are.
|
# Match where our bundler gems are.
|
||||||
gem_home ||= "#{ENV["HOMEBREW_LIBRARY"]}/Homebrew/vendor/bundle/ruby/#{RbConfig::CONFIG["ruby_version"]}"
|
gem_home ||= "#{HOMEBREW_LIBRARY_PATH}/vendor/bundle/ruby/#{RbConfig::CONFIG["ruby_version"]}"
|
||||||
Gem.paths = {
|
Gem.paths = {
|
||||||
"GEM_HOME" => gem_home,
|
"GEM_HOME" => gem_home,
|
||||||
"GEM_PATH" => gem_home,
|
"GEM_PATH" => gem_home,
|
||||||
@ -128,23 +128,34 @@ module Homebrew
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_bundler_gems!(only_warn_on_failure: false, setup_path: true)
|
def install_bundler_gems!(only_warn_on_failure: false, setup_path: true, groups: [])
|
||||||
old_path = ENV["PATH"]
|
old_path = ENV["PATH"]
|
||||||
old_gem_path = ENV["GEM_PATH"]
|
old_gem_path = ENV["GEM_PATH"]
|
||||||
old_gem_home = ENV["GEM_HOME"]
|
old_gem_home = ENV["GEM_HOME"]
|
||||||
old_bundle_gemfile = ENV["BUNDLE_GEMFILE"]
|
old_bundle_gemfile = ENV["BUNDLE_GEMFILE"]
|
||||||
|
old_bundle_with = ENV["BUNDLE_WITH"]
|
||||||
|
|
||||||
install_bundler!
|
install_bundler!
|
||||||
|
|
||||||
|
require "settings"
|
||||||
|
|
||||||
|
# Combine the passed groups with the ones stored in settings
|
||||||
|
groups |= (Homebrew::Settings.read(:gemgroups)&.split(";") || [])
|
||||||
|
groups.sort!
|
||||||
|
|
||||||
ENV["BUNDLE_GEMFILE"] = File.join(ENV.fetch("HOMEBREW_LIBRARY"), "Homebrew", "Gemfile")
|
ENV["BUNDLE_GEMFILE"] = File.join(ENV.fetch("HOMEBREW_LIBRARY"), "Homebrew", "Gemfile")
|
||||||
@bundle_installed ||= begin
|
ENV["BUNDLE_WITH"] = groups.join(" ")
|
||||||
|
|
||||||
|
if @bundle_installed_groups != groups
|
||||||
bundle = File.join(find_in_path("bundle"), "bundle")
|
bundle = File.join(find_in_path("bundle"), "bundle")
|
||||||
bundle_check_output = `#{bundle} check 2>&1`
|
bundle_check_output = `#{bundle} check 2>&1`
|
||||||
bundle_check_failed = !$CHILD_STATUS.success?
|
bundle_check_failed = !$CHILD_STATUS.success?
|
||||||
|
|
||||||
# for some reason sometimes the exit code lies so check the output too.
|
# for some reason sometimes the exit code lies so check the output too.
|
||||||
if bundle_check_failed || bundle_check_output.include?("Install missing gems")
|
bundle_installed = if bundle_check_failed || bundle_check_output.include?("Install missing gems")
|
||||||
unless system bundle, "install"
|
if system bundle, "install"
|
||||||
|
true
|
||||||
|
else
|
||||||
message = <<~EOS
|
message = <<~EOS
|
||||||
failed to run `#{bundle} install`!
|
failed to run `#{bundle} install`!
|
||||||
EOS
|
EOS
|
||||||
@ -153,10 +164,16 @@ module Homebrew
|
|||||||
else
|
else
|
||||||
odie_if_defined message
|
odie_if_defined message
|
||||||
end
|
end
|
||||||
|
false
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if bundle_installed
|
||||||
|
Homebrew::Settings.write(:gemgroups, groups.join(";"))
|
||||||
|
@bundle_installed_groups = groups
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
setup_gem_environment!
|
setup_gem_environment!
|
||||||
@ -167,6 +184,7 @@ module Homebrew
|
|||||||
ENV["GEM_PATH"] = old_gem_path
|
ENV["GEM_PATH"] = old_gem_path
|
||||||
ENV["GEM_HOME"] = old_gem_home
|
ENV["GEM_HOME"] = old_gem_home
|
||||||
ENV["BUNDLE_GEMFILE"] = old_bundle_gemfile
|
ENV["BUNDLE_GEMFILE"] = old_bundle_gemfile
|
||||||
|
ENV["BUNDLE_WITH"] = old_bundle_with
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -22,6 +22,6 @@ module Homebrew
|
|||||||
sig { void }
|
sig { void }
|
||||||
def install_bundler!; end
|
def install_bundler!; end
|
||||||
|
|
||||||
sig { params(only_warn_on_failure: T::Boolean, setup_path: T::Boolean).void }
|
sig { params(only_warn_on_failure: T::Boolean, setup_path: T::Boolean, groups: T::Array[String]).void }
|
||||||
def install_bundler_gems!(only_warn_on_failure: false, setup_path: false); end
|
def install_bundler_gems!(only_warn_on_failure: false, setup_path: false, groups: []); end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -2,9 +2,7 @@
|
|||||||
# typed: false
|
# typed: false
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative "gems"
|
require_relative "../standalone"
|
||||||
Homebrew.setup_gem_environment!
|
|
||||||
|
|
||||||
require_relative "../warnings"
|
require_relative "../warnings"
|
||||||
|
|
||||||
Warnings.ignore :parser_syntax do
|
Warnings.ignore :parser_syntax do
|
||||||
|
|||||||
@ -1,16 +0,0 @@
|
|||||||
# typed: true
|
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
if ENV["HOMEBREW_SORBET_RUNTIME"]
|
|
||||||
Homebrew.install_bundler_gems!
|
|
||||||
require "sorbet-runtime"
|
|
||||||
else
|
|
||||||
# Explicitly prevent `sorbet-runtime` from being loaded.
|
|
||||||
def gem(name, *)
|
|
||||||
raise Gem::LoadError if name == "sorbet-runtime"
|
|
||||||
|
|
||||||
super
|
|
||||||
end
|
|
||||||
|
|
||||||
require "sorbet-runtime-stub"
|
|
||||||
end
|
|
||||||
@ -79,10 +79,10 @@ $:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-wait-0.0.9/lib"
|
|||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-ast-1.7.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-ast-1.7.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-progressbar-1.11.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-progressbar-1.11.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/unicode-display_width-2.0.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/unicode-display_width-2.0.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-1.16.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-1.16.1/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-performance-1.11.3/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-performance-1.11.3/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-rails-2.10.1/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-rails-2.10.1/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-rspec-2.3.0/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-rspec-2.4.0/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-sorbet-0.6.2/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-sorbet-0.6.2/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-macho-2.5.1/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-macho-2.5.1/lib"
|
||||||
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/simplecov-html-0.12.3/lib"
|
$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/simplecov-html-0.12.3/lib"
|
||||||
|
|||||||
@ -351,6 +351,12 @@ RSpec/HooksBeforeExamples:
|
|||||||
VersionAdded: '1.29'
|
VersionAdded: '1.29'
|
||||||
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/HooksBeforeExamples
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/HooksBeforeExamples
|
||||||
|
|
||||||
|
RSpec/IdenticalEqualityAssertion:
|
||||||
|
Description: Checks for equality assertions with identical expressions on both sides.
|
||||||
|
Enabled: pending
|
||||||
|
VersionAdded: '2.4'
|
||||||
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/IdenticalEqualityAssertion
|
||||||
|
|
||||||
RSpec/ImplicitBlockExpectation:
|
RSpec/ImplicitBlockExpectation:
|
||||||
Description: Check that implicit block expectation syntax is not used.
|
Description: Check that implicit block expectation syntax is not used.
|
||||||
Enabled: true
|
Enabled: true
|
||||||
@ -753,6 +759,12 @@ RSpec/FactoryBot/FactoryClassName:
|
|||||||
VersionChanged: '2.0'
|
VersionChanged: '2.0'
|
||||||
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FactoryBot/FactoryClassName
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FactoryBot/FactoryClassName
|
||||||
|
|
||||||
|
RSpec/Rails/AvoidSetupHook:
|
||||||
|
Description: Checks that tests use RSpec `before` hook over Rails `setup` method.
|
||||||
|
Enabled: pending
|
||||||
|
VersionAdded: '2.4'
|
||||||
|
StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Rails/AvoidSetupHook
|
||||||
|
|
||||||
RSpec/Rails/HttpStatus:
|
RSpec/Rails/HttpStatus:
|
||||||
Description: Enforces use of symbolic or numeric value to describe HTTP status.
|
Description: Enforces use of symbolic or numeric value to describe HTTP status.
|
||||||
Enabled: true
|
Enabled: true
|
||||||
@ -203,7 +203,7 @@ module RuboCop
|
|||||||
[name]
|
[name]
|
||||||
elsif namespace.const_type?
|
elsif namespace.const_type?
|
||||||
[*const_name(namespace), name]
|
[*const_name(namespace), name]
|
||||||
elsif namespace.lvar_type? || namespace.cbase_type?
|
elsif %i[lvar cbase send].include?(namespace.type)
|
||||||
[nil, name]
|
[nil, name]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user