Conversation
print_indented unconditionally sorted table rows by gem name, discarding the group clustering that --groups had already computed, so --groups produced output identical to plain outdated (ruby#9333). Skip that re-sort when a --group/--groups option is active, since specs_for_outdated_check already sorts by name and group_by preserves that order within each group. Also fixes the outdated_spec.rb "--groups" test, which previously passed regardless of whether grouping worked because its expected output happened to match alphabetical-by-name ordering.
There was a problem hiding this comment.
Pull request overview
This PR fixes bundle outdated --groups so the output is actually grouped by Bundler group, instead of being re-sorted alphabetically by gem name at print time (which previously erased the grouping computed earlier).
Changes:
- Add an optional
sortparameter toprint_indentedto allow callers to skip row re-sorting. - When
--groups/--groupis active, print the gems table without re-sorting so group clustering is preserved. - Strengthen the existing
--groupsspec to fail more reliably by adding another outdated gem in the same non-default group.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| spec/commands/outdated_spec.rb | Updates the --groups expectation to assert true group clustering by introducing an additional gem in the same group. |
| lib/bundler/cli/outdated.rb | Skips the print-time sort when group-based output is requested, preserving the pre-grouped ordering. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Skipping the name sort for --group left the rows in the order of their group sets, so a group spread over several sets was listed out of order. Filtering the name-sorted list directly keeps that order and makes the sort in print_indented unnecessary. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The groups were joined in the order they were declared, so gems in `group :test, :development` and `group :development, :test` were listed in two separate sets. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Transitive dependencies have an empty group set, which sorted before every named set and put them at the top of the table. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
I added three commits on top of your branch. Skipping the name sort also affected |
Purpose
Update
bundle outdated --groupsto produce its table of output actually sorted by group.Analysis
print_indentedunconditionally sorted table rows by gem name, discarding the group clustering that --groups had already computed, so --groups produced output identical to plain outdated (#9333). Skip that re-sort when a --group/--groups option is active, since specs_for_outdated_check already sorts by name and group_by preserves that order within each group.What was the end-user or developer problem that led to this PR?
A (correct) observation in #9333 that
bundle outdated --groupswas not actually grouping at all.What is your fix for the problem, implemented in this PR?
sort = truesecond positional parameter toprint_indented!, which controls whether to sort its results before printingprint_gems_table, determine whether to sort based on theoptions_include_groupsattr, which is true if--groupsor--group foois supplied.Make sure the following tasks are checked