Fix fallback to the old index and installation from it not working #4213
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.
Creating tests for this was tricky 😅
What was the end-user or developer problem that led to this PR?
The problem is that after we upgraded rubygems to pull dependencies from the new API, this has created problems for people using custom sources, since most custom sources don't yet implement the new compact index API.
In particular, the new API not being implemented causes rubygems to fallback to the old full index, which made 2 bugs surface as client crashes.
What is your fix for the problem, implemented in this PR?
The first bug is the fallback to the old marshalled index not happening properly if the source url includes credentials. The fix for that is to make sure that uri comparison uses the original url before credential redaction.
The second bug, which surfaces after the first one is fixed, is that some old specs in the marshalled index have
required_rubygems_version
set to nil. Since the latest rubygems now (correctly) considers metadata during resolution, the check for this field was crashing since it wasn't expecting it to ever be nil.Make sure the following tasks are checked