rubygems-update 4.0.4 → 4.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/bundler/CHANGELOG.md +22 -0
  4. data/bundler/lib/bundler/build_metadata.rb +2 -2
  5. data/bundler/lib/bundler/definition.rb +1 -1
  6. data/bundler/lib/bundler/fetcher/downloader.rb +0 -1
  7. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  8. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  9. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  10. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  11. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  12. data/bundler/lib/bundler/man/bundle-config.1 +18 -2
  13. data/bundler/lib/bundler/man/bundle-config.1.ronn +15 -1
  14. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  15. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  16. data/bundler/lib/bundler/man/bundle-env.1 +1 -1
  17. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  18. data/bundler/lib/bundler/man/bundle-fund.1 +1 -1
  19. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  20. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  21. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  22. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  23. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  24. data/bundler/lib/bundler/man/bundle-issue.1 +1 -1
  25. data/bundler/lib/bundler/man/bundle-licenses.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  29. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle.1 +1 -1
  38. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  39. data/bundler/lib/bundler/source/git/git_proxy.rb +1 -1
  40. data/bundler/lib/bundler/version.rb +1 -1
  41. data/lib/rubygems/bundler_version_finder.rb +46 -27
  42. data/lib/rubygems/commands/pristine_command.rb +4 -0
  43. data/lib/rubygems/ext/builder.rb +0 -5
  44. data/lib/rubygems/remote_fetcher.rb +1 -1
  45. data/lib/rubygems/specification.rb +9 -0
  46. data/lib/rubygems/specification_policy.rb +8 -0
  47. data/lib/rubygems/specification_record.rb +13 -0
  48. data/lib/rubygems/vendor/resolv/lib/resolv.rb +30 -14
  49. data/lib/rubygems/version.rb +3 -2
  50. data/lib/rubygems.rb +5 -4
  51. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f46bbce4276140cd482c5f57e651c9e1b5093d0d0d1fa80305a62dd015f13824
4
- data.tar.gz: ed7311da71b209962ca244fa6b1767ddaf556bb2572b3327825b67e7d68d6dde
3
+ metadata.gz: 31e2118baf4f86a82f4be2262ed95ba157c3a8658ba723b1adfa5470a69d4dd3
4
+ data.tar.gz: b352f65e3933433c38e4b35f21b0360cbe4051bf5bbf2b03f4e4e2a6eb06c6b8
5
5
  SHA512:
6
- metadata.gz: 3be7c427689e3863e1c3e2164758ea267129cdae4ceef0d288d1928bbc686bcb0bb40bf2658da5a6ee7d7699710b7e6d010ccdb731a320ccb8b3ef54b13ca868
7
- data.tar.gz: ea3b92eb905288d60b330d2a61efe848ef7ebf630ae3dfdafd9f371540854cd0d5f81b2e88eb596f534c6e09d35b154ffa99e0f7e3d57fe7caabe7137445bc1f
6
+ metadata.gz: 827fdf491c604e5895703d0c9354635c3f4b0b975b82f985ddef401a778914286fd44c78632e1ad650e88a5fb4655ebe8699246c0ae7b8b1bccb2ad4bf1d1f8c
7
+ data.tar.gz: 583355691ea29aba83275cff50c3bc5f9ffb5da060cf5d284d1bd1f38626b7ca7d6c6ff8422f237b813c2d5cbd1e4801bfff16972b1c0385977aedec28d676de
data/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.0.6 / 2026-02-05
4
+
5
+ ### Enhancements:
6
+
7
+ * Update vendored resolv to 0.7.0. Pull request
8
+ [#9298](https://github.com/ruby/rubygems/pull/9298) by hsbt
9
+ * Installs bundler 4.0.6 as a default gem.
10
+
11
+ ## 4.0.5 / 2026-01-29
12
+
13
+ ### Enhancements:
14
+
15
+ * Removed unused deprecate loading. Pull request
16
+ [#9266](https://github.com/ruby/rubygems/pull/9266) by hsbt
17
+ * Validate executable names for invalid characters. Pull request
18
+ [#9257](https://github.com/ruby/rubygems/pull/9257) by hsbt
19
+ * Installs bundler 4.0.5 as a default gem.
20
+
21
+ ### Bug fixes:
22
+
23
+ * Fix RubyGems not able to require the right gem:. Pull request
24
+ [#9246](https://github.com/ruby/rubygems/pull/9246) by Edouard-chin
25
+ * Remove special behavior for rake. Pull request
26
+ [#9245](https://github.com/ruby/rubygems/pull/9245) by JasonLunn
27
+
28
+ ### Documentation:
29
+
30
+ * Added another usage of pristine command. Pull request
31
+ [#9255](https://github.com/ruby/rubygems/pull/9255) by hsbt
32
+
3
33
  ## 4.0.4 / 2026-01-15
4
34
 
5
35
  ### Enhancements:
data/bundler/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.0.6 (2026-02-05)
4
+
5
+ ### Bug fixes:
6
+
7
+ - Fix gzip cache corruption when recovering from HTTP 416 responses [#9272](https://github.com/ruby/rubygems/pull/9272)
8
+ - Fallback git/path sources to default source [#9301](https://github.com/ruby/rubygems/pull/9301)
9
+ - Ensure revision is always re-resolved in `git_proxy.rb` [#9294](https://github.com/ruby/rubygems/pull/9294)
10
+
11
+ ### Documentation:
12
+
13
+ - Clarify local gem override docs to require git-sourced gems [#9305](https://github.com/ruby/rubygems/pull/9305)
14
+
15
+ ## 4.0.5 (2026-01-29)
16
+
17
+ ### Enhancements:
18
+
19
+ - Fix Bundler that re-exec $0 when a `version` is present in the config: [#9249](https://github.com/ruby/rubygems/pull/9249)
20
+
21
+ ### Bug fixes:
22
+
23
+ - Only use parent source with Git and Path sources [#9269](https://github.com/ruby/rubygems/pull/9269)
24
+
3
25
  ## 4.0.4 (2026-01-15)
4
26
 
5
27
  ### Enhancements:
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2026-01-15".freeze
8
- @git_commit_sha = "49e812f884".freeze
7
+ @built_at = "2026-02-05".freeze
8
+ @git_commit_sha = "0947d9cf5b".freeze
9
9
  # end ivars
10
10
 
11
11
  # A hash representation of the build metadata.
@@ -1077,7 +1077,7 @@ module Bundler
1077
1077
  end
1078
1078
  end
1079
1079
 
1080
- if parent_dep
1080
+ if parent_dep && parent_dep.source.is_a?(Source::Path) && parent_dep.source.specs[s]&.any?
1081
1081
  replacement_source = parent_dep.source
1082
1082
  else
1083
1083
  replacement_source = sources.get(lockfile_source)
@@ -54,7 +54,6 @@ module Bundler
54
54
  when Gem::Net::HTTPRequestedRangeNotSatisfiable
55
55
  new_headers = headers.dup
56
56
  new_headers.delete("Range")
57
- new_headers["Accept-Encoding"] = "gzip"
58
57
  fetch(uri, new_headers)
59
58
  when Gem::Net::HTTPRequestEntityTooLarge
60
59
  raise FallbackError, response.body
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-ADD" "1" "September 2025" ""
3
+ .TH "BUNDLE\-ADD" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-BINSTUBS" "1" "September 2025" ""
3
+ .TH "BUNDLE\-BINSTUBS" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CACHE" "1" "September 2025" ""
3
+ .TH "BUNDLE\-CACHE" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CHECK" "1" "September 2025" ""
3
+ .TH "BUNDLE\-CHECK" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CLEAN" "1" "September 2025" ""
3
+ .TH "BUNDLE\-CLEAN" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CONFIG" "1" "September 2025" ""
3
+ .TH "BUNDLE\-CONFIG" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-config\fR \- Set bundler configuration options
6
6
  .SH "SYNOPSIS"
@@ -248,7 +248,16 @@ bundle config set \-\-local local\.GEM_NAME /path/to/local/git/repository
248
248
  .fi
249
249
  .IP "" 0
250
250
  .P
251
- For example, in order to use a local Rack repository, a developer could call:
251
+ Important: This feature only works for gems that are specified with a git source in your Gemfile\. It does not work for gems installed from RubyGems or other sources\. The gem must be defined with \fBgit:\fR option pointing to a remote repository\.
252
+ .P
253
+ For example, if your Gemfile contains:
254
+ .IP "" 4
255
+ .nf
256
+ gem "rack", git: "https://github\.com/rack/rack\.git", branch: "main"
257
+ .fi
258
+ .IP "" 0
259
+ .P
260
+ Then you can use a local Rack repository by running:
252
261
  .IP "" 4
253
262
  .nf
254
263
  bundle config set \-\-local local\.rack ~/Work/git/rack
@@ -260,6 +269,13 @@ Now instead of checking out the remote git repository, the local override will b
260
269
  Bundler does many checks to ensure a developer won't work with invalid references\. Particularly, we force a developer to specify a branch in the \fBGemfile\fR in order to use this feature\. If the branch specified in the \fBGemfile\fR and the current branch in the local git repository do not match, Bundler will abort\. This ensures that a developer is always working against the correct branches, and prevents accidental locking to a different branch\.
261
270
  .P
262
271
  Finally, Bundler also ensures that the current revision in the \fBGemfile\.lock\fR exists in the local git repository\. By doing this, Bundler forces you to fetch the latest changes in the remotes\.
272
+ .P
273
+ If you need to temporarily use a local version of a gem that is normally installed from RubyGems (not from git), use a path source instead:
274
+ .IP "" 4
275
+ .nf
276
+ gem "rack", path: "~/Work/git/rack"
277
+ .fi
278
+ .IP "" 0
263
279
  .SH "MIRRORS OF GEM SOURCES"
264
280
  Bundler supports overriding gem sources with mirrors\. This allows you to configure rubygems\.org as the gem source in your Gemfile while still using your mirror to fetch gems\.
265
281
  .IP "" 4
@@ -295,7 +295,16 @@ up a local override:
295
295
 
296
296
  bundle config set --local local.GEM_NAME /path/to/local/git/repository
297
297
 
298
- For example, in order to use a local Rack repository, a developer could call:
298
+ Important: This feature only works for gems that are specified with a git
299
+ source in your Gemfile. It does not work for gems installed from RubyGems
300
+ or other sources. The gem must be defined with `git:` option pointing to a
301
+ remote repository.
302
+
303
+ For example, if your Gemfile contains:
304
+
305
+ gem "rack", git: "https://github.com/rack/rack.git", branch: "main"
306
+
307
+ Then you can use a local Rack repository by running:
299
308
 
300
309
  bundle config set --local local.rack ~/Work/git/rack
301
310
 
@@ -321,6 +330,11 @@ Finally, Bundler also ensures that the current revision in the
321
330
  `Gemfile.lock` exists in the local git repository. By doing this, Bundler
322
331
  forces you to fetch the latest changes in the remotes.
323
332
 
333
+ If you need to temporarily use a local version of a gem that is normally
334
+ installed from RubyGems (not from git), use a path source instead:
335
+
336
+ gem "rack", path: "~/Work/git/rack"
337
+
324
338
  ## MIRRORS OF GEM SOURCES
325
339
 
326
340
  Bundler supports overriding gem sources with mirrors. This allows you to
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CONSOLE" "1" "September 2025" ""
3
+ .TH "BUNDLE\-CONSOLE" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-console\fR \- Open an IRB session with the bundle pre\-loaded
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-DOCTOR" "1" "September 2025" ""
3
+ .TH "BUNDLE\-DOCTOR" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-doctor\fR \- Checks the bundle for common problems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-ENV" "1" "September 2025" ""
3
+ .TH "BUNDLE\-ENV" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-env\fR \- Print information about the environment Bundler is running under
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-EXEC" "1" "September 2025" ""
3
+ .TH "BUNDLE\-EXEC" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-exec\fR \- Execute a command in the context of the bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-FUND" "1" "September 2025" ""
3
+ .TH "BUNDLE\-FUND" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-fund\fR \- Lists information about gems seeking funding assistance
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-GEM" "1" "September 2025" ""
3
+ .TH "BUNDLE\-GEM" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-HELP" "1" "September 2025" ""
3
+ .TH "BUNDLE\-HELP" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-help\fR \- Displays detailed help for each subcommand
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-INFO" "1" "September 2025" ""
3
+ .TH "BUNDLE\-INFO" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-info\fR \- Show information for the given gem in your bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-INIT" "1" "September 2025" ""
3
+ .TH "BUNDLE\-INIT" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-init\fR \- Generates a Gemfile into the current working directory
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-INSTALL" "1" "September 2025" ""
3
+ .TH "BUNDLE\-INSTALL" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-ISSUE" "1" "September 2025" ""
3
+ .TH "BUNDLE\-ISSUE" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-issue\fR \- Get help reporting Bundler issues
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-LICENSES" "1" "September 2025" ""
3
+ .TH "BUNDLE\-LICENSES" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-licenses\fR \- Print the license of all gems in the bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-LIST" "1" "September 2025" ""
3
+ .TH "BUNDLE\-LIST" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-list\fR \- List all the gems in the bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-LOCK" "1" "September 2025" ""
3
+ .TH "BUNDLE\-LOCK" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-OPEN" "1" "September 2025" ""
3
+ .TH "BUNDLE\-OPEN" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-OUTDATED" "1" "September 2025" ""
3
+ .TH "BUNDLE\-OUTDATED" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-outdated\fR \- List installed gems with newer versions available
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-PLATFORM" "1" "September 2025" ""
3
+ .TH "BUNDLE\-PLATFORM" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-platform\fR \- Displays platform compatibility information
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-PLUGIN" "1" "September 2025" ""
3
+ .TH "BUNDLE\-PLUGIN" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-plugin\fR \- Manage Bundler plugins
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-PRISTINE" "1" "September 2025" ""
3
+ .TH "BUNDLE\-PRISTINE" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-REMOVE" "1" "September 2025" ""
3
+ .TH "BUNDLE\-REMOVE" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-remove\fR \- Removes gems from the Gemfile
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-SHOW" "1" "September 2025" ""
3
+ .TH "BUNDLE\-SHOW" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-UPDATE" "1" "September 2025" ""
3
+ .TH "BUNDLE\-UPDATE" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-update\fR \- Update your gems to the latest available versions
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-VERSION" "1" "September 2025" ""
3
+ .TH "BUNDLE\-VERSION" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-version\fR \- Prints Bundler version information
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE" "1" "September 2025" ""
3
+ .TH "BUNDLE" "1" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\fR \- Ruby Dependency Management
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "GEMFILE" "5" "September 2025" ""
3
+ .TH "GEMFILE" "5" "February 2026" ""
4
4
  .SH "NAME"
5
5
  \fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
6
6
  .SH "SYNOPSIS"
@@ -137,7 +137,7 @@ module Bundler
137
137
  git "fetch", "--force", "--quiet", *extra_fetch_args(ref), dir: destination
138
138
  end
139
139
 
140
- git "reset", "--hard", @revision, dir: destination
140
+ git "reset", "--hard", revision, dir: destination
141
141
 
142
142
  if submodules
143
143
  git_retry "submodule", "update", "--init", "--recursive", dir: destination
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "4.0.4".freeze
4
+ VERSION = "4.0.6".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= gem_version.segments.first
@@ -10,6 +10,8 @@ module Gem::BundlerVersionFinder
10
10
  v ||= bundle_update_bundler_version
11
11
  return if v == true
12
12
 
13
+ v ||= bundle_config_version
14
+
13
15
  v ||= lockfile_version
14
16
  return unless v
15
17
 
@@ -49,21 +51,7 @@ module Gem::BundlerVersionFinder
49
51
  private_class_method :lockfile_version
50
52
 
51
53
  def self.lockfile_contents
52
- gemfile = ENV["BUNDLE_GEMFILE"]
53
- gemfile = nil if gemfile&.empty?
54
-
55
- unless gemfile
56
- begin
57
- Gem::Util.traverse_parents(Dir.pwd) do |directory|
58
- next unless gemfile = Gem::GEM_DEP_FILES.find {|f| File.file?(f) }
59
-
60
- gemfile = File.join directory, gemfile
61
- break
62
- end
63
- rescue Errno::ENOENT
64
- return
65
- end
66
- end
54
+ gemfile = gemfile_path
67
55
 
68
56
  return unless gemfile
69
57
 
@@ -82,19 +70,24 @@ module Gem::BundlerVersionFinder
82
70
  private_class_method :lockfile_contents
83
71
 
84
72
  def self.bundle_config_version
85
- config_file = bundler_config_file
86
- return unless config_file && File.file?(config_file)
73
+ version = nil
87
74
 
88
- contents = File.read(config_file)
89
- contents =~ /^BUNDLE_VERSION:\s*["']?([^"'\s]+)["']?\s*$/
75
+ [bundler_local_config_file, bundler_global_config_file].each do |config_file|
76
+ next unless config_file && File.file?(config_file)
90
77
 
91
- $1
78
+ contents = File.read(config_file)
79
+ contents =~ /^BUNDLE_VERSION:\s*["']?([^"'\s]+)["']?\s*$/
80
+
81
+ version = $1
82
+ break if version
83
+ end
84
+
85
+ version
92
86
  end
93
87
  private_class_method :bundle_config_version
94
88
 
95
- def self.bundler_config_file
96
- # see Bundler::Settings#global_config_file and local_config_file
97
- # global
89
+ def self.bundler_global_config_file
90
+ # see Bundler::Settings#global_config_file
98
91
  if ENV["BUNDLE_CONFIG"] && !ENV["BUNDLE_CONFIG"].empty?
99
92
  ENV["BUNDLE_CONFIG"]
100
93
  elsif ENV["BUNDLE_USER_CONFIG"] && !ENV["BUNDLE_USER_CONFIG"].empty?
@@ -103,10 +96,36 @@ module Gem::BundlerVersionFinder
103
96
  ENV["BUNDLE_USER_HOME"] + "config"
104
97
  elsif Gem.user_home && !Gem.user_home.empty?
105
98
  Gem.user_home + ".bundle/config"
106
- else
107
- # local
108
- "config"
109
99
  end
110
100
  end
111
- private_class_method :bundler_config_file
101
+ private_class_method :bundler_global_config_file
102
+
103
+ def self.bundler_local_config_file
104
+ gemfile = gemfile_path
105
+ return unless gemfile
106
+
107
+ File.join(File.dirname(gemfile), ".bundle", "config")
108
+ end
109
+ private_class_method :bundler_local_config_file
110
+
111
+ def self.gemfile_path
112
+ gemfile = ENV["BUNDLE_GEMFILE"]
113
+ gemfile = nil if gemfile&.empty?
114
+
115
+ unless gemfile
116
+ begin
117
+ Gem::Util.traverse_parents(Dir.pwd) do |directory|
118
+ next unless gemfile = Gem::GEM_DEP_FILES.find {|f| File.file?(f) }
119
+
120
+ gemfile = File.join directory, gemfile
121
+ break
122
+ end
123
+ rescue Errno::ENOENT
124
+ return
125
+ end
126
+ end
127
+
128
+ gemfile
129
+ end
130
+ private_class_method :gemfile_path
112
131
  end
@@ -88,6 +88,10 @@ If you have made modifications to an installed gem, the pristine command
88
88
  will revert them. All extensions are rebuilt and all bin stubs for the gem
89
89
  are regenerated after checking for modifications.
90
90
 
91
+ Rebuilding extensions also refreshes C-extension gems against updated system
92
+ libraries (for example after OS or package upgrades) to avoid mismatches like
93
+ outdated library version warnings.
94
+
91
95
  If the cached gem cannot be found it will be downloaded.
92
96
 
93
97
  If --no-extensions is provided pristine will not attempt to restore a gem
@@ -163,8 +163,6 @@ class Gem::Ext::Builder
163
163
  @gem_dir = spec.full_gem_path
164
164
  @target_rbconfig = target_rbconfig
165
165
  @build_jobs = build_jobs
166
-
167
- @ran_rake = false
168
166
  end
169
167
 
170
168
  ##
@@ -177,7 +175,6 @@ class Gem::Ext::Builder
177
175
  when /configure/ then
178
176
  Gem::Ext::ConfigureBuilder
179
177
  when /rakefile/i, /mkrf_conf/i then
180
- @ran_rake = true
181
178
  Gem::Ext::RakeBuilder
182
179
  when /CMakeLists.txt/ then
183
180
  Gem::Ext::CmakeBuilder.new
@@ -250,8 +247,6 @@ EOF
250
247
  FileUtils.rm_f @spec.gem_build_complete_path
251
248
 
252
249
  @spec.extensions.each do |extension|
253
- break if @ran_rake
254
-
255
250
  build_extension extension, dest_path
256
251
  end
257
252
 
@@ -174,7 +174,7 @@ class Gem::RemoteFetcher
174
174
  end
175
175
 
176
176
  verbose "Using local gem #{local_gem_path}"
177
- when nil then # TODO: test for local overriding cache
177
+ when nil then
178
178
  source_path = if Gem.win_platform? && source_uri.scheme &&
179
179
  !source_uri.path.include?(":")
180
180
  "#{source_uri.scheme}:#{source_uri.path}"
@@ -959,6 +959,15 @@ class Gem::Specification < Gem::BasicSpecification
959
959
  specification_record.find_by_path(path)
960
960
  end
961
961
 
962
+ ##
963
+ # Return the best specification that contains the file matching +path+
964
+ # amongst the specs that are not loaded. This method is different than
965
+ # +find_inactive_by_path+ as it will filter out loaded specs by their name.
966
+
967
+ def self.find_unloaded_by_path(path)
968
+ specification_record.find_unloaded_by_path(path)
969
+ end
970
+
962
971
  ##
963
972
  # Return the best specification that contains the file matching +path+
964
973
  # amongst the specs that are not activated.
@@ -436,6 +436,7 @@ or set it to nil if you don't want to specify a license.
436
436
  warning "deprecated autorequire specified" if @specification.autorequire
437
437
 
438
438
  @specification.executables.each do |executable|
439
+ validate_executable(executable)
439
440
  validate_shebang_line_in(executable)
440
441
  end
441
442
 
@@ -449,6 +450,13 @@ or set it to nil if you don't want to specify a license.
449
450
  warning("no #{attribute} specified") if value.nil? || value.empty?
450
451
  end
451
452
 
453
+ def validate_executable(executable)
454
+ separators = [File::SEPARATOR, File::ALT_SEPARATOR, File::PATH_SEPARATOR].compact.map {|sep| Regexp.escape(sep) }.join
455
+ return unless executable.match?(/[\s#{separators}]/)
456
+
457
+ error "executable \"#{executable}\" contains invalid characters"
458
+ end
459
+
452
460
  def validate_shebang_line_in(executable)
453
461
  executable_path = File.join(@specification.bindir, executable)
454
462
  return if File.read(executable_path, 2) == "#!"
@@ -154,6 +154,19 @@ module Gem
154
154
  spec.to_spec
155
155
  end
156
156
 
157
+ ##
158
+ # Return the best specification that contains the file matching +path+
159
+ # amongst the specs that are not loaded. This method is different than
160
+ # +find_inactive_by_path+ as it will filter out loaded specs by their name.
161
+
162
+ def find_unloaded_by_path(path)
163
+ stub = stubs.find do |s|
164
+ next if Gem.loaded_specs[s.name]
165
+ s.contains_requirable_file? path
166
+ end
167
+ stub&.to_spec
168
+ end
169
+
157
170
  ##
158
171
  # Return the best specification in the record that contains the file
159
172
  # matching +path+ amongst the specs that are not activated.
@@ -4,6 +4,7 @@ require 'socket'
4
4
  require_relative '../../../vendored_timeout'
5
5
  require 'io/wait'
6
6
  require_relative '../../../vendored_securerandom'
7
+ require 'rbconfig'
7
8
 
8
9
  # Gem::Resolv is a thread-aware DNS resolver library written in Ruby. Gem::Resolv can
9
10
  # handle multiple DNS requests concurrently without blocking the entire Ruby
@@ -33,7 +34,8 @@ require_relative '../../../vendored_securerandom'
33
34
 
34
35
  class Gem::Resolv
35
36
 
36
- VERSION = "0.6.2"
37
+ # The version string
38
+ VERSION = "0.7.0"
37
39
 
38
40
  ##
39
41
  # Looks up the first IP address for +name+.
@@ -173,21 +175,19 @@ class Gem::Resolv
173
175
 
174
176
  class ResolvTimeout < Gem::Timeout::Error; end
175
177
 
176
- WINDOWS = /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM || ::RbConfig::CONFIG['host_os'] =~ /mswin/
177
- private_constant :WINDOWS
178
-
179
178
  ##
180
179
  # Gem::Resolv::Hosts is a hostname resolver that uses the system hosts file.
181
180
 
182
181
  class Hosts
183
- if WINDOWS
182
+ if /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM || ::RbConfig::CONFIG['host_os'] =~ /mswin/
184
183
  begin
185
184
  require 'win32/resolv' unless defined?(Win32::Resolv)
186
- DefaultFileName = Win32::Resolv.get_hosts_path || IO::NULL
185
+ hosts = Win32::Resolv.get_hosts_path || IO::NULL
187
186
  rescue LoadError
188
187
  end
189
188
  end
190
- DefaultFileName ||= '/etc/hosts'
189
+ # The default file name for host names
190
+ DefaultFileName = hosts || '/etc/hosts'
191
191
 
192
192
  ##
193
193
  # Creates a new Gem::Resolv::Hosts, using +filename+ for its data source.
@@ -525,6 +525,8 @@ class Gem::Resolv
525
525
  }
526
526
  end
527
527
 
528
+ # :stopdoc:
529
+
528
530
  def fetch_resource(name, typeclass)
529
531
  lazy_initialize
530
532
  truncated = {}
@@ -1021,8 +1023,7 @@ class Gem::Resolv
1021
1023
  def Config.default_config_hash(filename="/etc/resolv.conf")
1022
1024
  if File.exist? filename
1023
1025
  Config.parse_resolv_conf(filename)
1024
- elsif WINDOWS
1025
- require 'win32/resolv' unless defined?(Win32::Resolv)
1026
+ elsif defined?(Win32::Resolv)
1026
1027
  search, nameserver = Win32::Resolv.get_resolv_info
1027
1028
  config_hash = {}
1028
1029
  config_hash[:nameserver] = nameserver if nameserver
@@ -2926,15 +2927,21 @@ class Gem::Resolv
2926
2927
 
2927
2928
  class IPv4
2928
2929
 
2929
- ##
2930
- # Regular expression IPv4 addresses must match.
2931
-
2932
2930
  Regex256 = /0
2933
2931
  |1(?:[0-9][0-9]?)?
2934
2932
  |2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
2935
- |[3-9][0-9]?/x
2933
+ |[3-9][0-9]?/x # :nodoc:
2934
+
2935
+ ##
2936
+ # Regular expression IPv4 addresses must match.
2936
2937
  Regex = /\A(#{Regex256})\.(#{Regex256})\.(#{Regex256})\.(#{Regex256})\z/
2937
2938
 
2939
+ ##
2940
+ # Creates a new IPv4 address from +arg+ which may be:
2941
+ #
2942
+ # IPv4:: returns +arg+.
2943
+ # String:: +arg+ must match the IPv4::Regex constant
2944
+
2938
2945
  def self.create(arg)
2939
2946
  case arg
2940
2947
  when IPv4
@@ -3243,13 +3250,15 @@ class Gem::Resolv
3243
3250
 
3244
3251
  end
3245
3252
 
3246
- module LOC
3253
+ module LOC # :nodoc:
3247
3254
 
3248
3255
  ##
3249
3256
  # A Gem::Resolv::LOC::Size
3250
3257
 
3251
3258
  class Size
3252
3259
 
3260
+ # Regular expression LOC size must match.
3261
+
3253
3262
  Regex = /^(\d+\.*\d*)[m]$/
3254
3263
 
3255
3264
  ##
@@ -3275,6 +3284,7 @@ class Gem::Resolv
3275
3284
  end
3276
3285
  end
3277
3286
 
3287
+ # Internal use; use self.create.
3278
3288
  def initialize(scalar)
3279
3289
  @scalar = scalar
3280
3290
  end
@@ -3312,6 +3322,8 @@ class Gem::Resolv
3312
3322
 
3313
3323
  class Coord
3314
3324
 
3325
+ # Regular expression LOC Coord must match.
3326
+
3315
3327
  Regex = /^(\d+)\s(\d+)\s(\d+\.\d+)\s([NESW])$/
3316
3328
 
3317
3329
  ##
@@ -3341,6 +3353,7 @@ class Gem::Resolv
3341
3353
  end
3342
3354
  end
3343
3355
 
3356
+ # Internal use; use self.create.
3344
3357
  def initialize(coordinates,orientation)
3345
3358
  unless coordinates.kind_of?(String)
3346
3359
  raise ArgumentError.new("Coord must be a 32bit unsigned integer in hex format: #{coordinates.inspect}")
@@ -3403,6 +3416,8 @@ class Gem::Resolv
3403
3416
 
3404
3417
  class Alt
3405
3418
 
3419
+ # Regular expression LOC Alt must match.
3420
+
3406
3421
  Regex = /^([+-]*\d+\.*\d*)[m]$/
3407
3422
 
3408
3423
  ##
@@ -3428,6 +3443,7 @@ class Gem::Resolv
3428
3443
  end
3429
3444
  end
3430
3445
 
3446
+ # Internal use; use self.create.
3431
3447
  def initialize(altitude)
3432
3448
  @altitude = altitude
3433
3449
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "deprecate"
4
-
5
3
  ##
6
4
  # The Version class processes string versions into comparable
7
5
  # values. A version string should normally be a series of numbers
@@ -152,6 +150,9 @@ require_relative "deprecate"
152
150
  # For the last example, single-digit versions are automatically extended with
153
151
  # a zero to give a sensible result.
154
152
 
153
+ # Workaround for directly loading Gem::Version in some cases
154
+ module Gem; end
155
+
155
156
  class Gem::Version
156
157
  include Comparable
157
158
 
data/lib/rubygems.rb CHANGED
@@ -9,7 +9,7 @@
9
9
  require "rbconfig"
10
10
 
11
11
  module Gem
12
- VERSION = "4.0.4"
12
+ VERSION = "4.0.6"
13
13
  end
14
14
 
15
15
  require_relative "rubygems/defaults"
@@ -192,11 +192,12 @@ module Gem
192
192
  begin
193
193
  spec.activate
194
194
  rescue Gem::LoadError => e # this could fail due to gem dep collisions, go lax
195
- spec_by_name = Gem::Specification.find_by_name(spec.name)
196
- if spec_by_name.nil?
195
+ spec = Gem::Specification.find_unloaded_by_path(path)
196
+ spec ||= Gem::Specification.find_by_name(spec.name)
197
+ if spec.nil?
197
198
  raise e
198
199
  else
199
- spec_by_name.activate
200
+ spec.activate
200
201
  end
201
202
  end
202
203
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubygems-update
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.4
4
+ version: 4.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Weirich
@@ -722,7 +722,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
722
722
  - !ruby/object:Gem::Version
723
723
  version: '0'
724
724
  requirements: []
725
- rubygems_version: 3.6.9
725
+ rubygems_version: 4.0.3
726
726
  specification_version: 4
727
727
  summary: RubyGems is a package management framework for Ruby. This gem is downloaded
728
728
  and installed by `gem update --system`, so that the `gem` CLI can update itself.