bundler 4.0.21 → 4.1.0.beta1

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 (190) hide show
  1. checksums.yaml +4 -4
  2. data/{lib/bundler/vendor/connection_pool/LICENSE → MIT.txt} +8 -6
  3. data/bundler.gemspec +23 -6
  4. data/lib/bundler/build_metadata.rb +2 -2
  5. data/lib/bundler/checksum.rb +40 -25
  6. data/lib/bundler/ci_detector.rb +1 -1
  7. data/lib/bundler/cli/add.rb +3 -4
  8. data/lib/bundler/cli/cache.rb +4 -0
  9. data/lib/bundler/cli/clean.rb +5 -0
  10. data/lib/bundler/cli/common.rb +37 -1
  11. data/lib/bundler/cli/config.rb +4 -2
  12. data/lib/bundler/cli/gem.rb +0 -17
  13. data/lib/bundler/cli/install.rb +4 -5
  14. data/lib/bundler/cli/lock.rb +1 -2
  15. data/lib/bundler/cli/outdated.rb +8 -3
  16. data/lib/bundler/cli/pristine.rb +2 -1
  17. data/lib/bundler/cli/update.rb +21 -12
  18. data/lib/bundler/cli.rb +14 -11
  19. data/lib/bundler/definition.rb +61 -24
  20. data/lib/bundler/dependency.rb +4 -0
  21. data/lib/bundler/dsl.rb +77 -11
  22. data/lib/bundler/endpoint_specification.rb +51 -14
  23. data/lib/bundler/env.rb +7 -24
  24. data/lib/bundler/errors.rb +34 -5
  25. data/lib/bundler/fetcher/compact_index.rb +14 -5
  26. data/lib/bundler/fetcher/connection_pools.rb +150 -0
  27. data/lib/bundler/fetcher/downloader.rb +31 -16
  28. data/lib/bundler/fetcher.rb +8 -47
  29. data/lib/bundler/injector.rb +3 -3
  30. data/lib/bundler/inline.rb +44 -4
  31. data/lib/bundler/installer/parallel_installer.rb +25 -30
  32. data/lib/bundler/installer.rb +20 -6
  33. data/lib/bundler/lazy_specification.rb +44 -17
  34. data/lib/bundler/lockfile_generator.rb +24 -2
  35. data/lib/bundler/lockfile_parser.rb +43 -5
  36. data/lib/bundler/man/bundle-add.1 +7 -4
  37. data/lib/bundler/man/bundle-add.1.ronn +8 -4
  38. data/lib/bundler/man/bundle-binstubs.1 +1 -1
  39. data/lib/bundler/man/bundle-cache.1 +2 -2
  40. data/lib/bundler/man/bundle-cache.1.ronn +2 -2
  41. data/lib/bundler/man/bundle-check.1 +1 -1
  42. data/lib/bundler/man/bundle-clean.1 +1 -1
  43. data/lib/bundler/man/bundle-config.1 +38 -6
  44. data/lib/bundler/man/bundle-config.1.ronn +143 -10
  45. data/lib/bundler/man/bundle-console.1 +1 -1
  46. data/lib/bundler/man/bundle-doctor.1 +1 -1
  47. data/lib/bundler/man/bundle-env.1 +1 -1
  48. data/lib/bundler/man/bundle-exec.1 +1 -1
  49. data/lib/bundler/man/bundle-fund.1 +1 -1
  50. data/lib/bundler/man/bundle-gem.1 +1 -1
  51. data/lib/bundler/man/bundle-help.1 +1 -1
  52. data/lib/bundler/man/bundle-info.1 +1 -1
  53. data/lib/bundler/man/bundle-init.1 +1 -1
  54. data/lib/bundler/man/bundle-install.1 +2 -2
  55. data/lib/bundler/man/bundle-install.1.ronn +4 -4
  56. data/lib/bundler/man/bundle-issue.1 +1 -1
  57. data/lib/bundler/man/bundle-licenses.1 +1 -1
  58. data/lib/bundler/man/bundle-list.1 +1 -1
  59. data/lib/bundler/man/bundle-lock.1 +3 -3
  60. data/lib/bundler/man/bundle-lock.1.ronn +5 -5
  61. data/lib/bundler/man/bundle-open.1 +1 -1
  62. data/lib/bundler/man/bundle-outdated.1 +1 -1
  63. data/lib/bundler/man/bundle-platform.1 +1 -1
  64. data/lib/bundler/man/bundle-plugin.1 +1 -1
  65. data/lib/bundler/man/bundle-pristine.1 +1 -1
  66. data/lib/bundler/man/bundle-remove.1 +1 -1
  67. data/lib/bundler/man/bundle-show.1 +1 -1
  68. data/lib/bundler/man/bundle-update.1 +3 -3
  69. data/lib/bundler/man/bundle-update.1.ronn +3 -5
  70. data/lib/bundler/man/bundle-version.1 +1 -1
  71. data/lib/bundler/man/bundle.1 +1 -1
  72. data/lib/bundler/man/gemfile.5 +45 -1
  73. data/lib/bundler/man/gemfile.5.ronn +53 -0
  74. data/lib/bundler/match_metadata.rb +20 -0
  75. data/lib/bundler/match_platform.rb +25 -2
  76. data/lib/bundler/match_remote_metadata.rb +21 -6
  77. data/lib/bundler/materialization.rb +2 -1
  78. data/lib/bundler/override.rb +69 -0
  79. data/lib/bundler/plugin/dsl.rb +3 -5
  80. data/lib/bundler/plugin/events.rb +55 -13
  81. data/lib/bundler/plugin/index.rb +87 -11
  82. data/lib/bundler/plugin/installer/path.rb +1 -1
  83. data/lib/bundler/plugin/installer.rb +13 -5
  84. data/lib/bundler/plugin.rb +58 -30
  85. data/lib/bundler/remote_specification.rb +6 -3
  86. data/lib/bundler/resolver/base.rb +2 -1
  87. data/lib/bundler/resolver/incompatibility.rb +1 -1
  88. data/lib/bundler/resolver.rb +73 -23
  89. data/lib/bundler/ruby_version.rb +0 -2
  90. data/lib/bundler/rubygems_ext.rb +71 -1
  91. data/lib/bundler/rubygems_gem_installer.rb +41 -2
  92. data/lib/bundler/rubygems_integration.rb +7 -2
  93. data/lib/bundler/runtime.rb +69 -2
  94. data/lib/bundler/self_manager.rb +9 -15
  95. data/lib/bundler/settings.rb +373 -30
  96. data/lib/bundler/shared_helpers.rb +2 -1
  97. data/lib/bundler/source/git/git_proxy.rb +2 -10
  98. data/lib/bundler/source/git.rb +15 -6
  99. data/lib/bundler/source/path/installer.rb +1 -1
  100. data/lib/bundler/source/rubygems/remote.rb +10 -5
  101. data/lib/bundler/source/rubygems.rb +48 -12
  102. data/lib/bundler/spec_set.rb +16 -4
  103. data/lib/bundler/stub_specification.rb +2 -1
  104. data/lib/bundler/templates/newgem/Gemfile.tt +4 -4
  105. data/lib/bundler/templates/newgem/newgem.gemspec.tt +3 -3
  106. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -1
  107. data/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +1 -1
  108. data/lib/bundler/ui/shell.rb +0 -4
  109. data/lib/bundler/ui/silent.rb +0 -4
  110. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +35 -2
  111. data/lib/bundler/vendor/thor/lib/thor/base.rb +2 -1
  112. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +14 -6
  113. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +2 -0
  114. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  115. data/lib/bundler/vendor/thor/lib/thor.rb +34 -1
  116. data/lib/bundler/vendored_pub_grub.rb +5 -2
  117. data/lib/bundler/vendored_securerandom.rb +11 -8
  118. data/lib/bundler/vendored_uri.rb +14 -14
  119. data/lib/bundler/version.rb +1 -1
  120. data/lib/bundler/worker.rb +3 -2
  121. data/lib/bundler.rb +1 -1
  122. data/lib/rubygems/compact_index_client/cache.rb +122 -0
  123. data/lib/rubygems/compact_index_client/cache_file.rb +147 -0
  124. data/lib/rubygems/compact_index_client/http_fetcher.rb +88 -0
  125. data/lib/rubygems/compact_index_client/parser.rb +90 -0
  126. data/lib/rubygems/compact_index_client/updater.rb +113 -0
  127. data/lib/rubygems/compact_index_client.rb +111 -0
  128. data/lib/rubygems/cooldown_settings.rb +57 -0
  129. data/lib/rubygems/credential_store/native/linux.rb +97 -0
  130. data/lib/rubygems/credential_store/native/macos.rb +88 -0
  131. data/lib/rubygems/credential_store/native/windows.rb +130 -0
  132. data/lib/rubygems/credential_store.rb +332 -0
  133. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/assignment.rb +1 -1
  134. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +7 -7
  135. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/failure_writer.rb +1 -1
  136. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/incompatibility.rb +4 -4
  137. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/package.rb +1 -1
  138. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/partial_solution.rb +1 -1
  139. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/rubygems.rb +3 -3
  140. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/solve_failure.rb +1 -1
  141. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/static_package_source.rb +3 -3
  142. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/strategy.rb +2 -2
  143. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/term.rb +1 -1
  144. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version.rb +1 -1
  145. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version_constraint.rb +3 -3
  146. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version_range.rb +1 -1
  147. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version_solver.rb +2 -2
  148. data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version_union.rb +1 -1
  149. data/lib/rubygems/vendor/pub_grub/lib/pub_grub.rb +57 -0
  150. data/lib/{bundler → rubygems}/vendor/securerandom/lib/securerandom.rb +10 -6
  151. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/common.rb +119 -119
  152. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/file.rb +13 -13
  153. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/ftp.rb +24 -24
  154. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/generic.rb +132 -132
  155. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/http.rb +18 -18
  156. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/https.rb +4 -4
  157. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/ldap.rb +14 -14
  158. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/ldaps.rb +4 -4
  159. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/mailto.rb +21 -21
  160. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/rfc2396_parser.rb +39 -39
  161. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/rfc3986_parser.rb +14 -14
  162. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/version.rb +1 -1
  163. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/ws.rb +12 -12
  164. data/lib/{bundler → rubygems}/vendor/uri/lib/uri/wss.rb +4 -4
  165. data/lib/{bundler → rubygems}/vendor/uri/lib/uri.rb +35 -31
  166. data/lib/rubygems/yaml_serializer.rb +880 -0
  167. metadata +77 -68
  168. data/CHANGELOG.md +0 -5784
  169. data/LICENSE.md +0 -22
  170. data/README.md +0 -58
  171. data/lib/bundler/compact_index_client/cache.rb +0 -107
  172. data/lib/bundler/compact_index_client/cache_file.rb +0 -148
  173. data/lib/bundler/compact_index_client/parser.rb +0 -87
  174. data/lib/bundler/compact_index_client/updater.rb +0 -105
  175. data/lib/bundler/compact_index_client.rb +0 -92
  176. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +0 -227
  177. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +0 -3
  178. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -56
  179. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +0 -230
  180. data/lib/bundler/vendor/net-http-persistent/README.rdoc +0 -82
  181. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +0 -41
  182. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +0 -65
  183. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +0 -80
  184. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +0 -1153
  185. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +0 -31
  186. data/lib/bundler/vendored_persistent.rb +0 -11
  187. data/lib/bundler/yaml_serializer.rb +0 -98
  188. /data/lib/{bundler → rubygems}/vendor/pub_grub/LICENSE.txt +0 -0
  189. /data/lib/{bundler → rubygems}/vendor/securerandom/COPYING +0 -0
  190. /data/lib/{bundler → rubygems}/vendor/uri/COPYING +0 -0
@@ -108,7 +108,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
108
108
 
109
109
  * `api_request_size` (`BUNDLE_API_REQUEST_SIZE`):
110
110
  Configure how many dependencies to fetch when resolving the specifications.
111
- This configuration is only used when fetchig specifications from RubyGems
111
+ This configuration is only used when fetching specifications from RubyGems
112
112
  servers that didn't implement the Compact Index API.
113
113
  Defaults to 100.
114
114
  * `auto_install` (`BUNDLE_AUTO_INSTALL`):
@@ -145,19 +145,46 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
145
145
  The effective cooldown for any given gem is resolved from three
146
146
  layers, highest precedence first:
147
147
 
148
- 1. CLI flag `--cooldown N` on `install`, `update`, `add`, and
149
- `outdated`.
148
+ 1. CLI flag `--cooldown N` on `install`, `update`, `add`, `cache`,
149
+ `lock`, and `outdated`.
150
150
  2. This setting (`bundle config set cooldown N` or
151
151
  `BUNDLE_COOLDOWN=N`).
152
152
  3. The per-source `cooldown:` keyword in the Gemfile, such as
153
153
  `source "https://rubygems.org", cooldown: 7`.
154
154
 
155
155
  The CLI flag and this setting apply uniformly to every source,
156
- including ones declared with their own `cooldown:` value. To keep a
157
- private registry permanently exempt while still cooling down public
158
- gems, declare `source "https://internal", cooldown: 0` in the
159
- Gemfile; remember that `--cooldown N` on the command line will
160
- still override it for that single run.
156
+ including ones declared with their own `cooldown:` value. To exempt a
157
+ private registry while still cooling down public gems, declare
158
+ `source "https://internal", cooldown: 0` in the Gemfile. That
159
+ exemption is not absolute. `--cooldown N` on the command line
160
+ overrides it for a single run, and a gemrc cooldown raises it the
161
+ same way it raises any other layer, as described below. Where a
162
+ gemrc cooldown is configured, `--cooldown 0` is the only way to get
163
+ the exemption back.
164
+
165
+ RubyGems has a cooldown of its own, set with `gem`'s `--cooldown`
166
+ flag or the `:cooldown:` key in the gemrc file, and the two are read
167
+ together. Whatever the three layers above resolve to is raised to the
168
+ gemrc value, and the longer of the two wins. It carries the other way
169
+ round as well. `gem install`, `gem update` and `gem outdated` read
170
+ this setting and `BUNDLE_COOLDOWN`, so a cooldown configured for
171
+ either tool covers both. The Gemfile per-source `cooldown:` is the
172
+ exception, since `gem` never reads a Gemfile. A configured `0` takes
173
+ part like any other value rather than switching the cooldown off, so
174
+ `bundle config set cooldown 0` does not cancel a gemrc cooldown. The
175
+ `--cooldown` flag is what bypasses the other tool's setting. It wins
176
+ outright, which is why `--cooldown 0` remains the escape hatch for an
177
+ urgent update.
178
+
179
+ The value must be a non-negative integer. `--cooldown` rejects
180
+ anything else outright, while a value coming from this setting, from
181
+ `BUNDLE_COOLDOWN` or from the gemrc file only warns, because a typo
182
+ left in a config file should not make every command fail. Such a
183
+ value takes no part in the resolution above, so a per-source
184
+ `cooldown:` in the Gemfile, or a usable value configured for the
185
+ other tool, still applies. The warning names where the value came
186
+ from, since either tool reports the other's setting as well as its
187
+ own.
161
188
 
162
189
  Cooldown filtering depends on the gem server providing a per-version
163
190
  `created_at` timestamp in the v2 compact-index format. Versions
@@ -167,6 +194,59 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
167
194
  window and remain resolvable. If you rely on cooldown for
168
195
  supply-chain protection, confirm that the gem server emits
169
196
  `created_at` in its `/info/<gem>` responses.
197
+
198
+ A `created_at` timestamp is read as UTC when it carries no time zone
199
+ offset. `rubygems.org` always sends one, but a third-party server
200
+ that omits it would otherwise shift the cooldown window by the
201
+ offset of whatever machine runs bundler.
202
+ * `credential_store` (`BUNDLE_CREDENTIAL_STORE`):
203
+ Experimental: store and read host credentials (the values otherwise set
204
+ via `bundle config set <host> <user:pass>`) in a credential store instead
205
+ of the plain text config file. Set it to `true` to use the operating
206
+ system's native store (macOS Keychain, Linux Secret Service, Windows
207
+ Credential Manager) when one is available on this platform, or to the name
208
+ of a backend provided by a third-party gem, such as `1password`. Falls
209
+ back to the config file when the store is unavailable or fails, warning
210
+ that the credential was written in plain text. Defaults to false.
211
+ Credentials already written to the config file are not migrated
212
+ automatically; re-run `bundle config set <host> <user:pass>` with the
213
+ setting enabled to move each one into the store. Being experimental, the
214
+ name and behavior of this setting may change in a future release.
215
+
216
+ The value is read in three ways. An empty value and the false values
217
+ Bundler takes everywhere else (`false`, `f`, `no`, `n`, `0`) turn the
218
+ store off. `true`, `t`, `yes`, `y`, `on` and `1` select the native store.
219
+ Case does not matter for any of those. Anything else is a backend name,
220
+ taken as written, and only lowercase letters, digits, `_` and `-` are
221
+ recognized in one. So `off` names a backend rather than turning the store
222
+ off, which `false` does.
223
+
224
+ A credential kept in the store is never printed back. `bundle config get
225
+ <host>` and `bundle config list` name the key and say that its value lives
226
+ in the credential store. With `--parseable`, such a key is left out
227
+ entirely, since that output is meant to be read back by `bundle config
228
+ set`. A third-party backend is not required to enumerate what it holds, so
229
+ a credential kept in one may not be listed at all.
230
+
231
+ The store belongs to the machine's user, not to a project, so
232
+ `--local` and `--global` make no difference to where a credential is
233
+ kept. Setting a host's credential in one project changes it for every
234
+ project on the machine, and unsetting it there removes it everywhere.
235
+ Protecting the store itself is the operating system's job, or that of
236
+ whichever backend you selected.
237
+
238
+ A credential given in the environment, such as
239
+ `BUNDLE_GEMS__EXAMPLE__COM`, takes precedence over the stored one, so a
240
+ CI run can pass its own credentials without the store getting in the
241
+ way. The store takes precedence over the config file.
242
+
243
+ The store can also be selected per host with `credential_store.<host>`
244
+ (`BUNDLE_CREDENTIAL_STORE__<HOST>`), for example `bundle config set
245
+ credential_store.gems.example.com code_artifact`. That host then uses
246
+ only the named backend, with no chaining to the global one, while every
247
+ other host keeps following the global setting. Setting a host's value
248
+ to `false` keeps that one host on the config file even when a global
249
+ store is enabled.
170
250
  * `default_cli_command` (`BUNDLE_DEFAULT_CLI_COMMAND`):
171
251
  The command that running `bundle` without arguments should run. Defaults to
172
252
  `cli_help` since Bundler 4, but can also be `install` which was the previous
@@ -224,6 +304,9 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
224
304
  * `jobs` (`BUNDLE_JOBS`):
225
305
  The number of gems Bundler can download and install in parallel.
226
306
  Defaults to the number of available processors.
307
+ * `keep_outdated_cache` (`BUNDLE_KEEP_OUTDATED_CACHE`):
308
+ Whether Bundler should leave outdated gems unpruned when caching. Defaults
309
+ to false.
227
310
  * `lockfile` (`BUNDLE_LOCKFILE`):
228
311
  The path to the lockfile that bundler should use. By default, Bundler adds
229
312
  `.lock` to the end of the `gemfile` entry. Can be set to `false` in the
@@ -232,10 +315,20 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
232
315
  Whether Bundler should include a checksums section in new lockfiles, to protect from compromised gem sources. Defaults to true.
233
316
  Bundler's own checksum is only included when its `.gem` file is cached, which
234
317
  may not be the case when Bundler is installed as a default gem.
318
+ * `no_build_extension` (`BUNDLE_NO_BUILD_EXTENSION`):
319
+ Whether Bundler should skip building native extensions during installation.
320
+ When set, gems are installed without compiling their C extensions.
321
+ To build extensions later, unset this setting and run `bundle pristine <gem>`.
235
322
  * `no_install` (`BUNDLE_NO_INSTALL`):
236
323
  Whether `bundle package` should skip installing gems.
324
+ * `no_install_plugin` (`BUNDLE_NO_INSTALL_PLUGIN`):
325
+ Whether Bundler should skip installing RubyGems plugins during installation.
326
+ When set, plugin files are not written to the plugins directory.
327
+ To install plugins later, unset this setting and run `bundle pristine <gem>`.
237
328
  * `no_prune` (`BUNDLE_NO_PRUNE`):
238
- Whether Bundler should leave outdated gems unpruned when caching.
329
+ Deprecated name for `keep_outdated_cache`. Each priority level is checked
330
+ for `keep_outdated_cache` and then for `no_prune`, and the first value
331
+ found wins. `no_prune` will be removed in Bundler 5.
239
332
  * `only` (`BUNDLE_ONLY`):
240
333
  A space-separated list of groups to install only gems of the specified groups.
241
334
  Please check carefully if you want to install also gems without a group, because
@@ -257,6 +350,23 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
257
350
  Enable Bundler's experimental plugin system.
258
351
  * `prefer_patch` (`BUNDLE_PREFER_PATCH`):
259
352
  Prefer updating only to next patch version during updates. Makes `bundle update` calls equivalent to `bundler update --patch`.
353
+ * `prune` (`BUNDLE_PRUNE`):
354
+ A space-separated or `:`-separated list of Bundler-managed artifacts to
355
+ delete after a successful `bundle install`, `bundle update` or `bundle
356
+ cache`, and on `bundle clean`. `cache` removes the download cache under the
357
+ bundle path, which holds both the cached `.gem` files and the git mirrors.
358
+ `git` removes the `.git` directory of every checked out git gem. Any value
359
+ that is not a category name is read as a boolean, so `BUNDLE_PRUNE=1` selects
360
+ every category and keeps doing so as categories are added. This is meant for
361
+ container images and other throwaway
362
+ environments. **The setting only takes effect when a bundle path is set.**
363
+ Without one Bundler installs into the system gem directory, where the cache
364
+ is shared with RubyGems and holds gem files Bundler never put there, so
365
+ pruning is skipped with a warning. Set a path with `BUNDLE_PATH` or `bundle
366
+ config set path <dir>`. A pruned artifact comes back only when Bundler has to
367
+ install that gem again, so a later `bundle install` does not restore it on
368
+ its own. `bundle install --redownload` does, and `bundle pristine` works once
369
+ it has, though with `prune` still set the reinstall prunes again at the end.
260
370
  * `redirect` (`BUNDLE_REDIRECT`):
261
371
  The number of redirects allowed for network requests. Defaults to `5`.
262
372
  * `retry` (`BUNDLE_RETRY`):
@@ -285,7 +395,9 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
285
395
  * `system_bindir` (`BUNDLE_SYSTEM_BINDIR`):
286
396
  The location where RubyGems installs binstubs. Defaults to `Gem.bindir`.
287
397
  * `timeout` (`BUNDLE_TIMEOUT`):
288
- The seconds allowed before timing out for network requests. Defaults to `10`.
398
+ The seconds allowed before timing out for network requests, applied to each
399
+ request individually. A network operation retried by Bundler may wait a
400
+ multiple of this value in total. Defaults to `10`.
289
401
  * `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`):
290
402
  Require passing `--all` to `bundle update` when everything should be updated,
291
403
  and disallow passing no options to `bundle update`.
@@ -444,6 +556,27 @@ This means that if you have a gem server named `my.gem-host.com`, you'll need to
444
556
  use the `BUNDLE_MY__GEM___HOST__COM` variable to configure credentials for it
445
557
  through ENV.
446
558
 
559
+ ## PROXY SUPPORT
560
+
561
+ Bundler reads the proxy for a gem source from the `:http_proxy` key in the
562
+ RubyGems configuration file (`~/.gemrc`), falling back to the environment.
563
+ For an `https` source, `https_proxy` (or `HTTPS_PROXY`) takes precedence over
564
+ `http_proxy` (or `HTTP_PROXY`), which is only used when no https-specific
565
+ proxy is set. Proxy credentials that are not embedded in the proxy URL are
566
+ read from `HTTP_PROXY_USER` and `HTTP_PROXY_PASS`, or from `HTTPS_PROXY_USER`
567
+ and `HTTPS_PROXY_PASS` when the https proxy is used.
568
+
569
+ Setting `:http_proxy: :no_proxy` in the RubyGems configuration file disables
570
+ proxies entirely, including any proxy environment variables. To keep using a
571
+ proxy from the environment, remove that line. To configure a proxy in the
572
+ file, replace `:no_proxy` with an explicit proxy URL.
573
+
574
+ The `NO_PROXY` (or `no_proxy`) environment variable lists hosts that are
575
+ reached directly, bypassing the proxy. An entry matches the host itself and
576
+ its subdomains, so `NO_PROXY=example.com` bypasses both `example.com` and
577
+ `sub.example.com`, but not `myexample.com`. An entry starting with a dot
578
+ matches only subdomains. A value of `*` bypasses the proxy for every host.
579
+
447
580
  ## CONFIGURE BUNDLER DIRECTORIES
448
581
 
449
582
  Bundler's home, cache and plugin directories and config file can be configured
@@ -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" "April 2026" ""
3
+ .TH "BUNDLE\-CONSOLE" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-DOCTOR" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-ENV" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-EXEC" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-FUND" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-GEM" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-HELP" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-INFO" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-INIT" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-INSTALL" "1" "May 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
6
6
  .SH "SYNOPSIS"
@@ -14,7 +14,7 @@ If a \fBGemfile\.lock\fR does exist, and you have updated your Gemfile(5), Bundl
14
14
  .SH "OPTIONS"
15
15
  .TP
16
16
  \fB\-\-cooldown=<number>\fR
17
- Only consider gem versions published at least \fInumber\fR days ago when resolving\. Pass \fB0\fR to disable cooldown for this run, overriding any per\-source or global configuration\. See \fBcooldown\fR in bundle\-config(1) for details on the precedence between the CLI flag, Bundler config, and Gemfile per\-source settings\.
17
+ Only consider gem versions published at least \fInumber\fR days ago when resolving\. Pass \fB0\fR to disable cooldown for this run, overriding every other cooldown setting, RubyGems' own included\. See \fBcooldown\fR in bundle\-config(1) for details on the precedence between the CLI flag, Bundler config, Gemfile per\-source settings, and the gemrc file\.
18
18
  .TP
19
19
  \fB\-\-force\fR, \fB\-\-redownload\fR
20
20
  Force reinstalling every gem, even if already installed\.
@@ -40,10 +40,10 @@ update process below under [CONSERVATIVE UPDATING][].
40
40
 
41
41
  * `--cooldown=<number>`:
42
42
  Only consider gem versions published at least <number> days ago when
43
- resolving. Pass `0` to disable cooldown for this run, overriding any
44
- per-source or global configuration. See `cooldown` in bundle-config(1)
45
- for details on the precedence between the CLI flag, Bundler config,
46
- and Gemfile per-source settings.
43
+ resolving. Pass `0` to disable cooldown for this run, overriding every
44
+ other cooldown setting, RubyGems' own included. See `cooldown` in
45
+ bundle-config(1) for details on the precedence between the CLI flag,
46
+ Bundler config, Gemfile per-source settings, and the gemrc file.
47
47
 
48
48
  * `--force`, `--redownload`:
49
49
  Force reinstalling every gem, even if already installed.
@@ -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" "April 2026" ""
3
+ .TH "BUNDLE\-ISSUE" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-LICENSES" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-LIST" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-LOCK" "1" "May 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
6
6
  .SH "SYNOPSIS"
@@ -13,7 +13,7 @@ Lock the gems specified in Gemfile\.
13
13
  Ignores the existing lockfile\. Resolve then updates lockfile\. Taking a list of gems or updating all gems if no list is given\.
14
14
  .TP
15
15
  \fB\-\-bundler[=BUNDLER]\fR
16
- Update the locked version of bundler\. BUNDLER can be a version such as \fB4\.0\.20\fR, or a requirement such as \fB"> 0\.a"\fR\. With no argument, update to the latest released version, which never selects a prerelease\.
16
+ Update the locked version of bundler to the given version or the latest version if no version is given\.
17
17
  .TP
18
18
  \fB\-\-local\fR
19
19
  Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems' cache or in \fBvendor/cache\fR\. Note that if a appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
@@ -61,7 +61,7 @@ If updating, do not allow any gem to be updated past latest \-\-patch | \-\-mino
61
61
  If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated\.
62
62
  .TP
63
63
  \fB\-\-cooldown=<number>\fR
64
- Only consider gem versions published at least \fInumber\fR days ago when resolving\. Pass \fB0\fR to disable cooldown for this run, overriding any per\-source or global configuration\. See \fBcooldown\fR in bundle\-config(1)\.
64
+ Only consider gem versions published at least \fInumber\fR days ago when resolving\. Pass \fB0\fR to disable cooldown for this run, overriding every other cooldown setting, RubyGems' own included\. See \fBcooldown\fR in bundle\-config(1)\.
65
65
  .SH "UPDATING ALL GEMS"
66
66
  If you run \fBbundle lock\fR with \fB\-\-update\fR option without list of gems, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources\.
67
67
  .SH "UPDATING A LIST OF GEMS"
@@ -33,9 +33,8 @@ Lock the gems specified in Gemfile.
33
33
  of gems or updating all gems if no list is given.
34
34
 
35
35
  * `--bundler[=BUNDLER]`:
36
- Update the locked version of bundler. BUNDLER can be a version such as
37
- `4.0.20`, or a requirement such as `"> 0.a"`. With no argument, update to the
38
- latest released version, which never selects a prerelease.
36
+ Update the locked version of bundler to the given version or the latest
37
+ version if no version is given.
39
38
 
40
39
  * `--local`:
41
40
  Do not attempt to connect to `rubygems.org`. Instead, Bundler will use the
@@ -88,8 +87,9 @@ Lock the gems specified in Gemfile.
88
87
 
89
88
  * `--cooldown=<number>`:
90
89
  Only consider gem versions published at least <number> days ago when
91
- resolving. Pass `0` to disable cooldown for this run, overriding any
92
- per-source or global configuration. See `cooldown` in bundle-config(1).
90
+ resolving. Pass `0` to disable cooldown for this run, overriding every
91
+ other cooldown setting, RubyGems' own included. See `cooldown` in
92
+ bundle-config(1).
93
93
 
94
94
  ## UPDATING ALL GEMS
95
95
 
@@ -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" "April 2026" ""
3
+ .TH "BUNDLE\-OPEN" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-OUTDATED" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-PLATFORM" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-PLUGIN" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-PRISTINE" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-REMOVE" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-SHOW" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE\-UPDATE" "1" "May 2026" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-update\fR \- Update your gems to the latest available versions
6
6
  .SH "SYNOPSIS"
@@ -27,7 +27,7 @@ Do not attempt to fetch gems remotely and use the gem cache instead\.
27
27
  Update the locked version of Ruby to the current version of Ruby\.
28
28
  .TP
29
29
  \fB\-\-bundler[=BUNDLER]\fR
30
- Update the locked version of bundler\. BUNDLER can be a version such as \fB4\.0\.20\fR, or a requirement such as \fB"> 0\.a"\fR\. With no argument, update to the latest released version, which never selects a prerelease\.
30
+ Update the locked version of bundler to the invoked bundler version\.
31
31
  .TP
32
32
  \fB\-\-force\fR, \fB\-\-redownload\fR
33
33
  Force reinstalling every gem, even if already installed\.
@@ -66,7 +66,7 @@ Do not allow any gem to be updated past latest \fB\-\-patch\fR | \fB\-\-minor\fR
66
66
  Use bundle install conservative update behavior and do not allow indirect dependencies to be updated\.
67
67
  .TP
68
68
  \fB\-\-cooldown=<number>\fR
69
- Only consider gem versions published at least \fInumber\fR days ago when resolving\. Pass \fB0\fR to disable cooldown for this run, overriding any per\-source or global configuration\. Combine with \fB\-\-conservative\fR to minimize transitive churn when bypassing cooldown for an urgent update\. See \fBcooldown\fR in bundle\-config(1)\.
69
+ Only consider gem versions published at least \fInumber\fR days ago when resolving\. Pass \fB0\fR to disable cooldown for this run, overriding every other cooldown setting, RubyGems' own included\. Combine with \fB\-\-conservative\fR to minimize transitive churn when bypassing cooldown for an urgent update\. See \fBcooldown\fR in bundle\-config(1)\.
70
70
  .SH "UPDATING ALL GEMS"
71
71
  If you run \fBbundle update \-\-all\fR, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources\.
72
72
  .P
@@ -53,9 +53,7 @@ gem.
53
53
  Update the locked version of Ruby to the current version of Ruby.
54
54
 
55
55
  * `--bundler[=BUNDLER]`:
56
- Update the locked version of bundler. BUNDLER can be a version such as
57
- `4.0.20`, or a requirement such as `"> 0.a"`. With no argument, update to the
58
- latest released version, which never selects a prerelease.
56
+ Update the locked version of bundler to the invoked bundler version.
59
57
 
60
58
  * `--force`, `--redownload`:
61
59
  Force reinstalling every gem, even if already installed.
@@ -96,8 +94,8 @@ gem.
96
94
 
97
95
  * `--cooldown=<number>`:
98
96
  Only consider gem versions published at least <number> days ago when
99
- resolving. Pass `0` to disable cooldown for this run, overriding any
100
- per-source or global configuration. Combine with `--conservative` to
97
+ resolving. Pass `0` to disable cooldown for this run, overriding every
98
+ other cooldown setting, RubyGems' own included. Combine with `--conservative` to
101
99
  minimize transitive churn when bypassing cooldown for an urgent
102
100
  update. See `cooldown` in bundle-config(1).
103
101
 
@@ -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" "April 2026" ""
3
+ .TH "BUNDLE\-VERSION" "1" "May 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" "April 2026" ""
3
+ .TH "BUNDLE" "1" "May 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" "April 2026" ""
3
+ .TH "GEMFILE" "5" "May 2026" ""
4
4
  .SH "NAME"
5
5
  \fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
6
6
  .SH "SYNOPSIS"
@@ -471,6 +471,50 @@ eval_gemfile "another\.gemfile"
471
471
  .IP "" 0
472
472
  .P
473
473
  This can be useful to run tests against multiple combinations of dependencies, or to load per\-developer gems from an untracked gemfile\.
474
+ .SH "OVERRIDE"
475
+ The \fBoverride\fR directive rewrites a constraint on another gem before resolution runs\. It targets the common case where an upstream gem's published metadata is too narrow on the current project's machine \-\- a stale upper bound, an unwanted floor, or a transitive pin that has to be lifted\.
476
+ .IP "" 4
477
+ .nf
478
+ override <target>, <field>: <operation>
479
+ .fi
480
+ .IP "" 0
481
+ .P
482
+ \fB<target>\fR is a gem name string or \fB:all\fR\. \fB<field>\fR is one of \fBversion:\fR, \fBrequired_ruby_version:\fR, or \fBrequired_rubygems_version:\fR\. \fB<operation>\fR is one of:
483
+ .IP "\(bu" 4
484
+ a version requirement string (e\.g\. \fB">= 8\.0"\fR), which \fBreplaces\fR the target's requirement absolutely\. The original requirement, both direct and transitive, is discarded in favour of the override\.
485
+ .IP "\(bu" 4
486
+ \fB:ignore_upper\fR, which removes upper\-bound operators (\fB<\fR and \fB<=\fR) from the existing requirement and folds \fB~>\fR into its lower bound (\fB~> 1\.5\fR becomes \fB>= 1\.5\fR)\. Other operators, including \fB!=\fR, are preserved\.
487
+ .IP "\(bu" 4
488
+ \fBnil\fR, which collapses the requirement to \fB>= 0\fR (no constraint at all)\.
489
+ .IP "" 0
490
+ .P
491
+ \fB:all\fR only applies to \fBrequired_ruby_version:\fR and \fBrequired_rubygems_version:\fR\. A per\-gem override on the same field takes precedence over an \fB:all\fR override\. \fB:all + version:\fR is rejected: version requirements only make sense per gem\.
492
+ .P
493
+ Multiple \fBoverride\fR calls for distinct targets are allowed; declaring the same \fBtarget\fR and \fBfield\fR twice is an error\.
494
+ .IP "" 4
495
+ .nf
496
+ source "https://rubygems\.org"
497
+
498
+ # Force every reference to "rails" \-\- direct or transitive \-\- to >= 8\.0\.
499
+ override "rails", version: ">= 8\.0"
500
+
501
+ # Strip the upper bound on nokogiri\.
502
+ override "nokogiri", version: :ignore_upper
503
+
504
+ # Drop the version pin on legacy entirely\.
505
+ override "legacy", version: nil
506
+
507
+ # Loosen every gem's required_ruby_version upper bound\.
508
+ override :all, required_ruby_version: :ignore_upper
509
+
510
+ # Override one specific gem's required_rubygems_version\.
511
+ override "tricky", required_rubygems_version: nil
512
+
513
+ gem "rails", "~> 7\.0"
514
+ .fi
515
+ .IP "" 0
516
+ .P
517
+ The override only affects resolution and the install\-time Ruby/RubyGems compatibility checks; \fBGemfile\.lock\fR continues to reflect the resolved versions, not the rewritten requirements\. When resolution still fails, Bundler appends the active overrides (with their Gemfile location) to the error message so it is clear which override shaped the constraint set\.
474
518
  .SH "SOURCE PRIORITY"
475
519
  When attempting to locate a gem to satisfy a gem requirement, bundler uses the following priority order:
476
520
  .IP "1." 4