Skip to content

[pull] master from ruby:master - #1355

Merged
pull[bot] merged 15 commits into
turkdevops:masterfrom
ruby:master
Aug 28, 2026
Merged

[pull] master from ruby:master#1355
pull[bot] merged 15 commits into
turkdevops:masterfrom
ruby:master

Conversation

@pull

@pull pull Bot commented Aug 28, 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 : )

byroot and others added 15 commits August 27, 2026 21:07
If the two preceeding instructions are known not to be dependent
on the state of the stack, then we can eliminate the `swap` and inverse
the two previous instructions.

This mostly eliminate instruction in two cases:

```ruby
Object.new
```

```
0000 opt_getconstant_path                   <ic:0 Object>             (   1)[Li]
0002 putnil
0003 swap
0004 opt_new                                <calldata!mid:new, argc:0, ARGS_SIMPLE>, 11
```

And:

```ruby
{**@A, b: 2}
```

```
0000 getinstancevariable                    :@A, <is:0>               (   1)[Li]
0003 putspecialobject                       1
0005 swap
0006 putobject                              :b
0008 putobject                              2
0010 opt_send_without_block                 <calldata!mid:core#hash_merge_ptr, argc:3, ARGS_SIMPLE>
```

Co-Authored-By: John Hawthorn <john@hawthorn.email>
We cannot have YJIT and ZJIT enabled at the same time, so we can use a
single jit_payload pointer in iseq_constant_body to reduce the size by
8 bytes.
…ugin root

A path stored relative to the plugin root only means anything inside it,
so an entry that climbs out of it did not come from a plugin Bundler
installed there. Paths recorded as absolute are left alone, which is how
`bundle plugin install --path` and older index files record them.

An event left with no plugins once its own are gone goes unmerged rather
than empty, so it cannot overwrite one the other index file registered.

ruby/rubygems@6a310eae12

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… the root

The save side matched the root as a string prefix, so an absolute path
that starts with the root but climbs above it was written back relative,
and the filter above then dropped it on the next load. Asking the same
question both ways leaves it absolute and loadable.

ruby/rubygems@b20b941dd5

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Merge the unmerged dependency update at the previous merger.

ruby/io-console@e712668ca2
…n resolved

The parser removed in #9564 turned a `!` entry in the DEPENDENCIES
section into a `= <version>` requirement. Bundler's LockfileParser
records the pinned source on the dependency and leaves the requirement
at `>= 0`, so `gem install -g` could resolve a newer published version
over the locked GIT or PATH one. Keeping the version as each section is
read pins prereleases too, and lets a PATH section pin to the gemspec on
disk the way the old parser did.

ruby/rubygems@3fe9b33a55

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bundler::Source::Rubygems stores remotes in reverse of the lockfile
order, so reading them straight through flipped which remote a spec
downloads from when a GEM section lists more than one.

ruby/rubygems@da017b968f

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
`defined?(previous_root)` is true even when the assignment never ran, so
a failure before the root was saved reset Bundler's root to nil.

ruby/rubygems@b2177cd67d

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…gins

A PLUGIN SOURCE section sends Bundler::Plugin.from_lock looking for the
plugin that handles it, and finding one loads and runs that plugin's
`plugins.rb`. The plugin index is read from the lockfile directory, so a
repository could run code just by being installed from with
`gem install -g`. Nothing here can use a plugin source anyway.

ruby/rubygems@1b9f1e166c

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
`credential_store` was the only Bundler setting that read `off` as
disabled, while every other setting goes through `Settings#to_bool`,
whose false vocabulary has never had it. The disabled branch now
delegates to `#to_bool` so the two cannot drift again. The true list
stays because the setting is tri-state and the boolean spellings still
have to be told apart from a backend name.

ruby/rubygems@0244255e6a

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The two sides of one setting now disagree on `off`, so the list has to
say why it stays wider here. Nothing on the way in turns `off` into a
boolean, and nothing on this side shares the single vocabulary that
Bundler's boolean settings all run through.

ruby/rubygems@d12e41a382

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
They sit after `private`, which does not apply to constants, so both are
public API today. Nothing outside the file reads them, and the setting
has not shipped, so this is the last release where making them private
costs nothing.

ruby/rubygems@18c550a324

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…eans

Alternation binds looser than the anchors, so `/\Atrue|false\Z/` reads as
`(\Atrue)|(false\Z)` and quietly turned every gemrc string starting with
`true` or ending with `false` into the boolean false. `:credential_store:
truestore` disabled the store while `RUBYGEMS_CREDENTIAL_STORE=truestore`
returned the backend name. The neighbouring branches move to `\z` for the
same reason, since `\Z` also accepts a trailing newline and let `":foo\n"`
become a symbol that still carried it.

ruby/rubygems@3cfada30ba

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The option has been readable from gemrc since it was added, but the RDoc
list of valid gemrc options never gained a row for it.

ruby/rubygems@3521da48ae
@pull pull Bot locked and limited conversation to collaborators Aug 28, 2026
@pull pull Bot added the ⤵️ pull label Aug 28, 2026
@pull
pull Bot merged commit 888a9fe into turkdevops:master Aug 28, 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.

5 participants