Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify nested gem activation exceptions #3450

Merged
merged 1 commit into from Mar 31, 2020

Conversation

deivid-rodriguez
Copy link
Member

@deivid-rodriguez deivid-rodriguez commented Mar 27, 2020

Description:

In #3445, I noticed after removing minitest's load rescue, that the activation error you get when you try to run the tests without having the right minitest version is really verbose, way too much than I would have expected. See:

$ rake
Traceback (most recent call last):
	11: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `<main>'
	10: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `select'
	 9: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:17:in `block in <main>'
	 8: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:91:in `require'
	 7: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:91:in `require'
	 6: from /home/deivid/Code/rubygems/test/rubygems/test_bundled_ca.rb:2:in `<top (required)>'
	 5: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:74:in `require'
	 4: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:74:in `require'
	 3: from /home/deivid/Code/rubygems/lib/rubygems/test_case.rb:14:in `<top (required)>'
	 2: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_gem.rb:62:in `gem'
	 1: from /home/deivid/Code/rubygems/lib/rubygems/dependency.rb:323:in `to_spec'
/home/deivid/Code/rubygems/lib/rubygems/dependency.rb:313:in `to_specs': Could not find 'minitest' (~> 5.13) - did find: [minitest-4.7.5] (Gem::MissingSpecVersionError)
Checked in 'GEM_PATH=/home/deivid/.gem/ruby/2.7.0:/home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0', execute `gem env` for more information
	12: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `<main>'
	11: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `select'
	10: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:17:in `block in <main>'
	 9: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:91:in `require'
	 8: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:91:in `require'
	 7: from /home/deivid/Code/rubygems/test/rubygems/test_bundled_ca.rb:2:in `<top (required)>'
	 6: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:155:in `require'
	 5: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:167:in `rescue in require'
	 4: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:167:in `require'
	 3: from /home/deivid/Code/rubygems/lib/rubygems/test_case.rb:14:in `<top (required)>'
	 2: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_gem.rb:62:in `gem'
	 1: from /home/deivid/Code/rubygems/lib/rubygems/dependency.rb:323:in `to_spec'
/home/deivid/Code/rubygems/lib/rubygems/dependency.rb:313:in `to_specs': Could not find 'minitest' (~> 5.13) - did find: [minitest-4.7.5] (Gem::MissingSpecVersionError)
Checked in 'GEM_PATH=/home/deivid/.gem/ruby/2.7.0:/home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0', execute `gem env` for more information
	12: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `<main>'
	11: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `select'
	10: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:17:in `block in <main>'
	 9: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:155:in `require'
	 8: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:167:in `rescue in require'
	 7: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:167:in `require'
	 6: from /home/deivid/Code/rubygems/test/rubygems/test_bundled_ca.rb:2:in `<top (required)>'
	 5: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:74:in `require'
	 4: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:74:in `require'
	 3: from /home/deivid/Code/rubygems/lib/rubygems/test_case.rb:14:in `<top (required)>'
	 2: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_gem.rb:62:in `gem'
	 1: from /home/deivid/Code/rubygems/lib/rubygems/dependency.rb:323:in `to_spec'
/home/deivid/Code/rubygems/lib/rubygems/dependency.rb:313:in `to_specs': Could not find 'minitest' (~> 5.13) - did find: [minitest-4.7.5] (Gem::MissingSpecVersionError)
Checked in 'GEM_PATH=/home/deivid/.gem/ruby/2.7.0:/home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0', execute `gem env` for more information
	13: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `<main>'
	12: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `select'
	11: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:17:in `block in <main>'
	10: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:155:in `require'
	 9: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:167:in `rescue in require'
	 8: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:167:in `require'
	 7: from /home/deivid/Code/rubygems/test/rubygems/test_bundled_ca.rb:2:in `<top (required)>'
	 6: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:155:in `require'
	 5: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:167:in `rescue in require'
	 4: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:167:in `require'
	 3: from /home/deivid/Code/rubygems/lib/rubygems/test_case.rb:14:in `<top (required)>'
	 2: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_gem.rb:62:in `gem'
	 1: from /home/deivid/Code/rubygems/lib/rubygems/dependency.rb:323:in `to_spec'
/home/deivid/Code/rubygems/lib/rubygems/dependency.rb:313:in `to_specs': Could not find 'minitest' (~> 5.13) - did find: [minitest-4.7.5] (Gem::MissingSpecVersionError)
Checked in 'GEM_PATH=/home/deivid/.gem/ruby/2.7.0:/home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0', execute `gem env` for more information
rake aborted!
Command failed with status (1)

Tasks: TOP => default => test
(See full trace by running task with --trace)

We get the same exception like... 4 times!!

So I decided to investigate why.

My conclusion is that this is a bug in our custom require.

I fixed it by removing the condition to retry the require and all tests (plus my regression test) still seem to pass. I also digged into history. It was introduced in c1fd10d with commit message saying "Fixed gem loading issue caused by dependencies not resolving.", but no further explanation of what the actual issue was nor any regression tests or anything. So... 🤷‍♂️.

I also made some experiments while trying to understand our full custom require, but couldn't find anything that this could break.

I plan to dig a bit more tomorrow, but I wanted to check with other devs and CI too.

Tasks:

  • Describe the problem / feature
  • Write tests
  • Write code to solve the problem
  • Get code review from coworkers / friends

I will abide by the code of conduct.

@deivid-rodriguez
Copy link
Member Author

After my fix, the output is way better:

$ rake
Traceback (most recent call last):
	11: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `<main>'
	10: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:5:in `select'
	 9: from /home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb:17:in `block in <main>'
	 8: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:91:in `require'
	 7: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:91:in `require'
	 6: from /home/deivid/Code/rubygems/test/rubygems/test_bundled_ca.rb:2:in `<top (required)>'
	 5: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:74:in `require'
	 4: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_require.rb:74:in `require'
	 3: from /home/deivid/Code/rubygems/lib/rubygems/test_case.rb:14:in `<top (required)>'
	 2: from /home/deivid/Code/rubygems/lib/rubygems/core_ext/kernel_gem.rb:62:in `gem'
	 1: from /home/deivid/Code/rubygems/lib/rubygems/dependency.rb:323:in `to_spec'
/home/deivid/Code/rubygems/lib/rubygems/dependency.rb:313:in `to_specs': Could not find 'minitest' (~> 5.0) - did find: [minitest-4.7.5] (Gem::MissingSpecVersionError)
Checked in 'GEM_PATH=/home/deivid/.gem/ruby/2.7.0:/home/deivid/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0', execute `gem env` for more information
rake aborted!
Command failed with status (1)

Tasks: TOP => default => test
(See full trace by running task with --trace)

@deivid-rodriguez
Copy link
Member Author

I gave this some more thought but could not find something it would break. So since it's fixing an issue and making the code simpler, it's going in.

@deivid-rodriguez deivid-rodriguez merged commit 18c579e into master Mar 31, 2020
@deivid-rodriguez deivid-rodriguez deleted the simplify_nested_exceptions branch March 31, 2020 16:21
hsbt pushed a commit that referenced this pull request Jan 25, 2021
Simplify nested gem activation exceptions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants