14268 Commits

Author SHA1 Message Date
David Rodríguez
c5cdabc14a [rubygems/rubygems] Don't try to skip requirements to prevent downgrades
These don't really hurt, so I'm not sure why I introduced it.

https://github.com/rubygems/rubygems/commit/85b6b405ac
2025-02-18 12:12:52 +09:00
David Rodríguez
c77354157f [rubygems/rubygems] Fix locked gems being upgraded when locked dependencies are incorrect
Resolver had internal logic to prioritize locked versions when sorting
versions, however part of it was not being actually hit because of how
unlocking worked in the resolver: a package was allow to be unlocked
when that was explicit requested or when the list of unlocks was empty.
That did not make a lot of sense and other cases were working because
the explicit list of unlocks was getting "artificially filled".

Now we consider a package unlocked when explicitly requested (`bundle
update <package>`), or when everything is being unlocked (`bundle
install` with no lockfile or `bundle update`).

This makes things simpler and gets the edge case added as a test case
working as expected.

https://github.com/rubygems/rubygems/commit/b8e55087f0
2025-02-18 12:12:51 +09:00
David Rodríguez
592eb02d6c [rubygems/rubygems] Refactor finding dependency changes
https://github.com/rubygems/rubygems/commit/d8c4754d8f
2025-02-18 12:12:49 +09:00
David Rodríguez
533e894cb5 [rubygems/rubygems] Improve processing and categorizing unlock information
https://github.com/rubygems/rubygems/commit/516430c3ec
2025-02-18 12:12:48 +09:00
David Rodríguez
c8f4df4ae9 [rubygems/rubygems] Make Bundler never instantiate development dependencies
Bundler does not really have a concept of "development dependencies",
like RubyGems has. Bundler has the more generic concept of "groups".

Under the hood, the `gemspec` DSL will put gemspec development
dependencies under a `:development` Gemfile group, but there's no reason
to instantiate these as development dependencies, they are regular
runtime dependencies, except that they belong in a group named
:development.

By never instantiating development dependencies at all, we avoid having
to introduce hacks to "undo" the type Bundler does not know about, and I
also think the error messages read better.

https://github.com/rubygems/rubygems/commit/9a06fa5bda
2025-02-17 11:04:39 +09:00
David Rodríguez
a55a2fc6e8
[rubygems/rubygems] Reset existing specs when using Bundler::SpecSet#[]=
We have a flaky failure where to equal Bundler specs sneak into the same
SpecSet. This seems like a vector where that could happen so trying this
in case it fixes the flaky.

https://github.com/rubygems/rubygems/commit/a33aeb3c4d
2025-02-14 16:13:27 +09:00
David Rodríguez
a64c697b22
[rubygems/rubygems] Refactor SpecSet to not need reset
https://github.com/rubygems/rubygems/commit/55af558124
2025-02-14 16:13:27 +09:00
David Rodríguez
061d8133ce
[rubygems/rubygems] Simplify hacks to integrate with RubyGems
https://github.com/rubygems/rubygems/commit/33d91de732
2025-02-14 16:13:27 +09:00
David Rodríguez
c94cec27f7
[rubygems/rubygems] Simplify SpecSet#sorted
https://github.com/rubygems/rubygems/commit/a3f365bbaa
2025-02-14 16:13:27 +09:00
David Rodríguez
e59c90118e
[rubygems/rubygems] Raise error when lockfile is missing deps in frozen mode
And avoid installing any gems.

https://github.com/rubygems/rubygems/commit/c12700c7e4
2025-02-14 16:13:27 +09:00
johnnyshields
e11401f799
[rubygems/rubygems] Deprecate legacy windows platforms (mswin, mingw) in the Bundler DSL, in favor of using platform :windows
This commit is only deprecation and does not change/remove any actual functionality.

