Reuse RubyGems' vendored tsort in Bundler#9647
Merged
Merged
Conversation
Bundler's required_rubygems_version (>= 3.4.1) always ships Gem::TSort, vendored into RubyGems since 3.4.0, so the duplicate Bundler::TSort copy is unnecessary. Delegate to rubygems/vendored_tsort and switch SpecSet to include Gem::TSort. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Bundler vendored its own copy of tsort, which is byte-identical to the copy RubyGems already vendors apart from the namespace. Bundler's required_rubygems_version is >= 3.4.1 and RubyGems has vendored Gem::TSort since 3.4.0, so every supported host already ships it. The duplicate is unnecessary.
This drops lib/bundler/vendor/tsort and points the shim at rubygems/vendored_tsort with a stdlib fallback, matching how vendored_timeout and vendored_net_http already delegate. SpecSet now includes Gem::TSort and rescues Gem::TSort::Cyclic. Unlike securerandom and uri, no Bundler-side fallback copy is kept because the host is guaranteed to have it.
This is the first vendor deduplication step toward unifying the RubyGems and Bundler vendored libraries under the Gem:: namespace.