1694 Commits

Author SHA1 Message Date
Takuya Noguchi
3657700c40 [ruby/rubygems] Bundler: validate more options for add sub-command
Signed-off-by: Takuya Noguchi <takninnovationresearch@gmail.com>

https://github.com/ruby/rubygems/commit/6ca2e28680
2026-01-07 08:49:23 +00:00
neimadTL
8846799686 [ruby/rubygems] Update custom errors with Exception#full_message
The use of `Exception#full_message` makes more sense as it shows
the cause and the backstrace.

https://github.com/ruby/rubygems/commit/62a92c3f5e
2026-01-07 07:44:55 +00:00
eileencodes
e1087c1226 [ruby/rubygems] Fix dependency source bug in bundler
I stumbled across a bundler bug that had me scratching my head for
awhile, because I hadn't experienced it before.

In some cases when changing the source in a gemfile from a
`Source::Gemspec` to either a `Source::Path` or `Source::Git` only the
parent gem will have it's gem replaced and updated and the child
components will retain the original version. This only happens if the gem
version of the `Source::Gemspec` and `Source::Git` are the same. It also
requires another gem to share a dependency with the one being updated.

For example if I have the following gemfile:

```
gem "rails", "~> 8.1.1"
gem "propshaft"
```

Rails has a component called `actionpack` which `propshaft` depends on.

If I change `rails` to point at a git source (or path source), only the
path for `rails` gets updated:

```
gem "rails", github: "rails/rails", branch: "8-1-stable"
gem "propshaft"
```

Because `actionpack` is a dependency of `propshaft`, it will remain in
the rubygems source in the lock file WHILE the other gems are correctly
pointing to the git source.

Gemfile.lock:

```
GIT
  remote: https://github.com/rails/rails.git
  revision: https://github.com/ruby/rubygems/commit/9439f463e0ef
  branch: 8-1-stable
  specs:
    actioncable (8.1.1)
      ...
    actionmailbox (8.1.1)
      ...
    actionmailer (8.1.1)
      ...
    actiontext (8.1.1)
      ...
    activejob (8.1.1)
      ...
    activemodel (8.1.1)
      ...
    activerecord (8.1.1)
      ...
    activestorage (8.1.1)
      ...
    rails (8.1.1)
      ...
    railties (8.1.1)
      ...

GEM
  remote: https://rubygems.org/
  specs:
    action_text-trix (2.1.15)
      railties
    actionpack (8.1.1) <===== incorrectly left in Rubygems source
      ...
```

The gemfile will contain `actionpack` in the rubygems source, but will
be missing in the git source so the path will be incorrect. A bundle
show on Rails will point to the correct place:

```
$ bundle show rails
/Users/eileencodes/.gem/ruby/3.4.4/bundler/gems/rails-9439f463e0ef
```

but a bundle show on actionpack will be incorrect:

```
$ bundle show actionpack
/Users/eileencodes/.gem/ruby/3.4.4/gems/actionpack-8.1.1
```

This bug requires the following to reproduce:

1) A gem like Rails that contains components that are released as their
own standalone gem is added to the gemfile pointing to rubygems
2) A second gem is added that depends on one of the gems in the first
gem (like propshaft does on actionpack)
3) The Rails gem is updated to use a git source, pointing to the same
version that is being used by rubygems (ie 8.1.1)
4) `bundle` will only update the path for Rails component gems if no
other gem depends on it.

This incorrectly leaves Rails (or any gem like it) using two different
codepaths / gem source code.

https://github.com/ruby/rubygems/commit/dff76ba4f6
2026-01-07 07:30:26 +00:00
Schneems
ad6b85450d [ruby/rubygems] Retain current bundler version on bundle clean
Previously: In #9218 a reproduction is shared where running `bundle clean` using a binstub (`bin/bundle`) results in bundler removing itself. This results in Ruby falling back to its default bundler version. This behavior seems to be present for as long as there has been a default version of bundler (Ruby 2.6+).

Now: Bundler will explicitly add its current version number to the specs to be preserved. This prevents `bundle clean` from removing the current bundler version.

close https://github.com/ruby/rubygems/pull/9218

https://github.com/ruby/rubygems/commit/e3f0167ae4
2026-01-06 04:38:13 +00:00
Schneems
16bdfa1b2a [ruby/rubygems] Split logic to two lines
https://github.com/ruby/rubygems/commit/5a6eca4cf9
2026-01-06 04:38:12 +00:00
lolwut
3143543f95 [ruby/rubygems] Compare like values in find_bundler
The input to this method is not guaranteed to be a string, it could be a `Gem::Version` this normalizes the comparison.

https://github.com/ruby/rubygems/commit/1f43c7a988
2026-01-06 04:38:12 +00:00
Hiroshi SHIBATA
8c8561adbc [ruby/rubygems] Update vendored connection_pool to 2.5.5
https://github.com/ruby/rubygems/commit/4c1eb2b274
2026-01-05 07:22:10 +00:00
Hiroshi SHIBATA
89af235435 Added ruby_41? platform 2025-12-26 11:00:51 +09:00
Hiroshi SHIBATA
74becf1b61 Start to develop 4.1.0.dev 2025-12-26 11:00:51 +09:00
eileencodes
bdbe8d5015 [ruby/rubygems] Write gem files atomically
This change updates `write_binary` to use a new class,
`AtomicFileWriter.open` to write the gem's files. This implementation
is borrowed from Active Support's [`atomic_write`](https://github.com/rails/rails/blob/main/activesupport/lib/active_support/core_ext/file/atomic.rb).

Atomic write will write the files to a temporary file and then once
created, sets permissions and renames the file. If the file is corrupted
- ie on failed download, an error occurs, or for some other reason, the
real file will not be created. The changes made here make `verify_gz`
obsolete, we don't need to verify it if we have successfully created the
file atomically. If it exists, it is not corrupt. If it is corrupt, the
file won't exist on disk.

While writing tests for this functionality I replaced the
`RemoteFetcher` stub with `FakeFetcher` except for where we really do
need to overwrite the `RemoteFetcher`. The new test implementation is much
clearer on what it's trying to accomplish versus the prior test
implementation.

https://github.com/ruby/rubygems/commit/0cd4b54291
2025-12-26 11:00:51 +09:00
Hiroshi SHIBATA
1c3ef27191 Merge RubyGems 4.0.3 and Bundler 4.0.3 2025-12-23 16:10:04 +09:00
Hiroshi SHIBATA
3b66efda52 Bundle RubyGems 4.0.2 and Bundler 4.0.2 2025-12-17 12:12:34 +09:00
Edouard CHIN
9f593156b6 [ruby/rubygems] Pass down value of BUNDLE_JOBS to RubyGems before compiling:
- ### Problem

  Since https://github.com/ruby/rubygems/pull/9131, we are now
  compiling make rules simultaneously. The number of jobs
  is equal to the number of processors.
  This may be problematic for some users as they want to control
  this value.

  ### Solution

  The number of jobs passed to `make` will now be equal to the
  `BUNDLE_JOBS` value.

  ### Side note

  It's also worth to note that since Bundler installs gems in
  parallel, we may end up running multiple `make -j<JOB>` in parallel
  which would cause exhaust the number of processors we have.
  This problem can be fixed by implementing a GNU jobserver, which I
  plan to do. But I felt that this would be too much change in one PR.

https://github.com/ruby/rubygems/commit/d51995deb9
2025-12-16 04:21:49 +00:00
hituzi no sippo
f3b9509b52 [ruby/rubygems] Fix quote handling in mise format ruby version parsing
The previous regex didn't properly match quoted strings
it would capture the opening quote as part of the version
if quotes were mismatched.
This change properly parses double-quoted, single-quoted,
and unquoted version strings separately.

https://github.com/ruby/rubygems/commit/81e48c8185
2025-12-16 03:56:22 +00:00
hituzi no sippo
3b50f4ba41 [ruby/rubygems] Support single quotes in mise format ruby version
https://github.com/ruby/rubygems/commit/a7d7ab39dd
2025-12-16 03:56:21 +00:00
Hiroshi SHIBATA
060199910a [ruby/rubygems] Allow to show cli_help with bundler executable
https://github.com/ruby/rubygems/commit/a091e3fd10
2025-12-16 02:36:10 +00:00
Edouard CHIN
ff1b8ffa61 [ruby/rubygems] Tweak the Bundler's "X gems now installed message":
- Fix https://github.com/ruby/rubygems/pull/9188
- This message is a bit misleading because it always outputs one extra
  specs, which is Bundler itself.

  This is now fixed when the message is about to be output.

https://github.com/ruby/rubygems/commit/70b4e19506
2025-12-16 00:16:15 +00:00
Edouard CHIN
f88e797090 [ruby/rubygems] Allow bundle pristine to work for git gems in the same repo:
- Fix https://github.com/ruby/rubygems/pull/9186
- ### Problem

  Running `bundle pristine` in a Gemfile where there is many git gem
  pointing to the same repository will result in a error
  "Another git process seems to be running in this repository".

  ### Context

  This error is a regression since https://github.com/ruby/rubygems/commit/a555fd6ccd17
  where `bundle pristine` now runs in parallel which could lead
  to running simultaneous git operations in the same repository.

  ### Solution

  When Bundler pristine a git gem it does a `git reset --hard` without
  specifying a path.
  This means the whole repository will be reset. In this case, we can
  leverage that by just pristining one gem per unique git sources.
  This is also more efficient.

https://github.com/ruby/rubygems/commit/710ba514a8
2025-12-16 00:15:57 +00:00
eileencodes
58940377e6 [ruby/rubygems] Write gem files atomically
This change updates `write_binary` to use a new class,
`AtomicFileWriter.open` to write the gem's files. This implementation
is borrowed from Active Support's [`atomic_write`](https://github.com/rails/rails/blob/main/activesupport/lib/active_support/core_ext/file/atomic.rb).

Atomic write will write the files to a temporary file and then once
created, sets permissions and renames the file. If the file is corrupted
- ie on failed download, an error occurs, or for some other reason, the
real file will not be created. The changes made here make `verify_gz`
obsolete, we don't need to verify it if we have successfully created the
file atomically. If it exists, it is not corrupt. If it is corrupt, the
file won't exist on disk.

While writing tests for this functionality I replaced the
`RemoteFetcher` stub with `FakeFetcher` except for where we really do
need to overwrite the `RemoteFetcher`. The new test implementation is much
clearer on what it's trying to accomplish versus the prior test
implementation.

https://github.com/ruby/rubygems/commit/0cd4b54291
2025-12-15 01:15:06 +00:00
Hiroshi SHIBATA
278a93a1bb
This change didn't fix the original issue.
Revert "Use base: with Dir.glob for bundler.gemspec"

This reverts commit 87f0701b6106569a8486c9623dc6b0b32438355c.
2025-12-11 18:18:13 +09:00
Hiroshi SHIBATA
87f0701b61 Use base: with Dir.glob for bundler.gemspec 2025-12-11 17:57:14 +09:00
Hiroshi SHIBATA
875c4c7dfd [ruby/rubygems] Bump Bundler version to 4.0.1
(cherry picked from commit https://github.com/ruby/rubygems/commit/26c1db5a65a8)

https://github.com/ruby/rubygems/commit/bbb5b767d0
2025-12-09 12:09:52 +00:00
Edouard CHIN
12c16f9ded [ruby/rubygems] Fix Bundler removing executables after creating them
When running a fresh `bundle install` with gems that contains
executables, Bundler will generate binstubs but soon after will remove
them. This is a regression introduced in https://github.com/ruby/rubygems/commit/573ffad3ea4a.

This results in doing `bundle install && bundle exec foo` to raise an
error saying `foo` couldn't be found.

This issue only appears if `BUNDLE_CLEAN` is set.

At the end of the installation process, when Bundler has installed
gems and generated binstubs, it runs the cleanup.

1. It [detects](4f8aa3b40c/bundler/lib/bundler/runtime.rb (L182)) the executable for the current specs
2. Any existing executables not detected is then removed 4f8aa3b40c/bundler/lib/bundler/runtime.rb (L194).

The issue being that 1. now returns an empty array where as it should
return the executables of the gems from the current bundle.

The problem is in https://github.com/ruby/rubygems/commit/573ffad3ea4a where we
removed the `executables` method from the `EndpointSpecification`.
When Bundler reads the lockfile, it creates a `EndpointSpecification`
object for each spec. At this point, the EndpointSpecification doesn't
know about the `executables` of a gem. Once Bundler fetches the
`gemspec` from the remote, it swaps the the "spec" with the real one
and from here knows what executables the gem has.

Reintroduce the `executables` method and the `bindir` in the
EndpointSpecification class. From what I'm seeing, the removal
of those wasn't needed to resolve the issue where Bundler remembers
CLI flags. This is probably an oversight.

https://github.com/ruby/rubygems/commit/b47f6b0247
2025-12-09 02:01:59 +00:00
Benoit Daloze
19172d64eb [ruby/rubygems] Fix indentation of the info message for default_cli_command
* It looked like:
            In a future version of Bundler, running `bundle` without argument will no longer run `bundle install`.
            Instead, the `cli_help` command will be displayed. Please use `bundle install` explicitly for scripts like CI/CD.
            You can use the future behavior now with `bundle config set default_cli_command cli_help --global`,
            or you can continue to use the current behavior with `bundle config set default_cli_command install --global`.
            This message will be removed after a default_cli_command value is set.
  Bundler version 4.0.0 (2025-12-08 commit https://github.com/ruby/rubygems/commit/9b4819ae18)
* And now looks like:
  In a future version of Bundler, running `bundle` without argument will no longer run `bundle install`.
  Instead, the `cli_help` command will be displayed. Please use `bundle install` explicitly for scripts like CI/CD.
  You can use the future behavior now with `bundle config set default_cli_command cli_help --global`,
  or you can continue to use the current behavior with `bundle config set default_cli_command install --global`.
  This message will be removed after a default_cli_command value is set.

  Bundler version 4.0.0 (2025-12-08 commit https://github.com/ruby/rubygems/commit/9b4819ae18)

https://github.com/ruby/rubygems/commit/979dada8f3
2025-12-09 01:37:51 +00:00
Benoit Daloze
fab94ecd34 [ruby/rubygems] Fix the config suggestion in the warning for $ bundle
* `install_or_cli_help` does not exist for older Bundler like Bundler 2
  and so results in a confusing error on Bundler 2:
  ```
  $ bundle
  Could not find command "".
  ```
* See https://github.com/ruby/rubygems/pull/9136/files#r2592366837
* Merge the behavior of `install_or_cli_help` in `install`.

https://github.com/ruby/rubygems/commit/9b4819ae18
2025-12-09 01:37:50 +00:00
yoshoku
1de15815a8 [ruby/rubygems] Fix native extension loading in newgem template for RHEL-based systems
Add fallback to `require` when `require_relative` fails to load native
extensions. This addresses an issue on RHEL-based Linux distributions
where Ruby scripts and built native extension shared libraries are
installed in separate directories.

https://github.com/ruby/rubygems/commit/68599bd107
2025-12-08 07:03:32 +00:00
Edouard CHIN
932762f294 [ruby/rubygems] Increase connection pool to allow for up to 70% speed increase:
- ### TL;DR

  Bundler is heavily limited by the connection pool which manages a
  single connection. By increasing the number of connection, we can
  drastiscally speed up the installation process when many gems need
  to be downloaded and installed.

  ### Benchmark

  There are various factors that are hard to control such as
  compilation time and network speed but after dozens of tests I
  can consistently get aroud 70% speed increase when downloading and
  installing 472 gems, most having no native extensions (on purpose).

  ```
  # Before
  bundle install  28.60s user 12.70s system 179% cpu 23.014 total

  # After
  bundle install  30.09s user 15.90s system 281% cpu 16.317 total
  ```

  You can find on this gist how this was benchmarked and the Gemfile
  used https://gist.github.com/Edouard-chin/c8e39148c0cdf324dae827716fbe24a0

  ### Context

  A while ago in #869, Aaron introduced a connection pool which
  greatly improved Bundler speed. It was noted in the PR description
  that managing one connection was already good enough and it wasn't
  clear whether we needed more connections. Aaron also had the
  intuition that we may need to increase the pool for downloading
  gems and he was right.

  > We need to study how RubyGems uses connections and make a decision
  > based on request usage (e.g. only use one connection for many small
  > requests like bundler API, and maybe many connections for
  > downloading gems)

  When bundler downloads and installs gem in parallel 4f85e02fdd/bundler/lib/bundler/installer/parallel_installer.rb (L128)
  most threads have to wait for the only connection in the pool to be
  available which is not efficient.

  ### Solution

  This commit modifies the pool size for the fetcher that Bundler
  uses. RubyGems fetcher will continue to use a single connection.

  The bundler fetcher is used in 2 places.

  1. When downloading gems 4f85e02fdd/bundler/lib/bundler/source/rubygems.rb (L481-L484)
  2. When grabing the index (not the compact index) using the
    `bundle install --full-index` flag.
    4f85e02fdd/bundler/lib/bundler/fetcher/index.rb (L9)

  Having more connections in 2) is not any useful but tweaking the
  size based on where the fetcher is used is a bit tricky so I opted
  to modify it at the class level.
  I fiddle with the pool size and found that 5 seems to be the sweet
  spot at least for my environment.

https://github.com/ruby/rubygems/commit/6063fd9963
2025-12-04 06:47:46 +00:00
Hiroshi SHIBATA
d6107f4ae9 [ruby/rubygems] Bump Bundler version to 4.0.0
https://github.com/ruby/rubygems/commit/a55c485226
2025-12-03 02:42:31 +00:00
Jeremy Evans
456ba321a8 [ruby/rubygems] Make BUNDLE_LOCKFILE environment variable have precedence over lockfile method in Gemfile
It would be simpler to do `options[:lockfile] ||= ENV["BUNDLE_LOCKFILE"]`,
but that doesn't work as `options` is frozen.

Fixes https://github.com/ruby/rubygems/pull/9117

https://github.com/ruby/rubygems/commit/6e3603a0e9
2025-12-02 08:25:17 +00:00
Hiroshi SHIBATA
7df97983be [ruby/rubygems] Improve banner message for the default command.
Co-authored-by: Benoit Daloze <eregontp@gmail.com>

https://github.com/ruby/rubygems/commit/463488b439

Co-authored-by: Patrik Ragnarsson <patrik@starkast.net>
2025-12-02 03:39:58 +00:00
Hiroshi SHIBATA
a9d2a46d64 [ruby/rubygems] Add informational message when default_cli_command is unset.
https://github.com/ruby/rubygems/commit/9e44b5ebc4
2025-11-28 23:50:00 +00:00
Jean Boussier
69293f5255 [ruby/rubygems] Print help summary when the default command fail
As mentioned in https://github.com/ruby/rubygems/issues/9124,
the intent for changing the default command was to be more welcoming.

I think we can acheive that by attempting to install, but to print
that same help message if there is no Gemfile.

That should address both concerns.

https://github.com/ruby/rubygems/commit/f3f505c02a
2025-11-28 23:50:00 +00:00
Jean Boussier
7dae2a1f48 [ruby/rubygems] Restore install as default command
Fix: https://github.com/ruby/rubygems/issues/9124

This behavior is a deeply entrenched convention and changing it
will annoy lots of developers with unclear gains.

https://github.com/ruby/rubygems/commit/628e0ede46
2025-11-28 23:49:59 +00:00
Hiroshi SHIBATA
bb2e4d58cc [ruby/rubygems] Fixed checksums generation issue when no source is specified
https://github.com/ruby/rubygems/commit/bb4d791cb4
2025-11-28 22:50:49 +00:00
Hiroshi SHIBATA
ecdeb90fe9 [ruby/rubygems] Bump up to 4.0.0.beta2
https://github.com/ruby/rubygems/commit/b8529f48bf
2025-11-26 07:01:41 +00:00
Jeremy Evans
e920ee3289 [ruby/rubygems] Support bundle install --lockfile option
This allows for specifying the lockfile to read and write. It mirrors
the --gemfile option, and has higher priority than the lockfile
method in the Gemfile. It also mirrors the bundle lock --lockfile
option.

When the --lockfile option is used, it is applied twice. First, before
the Gemfile is read, to specify the lockfile to operate on, and again
after the Gemfile is read, so that if the Gemfile has a lockfile
method that overrides the defintion's lockfile, the --lockfile option
still has higher precedence.

https://github.com/ruby/rubygems/commit/17acdd4a89
2025-11-25 08:09:52 +00:00
Hiroshi SHIBATA
1d160ed059 Fixed warning for String comparison of Gem::Version 2025-11-21 15:49:14 +09:00
Philip Arndt
451c120994 [ruby/rubygems] Check for file existence before deletion from cache
(https://github.com/ruby/rubygems/pull/9095)

* Rescue when deleting a non-existent cached gem file

When a gem was in the cache, but another process deletes it first, this
delete command fails.

To work around this, I'm rescuing from Errno::ENOENT and swalling the
error. The file is gone, and we can move on.

* Apply suggestion from @kou

Co-authored-by: Sutou Kouhei <kou@cozmixng.org>

---------

https://github.com/ruby/rubygems/commit/b30bcbc648

Co-authored-by: Hiroshi SHIBATA <hsbt@ruby-lang.org>
Co-authored-by: Sutou Kouhei <kou@cozmixng.org>
2025-11-21 04:34:34 +00:00
sue445
9aa09b4620 [ruby/rubygems] Fixed RuboCop offense in Rakefile generated by bundle gem
```
Offenses:

Rakefile:18:1: C: [Correctable] Layout/EmptyLines: Extra blank line detected.

Diff:
@@ -11,4 +11,5 @@
   ext.lib_dir = "lib/test_gem"
 end

+
 task default: :compile

https://github.com/ruby/rubygems/commit/8c414729df
2025-11-21 03:13:59 +00:00
sue445
a26f823528 [ruby/rubygems] Add go_gem/rake_task for Go native extention gem skeleton
https://github.com/ruby/rubygems/commit/64f92d2da0
2025-11-21 03:13:59 +00:00
Hiroshi SHIBATA
29d8a50d26 [ruby/rubygems] Keep legacy windows platform, not removed them
https://github.com/ruby/rubygems/commit/f360af8e3b
2025-11-20 23:11:47 +00:00
Jeremy Evans
010b23a7cf [ruby/rubygems] Add support for BUNDLE_LOCKFILE environment variable
This specifies the lockfile location. This allows for easy support
of different lockfiles per Ruby version or platform.

https://github.com/ruby/rubygems/commit/b54d65bc0a

Co-authored-by: Sutou Kouhei <kou@cozmixng.org>
Co-authored-by: Colby Swandale <996377+colby-swandale@users.noreply.github.com>
2025-11-20 23:01:03 +00:00
Jeremy Evans
1562803e51 [ruby/rubygems] Add support for bundle install --no-lock
This allows for the same behavior as including `lockfile false`
in the Gemfile. This allows you to get the behavior without
modifying the Gemfile, which is useful if you do not control the
Gemfile.

This is similar to the --no-lock option already supported by
`gem install -g Gemfile`.

https://github.com/ruby/rubygems/commit/6c94623881

Co-authored-by: Colby Swandale <996377+colby-swandale@users.noreply.github.com>
2025-11-20 23:01:03 +00:00
Jeremy Evans
82d8d24e7c [ruby/rubygems] Add support for lockfile in Gemfile
This allows you to specify the lockfile to use. This is useful if
you want to use different lockfiles for different ruby versions or
platforms. You can also skip writing the lockfile by using a false
value.

https://github.com/ruby/rubygems/commit/2896aa3fc2

Co-authored-by: Colby Swandale <996377+colby-swandale@users.noreply.github.com>
2025-11-20 23:01:02 +00:00
Edouard CHIN
409c004aff [ruby/rubygems] Make the Bundler logger thread safe:
- The Logger is not thread safe when calling `with_level`.
  This now becomes problematic because we are using multiple
  threads during the resolution phase in order to fetch git gems.

https://github.com/ruby/rubygems/commit/380653ae74
2025-11-20 22:05:13 +00:00
Edouard CHIN
bd60600d00 [ruby/rubygems] Run git operations in parallel to speed things up:
- ### Problem

  When you have a Gemfile that contains git gems, each repository will
  be fetched one by one. This is extremelly slow.
  A simple Gemfile with 5 git gems (small repositories) can take up
  to 10 seconds just to fetch the repos.

  We can speed this up by running multiple git process and fetching
  repositories silmutaneously.

  ### Solution

  The repositories are fetched in Bundler when `Source::Git#specs` is
  called.
  The problem is that `source.specs` is called in various places
  depending on Gemfile.

  I think the issue is that calling `source.specs` feels like that
  as a "side effect" we are going to clone repositories. I believe
  that fetching repositories should be an explicit call.

  For instance:

  ```ruby
  source "https://rubygems.org"

  gem "foo", github: "foo/foo"

  # The repository foo will be fetched as a side effect to the call to `source.spec_names`
  # 6cc7d71dac/bundler/lib/bundler/source_map.rb (L21)
  ```

  ```ruby
  source "https://rubygems.org"

  gem "bar", source: "https://example.org"
  gem "foo", github: "foo/foo"

  # The repository foo will be fetched on a different codepath
  # 6cc7d71dac/bundler/lib/bundler/source/rubygems_aggregate.rb (L35)

  # That is because the gem "bar" has a source that doesn't have the `/dependencies` API
  # endpoint and therefore Bundler enters a different branch condition.
  ```

  I opted to add a self explanatory call to fetch the git source
  repositories just before we start the resolution, and *just*
  before any other calls to `source.specs` is performed.

https://github.com/ruby/rubygems/commit/f0ef526f23
2025-11-20 22:05:13 +00:00
Hiroshi SHIBATA
0653a01ada [ruby/rubygems] Bump up to 4.0.0.beta1
https://github.com/ruby/rubygems/commit/9be811c01a
2025-11-20 02:41:53 +00:00
Hiroshi SHIBATA
169d6c7cad [ruby/rubygems] Use method_defined?(:method, false)
https://github.com/ruby/rubygems/commit/6cc7d71dac
2025-11-19 07:43:24 +00:00
Edouard CHIN
3b9539176b [ruby/rubygems] Warn users that bundle now display the help:
- In 31d67ecc05
  we enforced the new behaviour where running `bundle` no longer
  installs gems but displays the help.
  Users now have a way to configure their preferred default command using
  the `BUNDLE_DEFAULT_CLI_COMMAND` flag.

  With the preview of Ruby 4.0 now being released, some people will
  start to see this new change.

  The problem is that the previous behaviour had existed for like an
  eternity and we didn't warn users about this change in advance.
  I'd like to provide a deprecation/warning cycle because this is
  confusing users already and this breaks various CI setup that now
  needs to be changed immediately.

https://github.com/ruby/rubygems/commit/e415480ac5
2025-11-19 01:37:57 +00:00
Cody Cutrer
83b0cfe1b5 [ruby/rubygems] Handle BUNDLER_VERSION being set to an empty string
This is useful, in case you're using Docker, and an upstream
Dockerfile sets BUNDLER_VERSION to something you don't want.
It's impossible to unset it... only override to be the empty
string.

https://github.com/ruby/rubygems/commit/ffa3eb9ac6
2025-11-19 01:27:25 +00:00