Skip to content

[pull] master from ruby:master#1231

Merged
pull[bot] merged 16 commits into
turkdevops:masterfrom
ruby:master
Jul 21, 2026
Merged

[pull] master from ruby:master#1231
pull[bot] merged 16 commits into
turkdevops:masterfrom
ruby:master

Conversation

@pull

@pull pull Bot commented Jul 21, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

kou and others added 16 commits July 21, 2026 05:49
If we use out-of-source build and have `${BUILD_DIR}/run.gdb` (by
`make run.gdb`), `${SOURCE_DIR}/.gdbinit` is loaded twice because
`run.gdb` loads `${SOURCE_DIR}/.gdbinit`.

If we have `run.gdb`, we don't need `-x ${SOURCE_DIR}/.gdbinit`.

There is one more problem for `${BUILD_DIR}/run.gdb` and
`${SOURCE_DIR}/.gdbinit`. `source -s misc/gdb.py` in
`${SOURCE_DIR}/.gdbinit` is failed when we use out-of-source build and
`${BUILD_DIR}/run.gdb` because `${SOURCE_DIR}` isn't included in
search path of `source`. If we have `directory $(srcdir)` in
`${BUILD_DIR}/run.gdb`, `source -s misc/gdb.py` works in
`${SOURCE_DIR}/.gdbinit` that is loaded from `${BUILD_DIR}/run.gdb`.
Bumps the github-actions group with 2 updates in the / directory: [actions/checkout](https://github.com/actions/checkout) and [taiki-e/install-action](https://github.com/taiki-e/install-action).
Bumps the github-actions group with 1 update in the /.github/actions/setup/directories directory: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 7.0.0 to 7.0.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@9c091bb...3d3c42e)

Updates `taiki-e/install-action` from 2.83.4 to 2.84.0
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](taiki-e/install-action@07b4745...a6b2e2d)

Updates `actions/checkout` from 7.0.0 to 7.0.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@9c091bb...3d3c42e)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: taiki-e/install-action
  dependency-version: 2.84.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
The empty modules existed only as feature flags for gem_prelude to
require the gems at boot. Autoload entries serve the same flag role
and also load the gems on direct constant access. gem_prelude now
requires 'syntax_suggest' itself, which only loads core_ext, so that
the eager require does not trigger the autoload circularly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
[Feature #21951]

Defer loading these gems from boot to the first error display. They
only decorate Exception#detailed_message, so requiring them at boot is
unnecessary overhead. `ruby -e1` with user-installed gems drops from
114.3ms to 30.2ms on Apple M1 Pro, matching the --disable-* flags for
the three gems.

exc_detailed_message forces the autoload entries once on the first
call, only in the main Ractor, and then re-dispatches to pick up the
detailed_message decorators the gems prepend. When the first call
arrives through an already-prepended decorator, re-dispatching is
skipped to avoid decorating twice. The gems are loaded with the
C-level require so that displaying an error neither invokes nor
depends on Kernel#require monkeypatches.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The decoration gems are loaded lazily on the first error display, which
in a pre-forking server happens after fork in each child. That loads
their code outside copy-on-write shared memory and busts method caches
at runtime when they prepend Exception#detailed_message.

Process.warmup, called before the first fork by such servers, now loads
them eagerly so the prepended decorators land in shared memory and the
cache invalidation happens during boot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
require_decoration_gems is called while an exception is being displayed,
so $! holds that exception. rb_protect does not preserve errinfo across
the call, and the previous code cleared it to nil whenever a require
raised, losing the exception being shown. Save errinfo before the
requires and restore it afterward so $! is left untouched whether or not
a require fails.
The comment still described loading via a gem_prelude.rb
Exception#detailed_message hook, which no longer exists. error.c now
loads the gems on the first error, or eagerly via Process.warmup.
rb_require_string delegates requires from non-main Ractors to the
main Ractor via rb_ractor_require, so the main-Ractor guard here was
unnecessary. Drop it and claim the load with an atomic exchange,
because Ractors run in parallel and the plain bool flag was only safe
under that guard. did_you_mean already keeps its state Ractor-safe,
so suggestions now appear in non-main Ractors as well.

Suggested by John Hawthorn.
…ot as its gemspec

`gem update --system` wrote the new default bundler gemspec next to the
previous one, but extracted its executables under `Gem.default_dir`. On
rubies where `Gem.default_specifications_dir` lives under a different
root than `Gem.default_dir`, like Homebrew ruby, activating the default
bundler then computes an executable path that does not exist, breaking
the `bundle` binstub. Extract the executables and remove the previous
default gem under the same root as the gemspec instead.

ruby/rubygems#9685

ruby/rubygems@04d53913e4

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The default gemspec is already written to the default specifications
directory before building the gem, so `installer.write_default_spec`
just wrote the same file a second time. Drop the redundant call and let
the installer only extract and generate the executables.

ruby/rubygems@c69d5ce7c4
…ult dir

When a regular gem of the vendored bundler version was already
installed, its files were removed from the default gemspec's gems
directory instead of from default_dir. On rubies where those roots
differ, like Homebrew ruby, the regular gem files were left behind after
being promoted to the default gem. Remove them from default_dir, where
regular gems actually live.

ruby/rubygems@721bcb9691
CacheFile#append opened the temp file with mode "a", which on Windows is
a text-mode stream that rewrites every "\n" as "\r\n". The corruption
goes undetected because DigestIO hashes the logical bytes handed to
write, not the bytes the OS actually lands on disk, so verify passes and
the mangled file is committed.

The damage compounds on the next update: the extra carriage returns
shift file.size, so the ranged request restarts at the wrong offset and
the versions index no longer matches its expected digest, forcing a full
re-download every time. The info files keep failing their MD5 check
against the raw index bytes, so they are refetched on every resolve.

Open the append stream with "ab" so the appended range is written
verbatim, matching the binary "wb" used for full writes.

ruby/rubygems@9568d9600c
The spec calls Dir.mktmpdir in a let block, but neither bundler nor the
spec_helper loads tmpdir, so the example raised NoMethodError before
running. The sibling updater_spec already requires it explicitly.

ruby/rubygems@f9eb1c1b22
CI runs bundler specs with `--tag shard_<x>`, so a spec file that is not
listed in spec/support/shards.rb runs in no shard at all. Register the
new cache_file_spec.rb under shard_d as the file header instructs.

ruby/rubygems@537479a45a
THe downside is that we now always reserve one 8B reference for the
IMEMO/fields, even for structs that never have any ivars.

But it is an acceptable tradeoff given that ivars on structs aren't
rare.

Co-Authored-By: John Hawthorn <john@hawthorn.email>
@pull pull Bot locked and limited conversation to collaborators Jul 21, 2026
@pull pull Bot added the ⤵️ pull label Jul 21, 2026
@pull
pull Bot merged commit 40f105b into turkdevops:master Jul 21, 2026
1 of 3 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants