Fix RubyGems not able to require the right gem: #9246
+42
−3
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?
Fix #9238
This is an issue that bites gem maintainers from time to time, with the most recent one in minitest/minitest#1040 (comment)
The issue is summarized as follow:
LoadError.What is your fix for the problem, implemented in this PR?
Details
Now that we have two gems (old version of X and new gem Y) with the same path, RubyGems will detect that
feature.rbcan be loaded from the old version of X, but if the new version of X had already been loaded, then RubyGems will raise due to versions conflicting.Solution
I propose that RubyGems fallback to a spec that's not yet loaded. We try to find a spec by its path and filter it out in case a spec with the same name has already been loaded.
Its worth to note that RubyGems already has a
find_inactive_by_pathbut we can't use it. This method only checks if the spec object is active and doesn't look if other spec with the same name have been loaded. The new method we are introducing verifies this.Make sure the following tasks are checked