Use the debug gem from portable Ruby

- This is cleaner than vendoring a whole bunch of new gems and pinning `psych`.
- Thanks for the pointer, Bo!
- It doesn't work, though?

```
❯ brew tests --only=migrator --debug
Error: cannot load such file -- debug/debug.so
Warning: Removed Sorbet lines from backtrace!
Rerun with `--verbose` to see the original backtrace
/opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/gems/3.1.0/gems/debug-1.6.3/lib/debug/frame_info.rb:16:in `require'
/opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/gems/3.1.0/gems/debug-1.6.3/lib/debug/frame_info.rb:16:in `rescue in <module:DEBUGGER__>'
/opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/gems/3.1.0/gems/debug-1.6.3/lib/debug/frame_info.rb:13:in `<module:DEBUGGER__>'
/opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/gems/3.1.0/gems/debug-1.6.3/lib/debug/frame_info.rb:3:in `<top (required)>'
/opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/gems/3.1.0/gems/debug-1.6.3/lib/debug/session.rb:31:in `require_relative'
/opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/gems/3.1.0/gems/debug-1.6.3/lib/debug/session.rb:31:in `<top (required)>'
/opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/gems/3.1.0/gems/debug-1.6.3/lib/debug.rb:3:in `require_relative'
/opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/lib/ruby/gems/3.1.0/gems/debug-1.6.3/lib/debug.rb:3:in `<top (required)>'
/opt/homebrew/Library/Homebrew/dev-cmd/tests.rb:48:in `require'
/opt/homebrew/Library/Homebrew/dev-cmd/tests.rb:48:in `run'
/opt/homebrew/Library/Homebrew/brew.rb:89:in `<main>'
```
This commit is contained in:
Issy Long 2024-04-07 20:17:07 +01:00
parent 621e51a6c9
commit 073e739005
No known key found for this signature in database
13 changed files with 19 additions and 43 deletions

4
.gitignore vendored
View File

@ -77,14 +77,12 @@
**/vendor/bundle/ruby/*/gems/coderay-*/ **/vendor/bundle/ruby/*/gems/coderay-*/
**/vendor/bundle/ruby/*/gems/colorize-*/ **/vendor/bundle/ruby/*/gems/colorize-*/
**/vendor/bundle/ruby/*/gems/commander-*/ **/vendor/bundle/ruby/*/gems/commander-*/
**/vendor/bundle/ruby/*/gems/debug-*/
**/vendor/bundle/ruby/*/gems/diff-lcs-*/ **/vendor/bundle/ruby/*/gems/diff-lcs-*/
**/vendor/bundle/ruby/*/gems/docile-*/ **/vendor/bundle/ruby/*/gems/docile-*/
**/vendor/bundle/ruby/*/gems/ecma-re-validator-*/ **/vendor/bundle/ruby/*/gems/ecma-re-validator-*/
**/vendor/bundle/ruby/*/gems/erubi-*/ **/vendor/bundle/ruby/*/gems/erubi-*/
**/vendor/bundle/ruby/*/gems/hana-*/ **/vendor/bundle/ruby/*/gems/hana-*/
**/vendor/bundle/ruby/*/gems/highline-*/ **/vendor/bundle/ruby/*/gems/highline-*/
**/vendor/bundle/ruby/*/gems/irb-*/
**/vendor/bundle/ruby/*/gems/jaro_winkler-*/ **/vendor/bundle/ruby/*/gems/jaro_winkler-*/
**/vendor/bundle/ruby/*/gems/json-*/ **/vendor/bundle/ruby/*/gems/json-*/
**/vendor/bundle/ruby/*/gems/json_schemer-*/ **/vendor/bundle/ruby/*/gems/json_schemer-*/
@ -110,7 +108,6 @@
**/vendor/bundle/ruby/*/gems/rbi-*/ **/vendor/bundle/ruby/*/gems/rbi-*/
**/vendor/bundle/ruby/*/gems/rdoc-*/ **/vendor/bundle/ruby/*/gems/rdoc-*/
**/vendor/bundle/ruby/*/gems/regexp_parser-*/ **/vendor/bundle/ruby/*/gems/regexp_parser-*/
**/vendor/bundle/ruby/*/gems/reline-*/
**/vendor/bundle/ruby/*/gems/rexml-*/ **/vendor/bundle/ruby/*/gems/rexml-*/
**/vendor/bundle/ruby/*/gems/rspec-*/ **/vendor/bundle/ruby/*/gems/rspec-*/
**/vendor/bundle/ruby/*/gems/rspec-core-*/ **/vendor/bundle/ruby/*/gems/rspec-core-*/
@ -131,7 +128,6 @@
!**/vendor/bundle/ruby/*/gems/sorbet-runtime-*/ !**/vendor/bundle/ruby/*/gems/sorbet-runtime-*/
**/vendor/bundle/ruby/*/gems/spoom-*/ **/vendor/bundle/ruby/*/gems/spoom-*/
**/vendor/bundle/ruby/*/gems/stackprof-*/ **/vendor/bundle/ruby/*/gems/stackprof-*/
**/vendor/bundle/ruby/*/gems/stringio-*/
**/vendor/bundle/ruby/*/gems/strscan-*/ **/vendor/bundle/ruby/*/gems/strscan-*/
**/vendor/bundle/ruby/*/gems/syntax_tree-*/ **/vendor/bundle/ruby/*/gems/syntax_tree-*/
**/vendor/bundle/ruby/*/gems/tapioca-*/ **/vendor/bundle/ruby/*/gems/tapioca-*/

View File

@ -48,9 +48,7 @@ group :style, optional: true do
gem "rubocop-sorbet", require: false gem "rubocop-sorbet", require: false
end end
group :tests, optional: true do group :tests, optional: true do
gem "debug", require: false
gem "parallel_tests", require: false gem "parallel_tests", require: false
gem "psych", "< 5", require: false
gem "rspec", require: false gem "rspec", require: false
gem "rspec-github", require: false gem "rspec-github", require: false
gem "rspec_junit_formatter", require: false gem "rspec_junit_formatter", require: false

View File

@ -10,9 +10,6 @@ GEM
coderay (1.1.3) coderay (1.1.3)
commander (4.6.0) commander (4.6.0)
highline (~> 2.0.0) highline (~> 2.0.0)
debug (1.9.2)
irb (~> 1.10)
reline (>= 0.3.8)
diff-lcs (1.5.1) diff-lcs (1.5.1)
docile (1.4.0) docile (1.4.0)
elftools (1.3.0) elftools (1.3.0)
@ -20,10 +17,6 @@ GEM
erubi (1.12.0) erubi (1.12.0)
hana (1.3.7) hana (1.3.7)
highline (2.0.3) highline (2.0.3)
io-console (0.7.2)
irb (1.12.0)
rdoc
reline (>= 0.4.2)
json (2.7.2) json (2.7.2)
json_schemer (2.1.1) json_schemer (2.1.1)
hana (~> 1.3) hana (~> 1.3)
@ -54,19 +47,13 @@ GEM
pry (0.14.2) pry (0.14.2)
coderay (~> 1.1) coderay (~> 1.1)
method_source (~> 1.0) method_source (~> 1.0)
psych (4.0.6)
stringio
public_suffix (5.0.5) public_suffix (5.0.5)
racc (1.7.3) racc (1.7.3)
rainbow (3.1.1) rainbow (3.1.1)
rbi (0.1.10) rbi (0.1.10)
prism (>= 0.18.0, < 0.25) prism (>= 0.18.0, < 0.25)
sorbet-runtime (>= 0.5.9204) sorbet-runtime (>= 0.5.9204)
rdoc (6.6.3.1)
psych (>= 4.0.0)
regexp_parser (2.9.0) regexp_parser (2.9.0)
reline (0.5.0)
io-console (~> 0.5)
rexml (3.2.6) rexml (3.2.6)
rspec (3.13.0) rspec (3.13.0)
rspec-core (~> 3.13.0) rspec-core (~> 3.13.0)
@ -149,7 +136,6 @@ GEM
sorbet-static-and-runtime (>= 0.5.10187) sorbet-static-and-runtime (>= 0.5.10187)
thor (>= 0.19.2) thor (>= 0.19.2)
stackprof (0.2.26) stackprof (0.2.26)
stringio (3.1.0)
tapioca (0.13.3) tapioca (0.13.3)
bundler (>= 2.2.25) bundler (>= 2.2.25)
netrc (>= 0.11.0) netrc (>= 0.11.0)
@ -180,7 +166,6 @@ PLATFORMS
DEPENDENCIES DEPENDENCIES
addressable addressable
bootsnap bootsnap
debug
json_schemer json_schemer
kramdown kramdown
method_source method_source
@ -190,7 +175,6 @@ DEPENDENCIES
patchelf patchelf
plist plist
pry pry
psych (< 5)
rexml rexml
rspec rspec
rspec-github rspec-github

View File

@ -45,6 +45,8 @@ module Homebrew
# Given we might be testing various commands, we probably want everything (except sorbet-static) # Given we might be testing various commands, we probably want everything (except sorbet-static)
Homebrew.install_bundler_gems!(groups: Homebrew.valid_gem_groups - ["sorbet"]) Homebrew.install_bundler_gems!(groups: Homebrew.valid_gem_groups - ["sorbet"])
require "debug" if args.debug?
HOMEBREW_LIBRARY_PATH.cd do HOMEBREW_LIBRARY_PATH.cd do
setup_environment! setup_environment!

View File

@ -8,21 +8,15 @@ gem:
# These aren't needed: # These aren't needed:
- coderay - coderay
- commander - commander
- debug
- diff-lcs - diff-lcs
- docile - docile
- hana - hana
- highline - highline
- io-console
- irb
- language_server-protocol - language_server-protocol
- netrc - netrc
- parallel - parallel
- psych
- public_suffix - public_suffix
- racc - racc
- rdoc
- reline
- rexml - rexml
- rspec-github - rspec-github
- rspec-mocks - rspec-mocks
@ -39,7 +33,6 @@ gem:
- ruby-prof - ruby-prof
- simplecov_json_formatter - simplecov_json_formatter
- simpleidn - simpleidn
- stringio
- unf - unf
- unf_ext - unf_ext
- unicode-display_width - unicode-display_width

View File

@ -39,6 +39,12 @@ if !gems_vendored && !ENV["HOMEBREW_SKIP_INITIAL_GEM_INSTALL"]
ENV["HOMEBREW_SKIP_INITIAL_GEM_INSTALL"] = "1" ENV["HOMEBREW_SKIP_INITIAL_GEM_INSTALL"] = "1"
end end
if Pathname.new(RbConfig.ruby).to_s.include?("/vendor/portable-ruby/")
prefix = RbConfig::CONFIG["rubylibprefix"]
ruby_version = RbConfig::CONFIG["ruby_version"]
$LOAD_PATH.unshift "#{prefix}/gems/#{ruby_version}/gems/debug-1.6.3/lib"
end
unless $LOAD_PATH.include?(HOMEBREW_LIBRARY_PATH.to_s) unless $LOAD_PATH.include?(HOMEBREW_LIBRARY_PATH.to_s)
# Insert the path after any existing Homebrew paths (e.g. those inserted by tests and parent processes) # Insert the path after any existing Homebrew paths (e.g. those inserted by tests and parent processes)
last_homebrew_path_idx = $LOAD_PATH.rindex do |path| last_homebrew_path_idx = $LOAD_PATH.rindex do |path|

View File

@ -69,6 +69,8 @@ RSpec.describe Migrator do
tab.source["tap"] = "homebrew/core" tab.source["tap"] = "homebrew/core"
tab.write tab.write
binding.b
expect do expect do
described_class.new(new_formula, "oldname") described_class.new(new_formula, "oldname")
end.to raise_error(Migrator::MigratorDifferentTapsError) end.to raise_error(Migrator::MigratorDifferentTapsError)

View File

@ -29,7 +29,6 @@ require "rspec/retry"
require "rspec/sorbet" require "rspec/sorbet"
require "rubocop/rspec/support" require "rubocop/rspec/support"
require "find" require "find"
require "debug"
require "timeout" require "timeout"
$LOAD_PATH.unshift(File.expand_path("#{ENV.fetch("HOMEBREW_LIBRARY")}/Homebrew/test/support/lib")) $LOAD_PATH.unshift(File.expand_path("#{ENV.fetch("HOMEBREW_LIBRARY")}/Homebrew/test/support/lib"))

View File

@ -38,17 +38,6 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/coderay-1.1.3/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/coderay-1.1.3/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/highline-2.0.3/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/highline-2.0.3/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/commander-4.6.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/commander-4.6.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/stringio-3.1.0")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/stringio-3.1.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/psych-4.0.6")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/psych-4.0.6/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rdoc-6.6.3.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/io-console-0.7.2")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/io-console-0.7.2/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/reline-0.5.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/irb-1.12.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/debug-1.9.2")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/debug-1.9.2/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/diff-lcs-1.5.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/diff-lcs-1.5.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/docile-1.4.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/docile-1.4.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/elftools-1.3.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/elftools-1.3.0/lib")

View File

@ -1467,7 +1467,7 @@ __fish_brew_complete_arg 'test' -a '(__fish_brew_suggest_formulae_installed)'
__fish_brew_complete_cmd 'tests' 'Run Homebrew\'s unit and integration tests' __fish_brew_complete_cmd 'tests' 'Run Homebrew\'s unit and integration tests'
__fish_brew_complete_arg 'tests' -l changed -d 'Only runs tests on files that were changed from the master branch' __fish_brew_complete_arg 'tests' -l changed -d 'Only runs tests on files that were changed from the master branch'
__fish_brew_complete_arg 'tests' -l coverage -d 'Generate code coverage reports' __fish_brew_complete_arg 'tests' -l coverage -d 'Generate code coverage reports'
__fish_brew_complete_arg 'tests' -l debug -d 'Display any debugging information' __fish_brew_complete_arg 'tests' -l debug -d 'Enable debugging using ruby/debug, or surface the standard `odebug` output'
__fish_brew_complete_arg 'tests' -l fail-fast -d 'Exit early on the first failing test' __fish_brew_complete_arg 'tests' -l fail-fast -d 'Exit early on the first failing test'
__fish_brew_complete_arg 'tests' -l generic -d 'Run only OS-agnostic tests' __fish_brew_complete_arg 'tests' -l generic -d 'Run only OS-agnostic tests'
__fish_brew_complete_arg 'tests' -l help -d 'Show this message' __fish_brew_complete_arg 'tests' -l help -d 'Show this message'

View File

@ -1817,7 +1817,7 @@ _brew_tests() {
_arguments \ _arguments \
'(--only)--changed[Only runs tests on files that were changed from the master branch]' \ '(--only)--changed[Only runs tests on files that were changed from the master branch]' \
'--coverage[Generate code coverage reports]' \ '--coverage[Generate code coverage reports]' \
'--debug[Display any debugging information]' \ '--debug[Enable debugging using ruby/debug, or surface the standard `odebug` output]' \
'--fail-fast[Exit early on the first failing test]' \ '--fail-fast[Exit early on the first failing test]' \
'--generic[Run only OS-agnostic tests]' \ '--generic[Run only OS-agnostic tests]' \
'--help[Show this message]' \ '--help[Show this message]' \

View File

@ -2650,6 +2650,10 @@ Run Homebrew's unit and integration tests.
: Include tests that use the GitHub API and tests that use any of the taps for : Include tests that use the GitHub API and tests that use any of the taps for
official external commands. official external commands.
`--debug`
: Enable debugging using ruby/debug, or surface the standard `odebug` output.
`--changed` `--changed`
: Only runs tests on files that were changed from the master branch. : Only runs tests on files that were changed from the master branch.

View File

@ -1687,6 +1687,9 @@ Run only OS\-agnostic tests\.
\fB\-\-online\fP \fB\-\-online\fP
Include tests that use the GitHub API and tests that use any of the taps for official external commands\. Include tests that use the GitHub API and tests that use any of the taps for official external commands\.
.TP .TP
\fB\-\-debug\fP
Enable debugging using ruby/debug, or surface the standard \fBodebug\fP output\.
.TP
\fB\-\-changed\fP \fB\-\-changed\fP
Only runs tests on files that were changed from the master branch\. Only runs tests on files that were changed from the master branch\.
.TP .TP