https://github.com/rubygems/rubygems/commit/0ca6dc3984
2025-02-14 16:13:27 +09:00
David Rodríguez
181cab566c
[rubygems/rubygems] Fix legacy windows platform values no longer working
https://github.com/rubygems/rubygems/commit/de8b3016db
2025-02-14 16:13:26 +09:00
Kevin Newton
127325a4ba [ruby/prism] No writing to numbered parameters
Fixes [Bug #21117]

https://github.com/ruby/prism/commit/19d4bab5a0
2025-02-13 20:04:02 +00:00
Nobuyoshi Nakada
4a67ef09cc
[Feature #21116] Extract RJIT as a third-party gem 2025-02-13 18:01:03 +09:00
David Rodríguez
ee03df26ba
[rubygems/rubygems] --prefer-local should resolve to latest version if no gems are available locally
Filtering out remote specs should only apply where there are locally
installed specs. Otherwise they should always be considered.

https://github.com/rubygems/rubygems/commit/118f8389a1
2025-02-13 09:37:51 +09:00
David Rodríguez
151b436c9d
[rubygems/rubygems] Fix incorrect error message in frozen mode
When Bundler refuses to install in frozen mode, sometimes it would
incorrectly claim that some dependencies have been added to the Gemfile
when that's not really the case. Fix that by making sure
`locked_dependencies` always has all locked dependencies, even when
unlocking,

Additionally, the suggestion to run `bundle install` is also confusing
when unlocking, since `bundle update` is what has been run. So skip that
part as well when unlocking.

https://github.com/rubygems/rubygems/commit/64d84ad7d8
2025-02-13 09:37:51 +09:00
David Rodríguez
d9267b4a71
[rubygems/rubygems] Fix type and gemfile not getting reported as invalid options
https://github.com/rubygems/rubygems/commit/5b6077a1e8
2025-02-13 09:37:51 +09:00
David Rodríguez
e7720ef8d7
[rubygems/rubygems] Materializing specs for vendor/cache should not be strict
Platforms specific gems not compatible with the current Ruby should not
make `bundle cache` fail and should not get removed from the cache since
they still may be useful in other rubies.

https://github.com/rubygems/rubygems/commit/717b43f565
2025-02-13 09:37:50 +09:00
David Rodríguez
5adbad731b
[rubygems/rubygems] Move logic to materialize gems for cache to a new method
And make the current `materialize_strictly` private.

https://github.com/rubygems/rubygems/commit/3fc2129147
2025-02-13 09:37:50 +09:00
David Rodríguez
06e3943c38
[rubygems/rubygems] Remove unnecessary source change
We materializing for installation, we already do this, and we
materializing for cache, it does not seem necessary.

https://github.com/rubygems/rubygems/commit/1a983c6cbc
2025-02-13 09:37:50 +09:00
David Rodríguez
bb764e42ba
[rubygems/rubygems] Extract some common materialization logic to a method
https://github.com/rubygems/rubygems/commit/32982fcd33
2025-02-13 09:37:50 +09:00
David Rodríguez
7ac29372ca
[rubygems/rubygems] Make LazySpecification#__materialize__ private
And rename it to something better.

https://github.com/rubygems/rubygems/commit/321174d1ad
2025-02-13 09:37:50 +09:00
David Rodríguez
135479a58d [rubygems/rubygems] Allocate strings from Requirement match only once
https://github.com/rubygems/rubygems/commit/c65b8644e6

Co-authored-by:  Samuel Giddins <segiddins@segiddins.me>
2025-02-10 09:27:18 +09:00
yuuji.yaginuma
dd1fe03b8a [rubygems/rubygems] Add irb to a Gemfile for a newly created gem
I think we need this to silence the following warning when running
`bin/console` with Ruby 3.4

```
./bin/console:10: warning: irb was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.5.0.
You can add irb to your Gemfile or gemspec to silence this warning.
```

https://github.com/rubygems/rubygems/commit/c46230c856
2025-02-06 15:58:01 +09:00
David Rodríguez
ac093f4350 [rubygems/rubygems] Auto-heal empty installation directory
https://github.com/rubygems/rubygems/commit/9720a9b980
2025-02-06 15:58:00 +09:00
David Rodríguez
78ef59acf7 [rubygems/rubygems] Refine messages about gem installations being missing
The previous wording was too specific, there may be situations when the
gem has actually never installed (so never deleted either).

https://github.com/rubygems/rubygems/commit/e4a0d71fbe
2025-02-06 15:57:59 +09:00
David Rodríguez
385dc5dc16 [rubygems/rubygems] Don't potentially load remote metadata when expanding dependencies
For installed specifications, we can ignore any constraints they may
have, since we know they match the current version of Ruby or otherwise
would not be installed.

For remote specifications, we already resolve optimistically without
metadata and retry force-fetching it if necessary.

If in the future we support resolving against a Ruby version different
that the one being run, we'll probably need to change this but now it's
unnecessary and saves some memory.

### Before

Total allocated: 262.99 MB (3177437 objects)
Total retained:  115.91 MB (1297821 objects)

### After

Total allocated: 259.89 MB (3134199 objects)
Total retained:  115.05 MB (1283779 objects)

https://github.com/rubygems/rubygems/commit/201c1863fc
2025-02-06 15:57:57 +09:00
David Rodríguez
a1716e2365 [rubygems/rubygems] Move expanding dependencies with metadata to specification classes
https://github.com/rubygems/rubygems/commit/7f921aa46e
2025-02-06 15:57:57 +09:00
David Rodríguez
24f5e3010f [rubygems/rubygems] Metadata dependencies can be Gem::Dependency instances
They use less memory that way.

When resolving from scratch a Gemfile including only `"gem "rails", "~>
8.0.1"`, I get the following results:

### Before

Total allocated: 265.06 MB (3186053 objects)
Total retained:  116.98 MB (1302280 objects)

### After

Total allocated: 262.99 MB (3177437 objects)
Total retained:  115.91 MB (1297821 objects)

https://github.com/rubygems/rubygems/commit/a4ef9c5f56
2025-02-06 15:57:56 +09:00
David Rodríguez
7fed6c887d [rubygems/rubygems] Remove unnecessary remapping of dependencies
Sometimes we'll resolve using bare `Gem::Dependency` instances rather
than `Bundler::Dependency` instances, which is fine, simpler, and saves
some memory.

When resolving from scratch a Gemfile including only `"gem "rails", "~>
8.0.1"`, I get the following results:

### Before

Total allocated: 277.48 MB (3384318 objects)
Total retained:  117.53 MB (1338657 objects)

### After

Total allocated: 265.06 MB (3186053 objects)
Total retained:  116.98 MB (1302280 objects)

https://github.com/rubygems/rubygems/commit/c6dc2966c5
2025-02-06 15:57:55 +09:00
David Rodríguez
4c0cf2deed [rubygems/rubygems] Make Bundler::Dependency more memory efficient
When resolving from scratch a Gemfile including only `"gem "rails", "~>
8.0.1"`, I get the following results:

### Before

Total allocated: 288.21 MB (3498515 objects)
Total retained:  119.10 MB (1357976 objects)

### After

Total allocated: 277.44 MB (3383182 objects)
Total retained:  117.55 MB (1338622 objects)

https://github.com/rubygems/rubygems/commit/2d3d6e5015
2025-02-06 15:57:55 +09:00
David Rodríguez
8e7883011a [rubygems/rubygems] Lazily parse dependencies in EndpointSpecification
Since not every dependency gets referenced.

When resolving from scratch a Gemfile including only `"gem "rails", "~>
8.0.1"`, I get the following results:

### Before

Total allocated: 295.01 MB (3624335 objects)
Total retained:  119.31 MB (1364474 objects)

### After
Total allocated: 288.21 MB (3498515 objects)
Total retained:  119.10 MB (1357976 objects)

https://github.com/rubygems/rubygems/commit/61eee39d81

Co-authored-by: Samuel Giddins <segiddins@segiddins.me>
2025-02-06 15:57:54 +09:00
David Rodríguez
c83370671b Improve bundled gems warning messages
Currently evenn if the require actually fails, they suggest that the
file was actually loaded, which is confusing. I reworded them to reduce
this confusion.
2025-02-06 13:07:55 +09:00
David Rodríguez
03a0c4e079 Rename "gem" to "name"
The name "gem" could be confused with RubyGems activation method.
2025-02-06 13:07:55 +09:00
David Rodríguez
433f4e30b3 Simplify bundled gems warnings implementation
Most of the stuff is not actually necessary.
2025-02-06 13:07:55 +09:00
David Rodríguez
68bb6ceeaf Remove unnecessary SINCE_FAST_PATH constant
If anything, I think this may be causing some false positives.
2025-02-06 13:07:55 +09:00
Edouard CHIN
c204cf7cb1 [rubygems/rubygems] Deprecate CurrentRuby#maglev? and other related maglev methods:
- Follow up to https://github.com/rubygems/rubygems/pull/8430#discussion_r1927239555.

  The maglev platform was not supported by Bundler, so calling
  `gem "foo", platforms: ["maglev"]` would raise an error.

  The helpers added in the `CurrentRuby` class were used at a time
  when maglev was supported (as explained in https://github.com/rubygems/rubygems/commit/45ec86e2e528).
  Support of maglev was most likely dropped at some point and the helpers
  in the `CurrentRuby` class were not deprecated/removed.

  We decided to deprecate them now.

https://github.com/rubygems/rubygems/commit/66388babf8
2025-02-05 12:48:44 +09:00
Hiroshi SHIBATA
470784cbd9 Expand stub-out scope of Fiddle.dlopen 2025-02-05 07:36:59 +09:00
Hiroshi SHIBATA
10d06b9a72 [ruby/resolv] Load win32/resolv with rake test
https://github.com/ruby/resolv/commit/3ecfce3626
2025-02-04 04:55:16 +00:00
Nikita Shilnikov
e8cf441485 [ruby/weakref] Add missing block parameter
A block is part of the Delegator's contract. Ruby 3.4 issues a warning if a block is passed but unused. This commit fixes the warning by adding a block to the argument list.

https://github.com/ruby/weakref/commit/9495ec9191
2025-02-03 01:58:50 +00:00
David Rodríguez
c0688c21fe [rubygems/rubygems] Raise a simpler error when RubyGems fails to activate a dependency
If you force uninstall a dependency but leave other gems depending on
it, those gems will fail to be activated.

In that case, RubyGems prints a rather complicated error:

```
$ rails --version
/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1413:in 'block in Gem::Specification#activate_dependencies': Could not find 'activesupport' (= 8.0.1) among 478 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=/Users/deivid/.local/share/gem/ruby/3.4.0:/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0' at: /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0/specifications/railties-8.0.1.gemspec, execute `gem env` for more information
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1399:in 'Array#each'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1399:in 'Gem::Specification#activate_dependencies'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1381:in 'Gem::Specification#activate'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:283:in 'block in Gem.activate_bin_path'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Thread::Mutex#synchronize'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Gem.activate_bin_path'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/bin/rails:25:in '<main>'
/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/dependency.rb:303:in 'Gem::Dependency#to_specs': Could not find 'activesupport' (= 8.0.1) - did find: [activesupport-7.1.3,activesupport-7.0.8.7] (Gem::MissingSpecVersionError)
Checked in 'GEM_PATH=/Users/deivid/.local/share/gem/ruby/3.4.0:/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0' , execute `gem env` for more information
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1411:in 'block in Gem::Specification#activate_dependencies'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1399:in 'Array#each'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1399:in 'Gem::Specification#activate_dependencies'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1381:in 'Gem::Specification#activate'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:283:in 'block in Gem.activate_bin_path'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Thread::Mutex#synchronize'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Gem.activate_bin_path'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/bin/rails:25:in '<main>'
```

With this commit, the error becomes a bit simpler to parse:

```
$ rails --version
/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1421:in 'block in Gem::Specification#activate_dependencies': Could not find 'activesupport' (= 8.0.1) among 478 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=/Users/deivid/.local/share/gem/ruby/3.4.0:/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0' at: /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0/specifications/railties-8.0.1.gemspec, execute `gem env` for more information
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1407:in 'Array#each'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1407:in 'Gem::Specification#activate_dependencies'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1389:in 'Gem::Specification#activate'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:283:in 'block in Gem.activate_bin_path'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Thread::Mutex#synchronize'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Gem.activate_bin_path'
	from /Users/deivid/.asdf/installs/ruby/3.4.1/bin/rails:25:in '<main>'
```

And also, we reduce exception based control flow in our code.

https://github.com/rubygems/rubygems/commit/7e48c49f2d
2025-02-03 10:05:34 +09:00
David Rodríguez
451d848a76
Stop generating binstubs for Bundler itself 2025-01-31 14:34:55 +09:00
David Rodríguez
56e2ef2468 [rubygems/rubygems] Fix bundle console unnecessarily trying to load IRB twice
https://github.com/rubygems/rubygems/commit/f9bf58573f
2025-01-31 14:34:29 +09:00
David Rodríguez
3cff46c521 [rubygems/rubygems] Remove unnecessary error handling
These gems always define their main namespace and I don't think that
will ever change.

https://github.com/rubygems/rubygems/commit/6663cbed53
2025-01-31 14:34:28 +09:00
Edouard CHIN
2ed30c9944 [rubygems/rubygems] Consolidate the platform into a single list:
- Similar change than https://github.com/rubygems/rubygems/commit/29a1be0008e6,
  keep a single source of truth where we store the platform.

  The only change worth highlighing is the platform "maglev".
  It was not part of the supported platform of dependencies,
  so calling `gem 'foo', plaftorm: 'maglev'` would not work.
  However, it was supposed to according to https://github.com/rubygems/rubygems/commit/45ec86e2e528.
  That's why it was possible to do `Bundler.current_ruby.maglev?` or
  `Bundler.current_ruby.maglev_30?`.

  I didn't change the current behaviour and maglev is not supported,
  though I kept the `*maglev` methods as I believe CurrentRuby is
  public API.

https://github.com/rubygems/rubygems/commit/29e219ebcf
2025-01-31 14:34:26 +09:00
Edouard CHIN
dc7c665105 [rubygems/rubygems] Consolidated the Ruby version list:
- We keep 2 list of supported ruby versions and each time a new ruby
  version is released we need to maintain both list. Forgetting
  to update one would prevent users from adding gem for a specific
  plaftorm (i.e. https://github.com/rubygems/rubygems/commit/7cd19d824d17 and https://github.com/rubygems/rubygems/commit/5462322f8f0c).

  Extracted the list from the Dependency class and moved it to the
  CurrentRuby class (which I believe was originally added for that
  reason).

https://github.com/rubygems/rubygems/commit/a91edd6c1f
2025-01-31 14:34:25 +09:00
Edouard CHIN
57fec1e85f [rubygems/rubygems] Add ruby_34 and ruby_35 as valid platform:
- Fix https://github.com/rubygems/rubygems/pull/8427
- Similar to https://github.com/rubygems/rubygems/commit/7cd19d824d17.
  Tweaked a bit the test supposed to prevent this error by checking
  whether the dep respond to these methods.

https://github.com/rubygems/rubygems/commit/62012eaeb6
2025-01-31 14:34:24 +09:00
Yusuke Endoh
e01b4ca1c8 [ruby/error_highlight] Ensure first_line and last_line are set
Fixes https://github.com/ruby/error_highlight/pull/58

https://github.com/ruby/error_highlight/commit/9ddc1f31a9
2025-01-29 08:51:42 +00:00
Nobuyoshi Nakada
53f0ebf938
Ignore vendor folder for documentation just once 2025-01-28 15:37:55 +09:00
Akshay Birajdar
b48febf27f [rubygems/rubygems] Remove respond_to? check for Thread#name=
Since bundler now requires 3.3.1, we no longer need to do respond_to?
check before setting thread name.

https://github.com/rubygems/rubygems/commit/bfc37fc7db
2025-01-28 15:31:58 +09:00