Fix edge case resulting in a crash when using zeitwerk
inside a nested bundle exec
invocation
#4062
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What was the end-user or developer problem that led to this PR?
See #3270 for the realworld problem. It's a combination of using dependencies that monkeypatch
Kernel.require
, and using several levels of nestedbundle exec
s.When bundler's CLI is initialized, we check whether a custom
Gemfile
is configured, and in that case we invalidate the whole bundler environment so that the whole thing is reloaded using the newGemfile
. When we are inside a nestedbundle exec
, the original Gemfile is explicitly configured so that further subprocesses always use it, so we fall into this situation.The problem is that we're resetting too much, and that can cause dependencies that further decorate
Kernel.require
to lose their decorations.What is your fix for the problem, implemented in this PR?
The fix is to only reset what we really need to reset here, namely, the settings so that they are reloaded using the new
Gemfile
as a base.Fixes #3270.
Make sure he following tasks are checked