rubygems-update 3.2.5 → 3.2.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -0
  3. data/Manifest.txt +2 -0
  4. data/Rakefile +15 -14
  5. data/bundler/CHANGELOG.md +73 -0
  6. data/bundler/lib/bundler.rb +1 -1
  7. data/bundler/lib/bundler/build_metadata.rb +2 -2
  8. data/bundler/lib/bundler/cli.rb +1 -0
  9. data/bundler/lib/bundler/cli/cache.rb +1 -0
  10. data/bundler/lib/bundler/cli/gem.rb +12 -0
  11. data/bundler/lib/bundler/definition.rb +66 -56
  12. data/bundler/lib/bundler/dep_proxy.rb +15 -8
  13. data/bundler/lib/bundler/dsl.rb +38 -25
  14. data/bundler/lib/bundler/feature_flag.rb +0 -2
  15. data/bundler/lib/bundler/fetcher.rb +0 -1
  16. data/bundler/lib/bundler/gem_helper.rb +8 -6
  17. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  18. data/bundler/lib/bundler/index.rb +6 -5
  19. data/bundler/lib/bundler/inline.rb +1 -0
  20. data/bundler/lib/bundler/installer.rb +0 -17
  21. data/bundler/lib/bundler/installer/standalone.rb +15 -0
  22. data/bundler/lib/bundler/lazy_specification.rb +9 -18
  23. data/bundler/lib/bundler/lockfile_parser.rb +12 -8
  24. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  25. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  29. data/bundler/lib/bundler/man/bundle-config.1 +6 -12
  30. data/bundler/lib/bundler/man/bundle-config.1.ronn +11 -18
  31. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  47. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  48. data/bundler/lib/bundler/man/bundle.1 +1 -1
  49. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  50. data/bundler/lib/bundler/plugin.rb +1 -0
  51. data/bundler/lib/bundler/plugin/installer.rb +8 -9
  52. data/bundler/lib/bundler/resolver.rb +110 -80
  53. data/bundler/lib/bundler/resolver/spec_group.rb +56 -44
  54. data/bundler/lib/bundler/rubygems_ext.rb +16 -0
  55. data/bundler/lib/bundler/settings.rb +1 -2
  56. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  57. data/bundler/lib/bundler/source/git.rb +1 -1
  58. data/bundler/lib/bundler/source/rubygems.rb +10 -2
  59. data/bundler/lib/bundler/source_list.rb +34 -25
  60. data/bundler/lib/bundler/spec_set.rb +5 -4
  61. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  62. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  63. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -1
  64. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
  65. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +2 -2
  66. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
  67. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +11 -7
  68. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +5 -6
  69. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +1 -1
  70. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +4 -2
  71. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +1 -1
  72. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
  73. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +9 -8
  74. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +5 -2
  75. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
  76. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  77. data/bundler/lib/bundler/version.rb +1 -1
  78. data/lib/rubygems.rb +3 -3
  79. data/lib/rubygems/command.rb +1 -0
  80. data/lib/rubygems/dependency.rb +5 -1
  81. data/lib/rubygems/ext/builder.rb +2 -1
  82. data/lib/rubygems/installer_uninstaller_utils.rb +6 -1
  83. data/lib/rubygems/platform.rb +0 -4
  84. data/lib/rubygems/requirement.rb +1 -1
  85. data/lib/rubygems/resolver/index_specification.rb +4 -1
  86. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  87. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +0 -1
  88. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
  89. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +2 -2
  90. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
  91. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +11 -7
  92. data/lib/rubygems/specification.rb +13 -11
  93. data/lib/rubygems/test_case.rb +5 -6
  94. data/rubygems-update.gemspec +1 -1
  95. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  96. data/test/rubygems/test_gem.rb +85 -8
  97. data/test/rubygems/test_gem_commands_outdated_command.rb +18 -0
  98. data/test/rubygems/test_gem_dependency_installer.rb +27 -18
  99. data/test/rubygems/test_gem_ext_builder.rb +24 -0
  100. data/test/rubygems/test_gem_installer.rb +2 -0
  101. data/test/rubygems/test_gem_platform.rb +8 -0
  102. data/test/rubygems/test_gem_requirement.rb +35 -1
  103. data/test/rubygems/test_gem_specification.rb +10 -15
  104. data/test/rubygems/test_gem_stream_ui.rb +1 -1
  105. data/test/rubygems/test_gem_util.rb +4 -4
  106. metadata +5 -3
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CACHE" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-CACHE" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CHECK" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-CHECK" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CLEAN" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-CLEAN" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CONFIG" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-CONFIG" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-config\fR \- Set bundler configuration options
@@ -56,9 +56,6 @@ Executing \fBbundle config unset \-\-local <name> <value>\fR will delete the con
56
56
  .P
57
57
  Executing bundle with the \fBBUNDLE_IGNORE_CONFIG\fR environment variable set will cause it to ignore all configuration\.
58
58
  .
59
- .P
60
- Executing \fBbundle config set \-\-local disable_multisource true\fR upgrades the warning about the Gemfile containing multiple primary sources to an error\. Executing \fBbundle config unset disable_multisource\fR downgrades this error to a warning\.
61
- .
62
59
  .SH "REMEMBERING OPTIONS"
63
60
  Flags passed to \fBbundle install\fR or the Bundler runtime, such as \fB\-\-path foo\fR or \fB\-\-without production\fR, are remembered between commands and saved to your local application\'s configuration (normally, \fB\./\.bundle/config\fR)\.
64
61
  .
@@ -136,9 +133,6 @@ Any periods in the configuration keys must be replaced with two underscores when
136
133
  The following is a list of all configuration keys and their purpose\. You can learn more about their operation in bundle install(1) \fIbundle\-install\.1\.html\fR\.
137
134
  .
138
135
  .IP "\(bu" 4
139
- \fBallow_bundler_dependency_conflicts\fR (\fBBUNDLE_ALLOW_BUNDLER_DEPENDENCY_CONFLICTS\fR): Allow resolving to specifications that have dependencies on \fBbundler\fR that are incompatible with the running Bundler version\.
140
- .
141
- .IP "\(bu" 4
142
136
  \fBallow_deployment_source_credential_changes\fR (\fBBUNDLE_ALLOW_DEPLOYMENT_SOURCE_CREDENTIAL_CHANGES\fR): When in deployment mode, allow changing the credentials to a gem\'s source\. Ex: \fBhttps://some\.host\.com/gems/path/\fR \-> \fBhttps://user_name:password@some\.host\.com/gems/path\fR
143
137
  .
144
138
  .IP "\(bu" 4
@@ -184,7 +178,7 @@ The following is a list of all configuration keys and their purpose\. You can le
184
178
  \fBdisable_local_branch_check\fR (\fBBUNDLE_DISABLE_LOCAL_BRANCH_CHECK\fR): Allow Bundler to use a local git override without a branch specified in the Gemfile\.
185
179
  .
186
180
  .IP "\(bu" 4
187
- \fBdisable_multisource\fR (\fBBUNDLE_DISABLE_MULTISOURCE\fR): When set, Gemfiles containing multiple sources will produce errors instead of warnings\. Use \fBbundle config unset disable_multisource\fR to unset\.
181
+ \fBdisable_local_revision_check\fR (\fBBUNDLE_DISABLE_LOCAL_REVISION_CHECK\fR): Allow Bundler to use a local git override without checking if the revision present in the lockfile is present in the repository\.
188
182
  .
189
183
  .IP "\(bu" 4
190
184
  \fBdisable_shared_gems\fR (\fBBUNDLE_DISABLE_SHARED_GEMS\fR): Stop Bundler from accessing gems installed to RubyGems\' normal location\.
@@ -211,10 +205,10 @@ The following is a list of all configuration keys and their purpose\. You can le
211
205
  \fBignore_messages\fR (\fBBUNDLE_IGNORE_MESSAGES\fR): When set, no post install messages will be printed\. To silence a single gem, use dot notation like \fBignore_messages\.httparty true\fR\.
212
206
  .
213
207
  .IP "\(bu" 4
214
- \fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR) Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
208
+ \fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR): Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
215
209
  .
216
210
  .IP "\(bu" 4
217
- \fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to 1\.
211
+ \fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to 1 on Windows, and to the the number of processors on other platforms\.
218
212
  .
219
213
  .IP "\(bu" 4
220
214
  \fBno_install\fR (\fBBUNDLE_NO_INSTALL\fR): Whether \fBbundle package\fR should skip installing gems\.
@@ -241,7 +235,7 @@ The following is a list of all configuration keys and their purpose\. You can le
241
235
  \fBprefer_patch\fR (BUNDLE_PREFER_PATCH): Prefer updating only to next patch version during updates\. Makes \fBbundle update\fR calls equivalent to \fBbundler update \-\-patch\fR\.
242
236
  .
243
237
  .IP "\(bu" 4
244
- \fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR) Print only version number from \fBbundler \-\-version\fR\.
238
+ \fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR): Print only version number from \fBbundler \-\-version\fR\.
245
239
  .
246
240
  .IP "\(bu" 4
247
241
  \fBredirect\fR (\fBBUNDLE_REDIRECT\fR): The number of redirects allowed for network requests\. Defaults to \fB5\fR\.
@@ -283,7 +277,7 @@ The following is a list of all configuration keys and their purpose\. You can le
283
277
  \fBunlock_source_unlocks_spec\fR (\fBBUNDLE_UNLOCK_SOURCE_UNLOCKS_SPEC\fR): Whether running \fBbundle update \-\-source NAME\fR unlocks a gem with the given name\. Defaults to \fBtrue\fR\.
284
278
  .
285
279
  .IP "\(bu" 4
286
- \fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR) Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
280
+ \fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR): Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
287
281
  .
288
282
  .IP "\(bu" 4
289
283
  \fBuser_agent\fR (\fBBUNDLE_USER_AGENT\fR): The custom user agent fragment Bundler includes in API requests\.
@@ -47,10 +47,6 @@ configuration only from the local application.
47
47
  Executing bundle with the `BUNDLE_IGNORE_CONFIG` environment variable set will
48
48
  cause it to ignore all configuration.
49
49
 
50
- Executing `bundle config set --local disable_multisource true` upgrades the warning about
51
- the Gemfile containing multiple primary sources to an error. Executing `bundle
52
- config unset disable_multisource` downgrades this error to a warning.
53
-
54
50
  ## REMEMBERING OPTIONS
55
51
 
56
52
  Flags passed to `bundle install` or the Bundler runtime, such as `--path foo` or
@@ -133,9 +129,6 @@ the environment variable `BUNDLE_LOCAL__RACK`.
133
129
  The following is a list of all configuration keys and their purpose. You can
134
130
  learn more about their operation in [bundle install(1)](bundle-install.1.html).
135
131
 
136
- * `allow_bundler_dependency_conflicts` (`BUNDLE_ALLOW_BUNDLER_DEPENDENCY_CONFLICTS`):
137
- Allow resolving to specifications that have dependencies on `bundler` that
138
- are incompatible with the running Bundler version.
139
132
  * `allow_deployment_source_credential_changes` (`BUNDLE_ALLOW_DEPLOYMENT_SOURCE_CREDENTIAL_CHANGES`):
140
133
  When in deployment mode, allow changing the credentials to a gem's source.
141
134
  Ex: `https://some.host.com/gems/path/` -> `https://user_name:password@some.host.com/gems/path`
@@ -178,10 +171,9 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
178
171
  * `disable_local_branch_check` (`BUNDLE_DISABLE_LOCAL_BRANCH_CHECK`):
179
172
  Allow Bundler to use a local git override without a branch specified in the
180
173
  Gemfile.
181
- * `disable_multisource` (`BUNDLE_DISABLE_MULTISOURCE`):
182
- When set, Gemfiles containing multiple sources will produce errors
183
- instead of warnings.
184
- Use `bundle config unset disable_multisource` to unset.
174
+ * `disable_local_revision_check` (`BUNDLE_DISABLE_LOCAL_REVISION_CHECK`):
175
+ Allow Bundler to use a local git override without checking if the revision
176
+ present in the lockfile is present in the repository.
185
177
  * `disable_shared_gems` (`BUNDLE_DISABLE_SHARED_GEMS`):
186
178
  Stop Bundler from accessing gems installed to RubyGems' normal location.
187
179
  * `disable_version_check` (`BUNDLE_DISABLE_VERSION_CHECK`):
@@ -206,13 +198,14 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
206
198
  * `global_gem_cache` (`BUNDLE_GLOBAL_GEM_CACHE`):
207
199
  Whether Bundler should cache all gems globally, rather than locally to the
208
200
  installing Ruby installation.
209
- * `ignore_messages` (`BUNDLE_IGNORE_MESSAGES`): When set, no post install
210
- messages will be printed. To silence a single gem, use dot notation like
211
- `ignore_messages.httparty true`.
212
- * `init_gems_rb` (`BUNDLE_INIT_GEMS_RB`)
201
+ * `ignore_messages` (`BUNDLE_IGNORE_MESSAGES`):
202
+ When set, no post install messages will be printed. To silence a single gem,
203
+ use dot notation like `ignore_messages.httparty true`.
204
+ * `init_gems_rb` (`BUNDLE_INIT_GEMS_RB`):
213
205
  Generate a `gems.rb` instead of a `Gemfile` when running `bundle init`.
214
206
  * `jobs` (`BUNDLE_JOBS`):
215
- The number of gems Bundler can install in parallel. Defaults to 1.
207
+ The number of gems Bundler can install in parallel. Defaults to 1 on Windows,
208
+ and to the the number of processors on other platforms.
216
209
  * `no_install` (`BUNDLE_NO_INSTALL`):
217
210
  Whether `bundle package` should skip installing gems.
218
211
  * `no_prune` (`BUNDLE_NO_PRUNE`):
@@ -233,7 +226,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
233
226
  Enable Bundler's experimental plugin system.
234
227
  * `prefer_patch` (BUNDLE_PREFER_PATCH):
235
228
  Prefer updating only to next patch version during updates. Makes `bundle update` calls equivalent to `bundler update --patch`.
236
- * `print_only_version_number` (`BUNDLE_PRINT_ONLY_VERSION_NUMBER`)
229
+ * `print_only_version_number` (`BUNDLE_PRINT_ONLY_VERSION_NUMBER`):
237
230
  Print only version number from `bundler --version`.
238
231
  * `redirect` (`BUNDLE_REDIRECT`):
239
232
  The number of redirects allowed for network requests. Defaults to `5`.
@@ -269,7 +262,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
269
262
  * `unlock_source_unlocks_spec` (`BUNDLE_UNLOCK_SOURCE_UNLOCKS_SPEC`):
270
263
  Whether running `bundle update --source NAME` unlocks a gem with the given
271
264
  name. Defaults to `true`.
272
- * `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`)
265
+ * `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`):
273
266
  Require passing `--all` to `bundle update` when everything should be updated,
274
267
  and disallow passing no options to `bundle update`.
275
268
  * `user_agent` (`BUNDLE_USER_AGENT`):
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-DOCTOR" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-DOCTOR" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-doctor\fR \- Checks the bundle for common problems
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-EXEC" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-EXEC" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-exec\fR \- Execute a command in the context of the bundle
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-GEM" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-GEM" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-INFO" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-INFO" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-info\fR \- Show information for the given gem in your bundle
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-INIT" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-INIT" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-init\fR \- Generates a Gemfile into the current working directory
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-INJECT" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-INJECT" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-INSTALL" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-INSTALL" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-LIST" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-LIST" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-list\fR \- List all the gems in the bundle
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-LOCK" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-LOCK" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-OPEN" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-OPEN" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-OUTDATED" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-OUTDATED" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-outdated\fR \- List installed gems with newer versions available
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-PLATFORM" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-PLATFORM" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-platform\fR \- Displays platform compatibility information
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-PRISTINE" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-PRISTINE" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-REMOVE" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-REMOVE" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-remove\fR \- Removes gems from the Gemfile
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-SHOW" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-SHOW" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-UPDATE" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-UPDATE" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-update\fR \- Update your gems to the latest available versions
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-VIZ" "1" "November 2020" "" ""
4
+ .TH "BUNDLE\-VIZ" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE" "1" "November 2020" "" ""
4
+ .TH "BUNDLE" "1" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\fR \- Ruby Dependency Management
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "GEMFILE" "5" "November 2020" "" ""
4
+ .TH "GEMFILE" "5" "January 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
@@ -105,6 +105,7 @@ module Bundler
105
105
  else
106
106
  builder.eval_gemfile(gemfile)
107
107
  end
108
+ builder.check_primary_source_safety
108
109
  definition = builder.to_definition(nil, true)
109
110
 
110
111
  return if definition.dependencies.empty?
@@ -16,15 +16,13 @@ module Bundler
16
16
 
17
17
  version = options[:version] || [">= 0"]
18
18
 
19
- Bundler.settings.temporary(:disable_multisource => false) do
20
- if options[:git]
21
- install_git(names, version, options)
22
- elsif options[:local_git]
23
- install_local_git(names, version, options)
24
- else
25
- sources = options[:source] || Bundler.rubygems.sources
26
- install_rubygems(names, version, sources)
27
- end
19
+ if options[:git]
20
+ install_git(names, version, options)
21
+ elsif options[:local_git]
22
+ install_local_git(names, version, options)
23
+ else
24
+ sources = options[:source] || Bundler.rubygems.sources
25
+ install_rubygems(names, version, sources)
28
26
  end
29
27
  end
30
28
 
@@ -84,6 +82,7 @@ module Bundler
84
82
  deps = names.map {|name| Dependency.new name, version }
85
83
 
86
84
  definition = Definition.new(nil, deps, source_list, true)
85
+ definition.allow_multisource!
87
86
  install_definition(definition)
88
87
  end
89
88
 
@@ -5,6 +5,8 @@ module Bundler
5
5
  require_relative "vendored_molinillo"
6
6
  require_relative "resolver/spec_group"
7
7
 
8
+ include GemHelpers
9
+
8
10
  # Figures out the best possible configuration of gems that satisfies
9
11
  # the list of passed dependencies and any child dependencies without
10
12
  # causing any gem activation errors.
@@ -15,16 +17,14 @@ module Bundler
15
17
  # ==== Returns
16
18
  # <GemBundle>,nil:: If the list of dependencies can be resolved, a
17
19
  # collection of gemspecs is returned. Otherwise, nil is returned.
18
- def self.resolve(requirements, index, source_requirements = {}, base = [], gem_version_promoter = GemVersionPromoter.new, additional_base_requirements = [], platforms = nil)
19
- platforms = Set.new(platforms) if platforms
20
+ def self.resolve(requirements, source_requirements = {}, base = [], gem_version_promoter = GemVersionPromoter.new, additional_base_requirements = [], platforms = nil)
20
21
  base = SpecSet.new(base) unless base.is_a?(SpecSet)
21
- resolver = new(index, source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
22
+ resolver = new(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
22
23
  result = resolver.start(requirements)
23
24
  SpecSet.new(result)
24
25
  end
25
26
 
26
- def initialize(index, source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
27
- @index = index
27
+ def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
28
28
  @source_requirements = source_requirements
29
29
  @base = base
30
30
  @resolver = Molinillo::Resolver.new(self, self)
@@ -32,14 +32,17 @@ module Bundler
32
32
  @base_dg = Molinillo::DependencyGraph.new
33
33
  @base.each do |ls|
34
34
  dep = Dependency.new(ls.name, ls.version)
35
- @base_dg.add_vertex(ls.name, DepProxy.new(dep, ls.platform), true)
35
+ @base_dg.add_vertex(ls.name, DepProxy.get_proxy(dep, ls.platform), true)
36
36
  end
37
37
  additional_base_requirements.each {|d| @base_dg.add_vertex(d.name, d) }
38
- @platforms = platforms
38
+ @platforms = platforms.reject {|p| p != Gem::Platform::RUBY && (platforms - [p]).any? {|pl| generic(pl) == p } }
39
+ @resolving_only_for_ruby = platforms == [Gem::Platform::RUBY]
39
40
  @gem_version_promoter = gem_version_promoter
40
- @allow_bundler_dependency_conflicts = Bundler.feature_flag.allow_bundler_dependency_conflicts?
41
41
  @use_gvp = Bundler.feature_flag.use_gem_version_promoter_for_major_updates? || !@gem_version_promoter.major?
42
- @lockfile_uses_separate_rubygems_sources = Bundler.feature_flag.disable_multisource?
42
+ @no_aggregate_global_source = @source_requirements[:global].nil?
43
+
44
+ @variant_specific_names = []
45
+ @generic_names = ["Ruby\0", "RubyGems\0"]
43
46
  end
44
47
 
45
48
  def start(requirements)
@@ -75,7 +78,7 @@ module Bundler
75
78
  return unless debug?
76
79
  debug_info = yield
77
80
  debug_info = debug_info.inspect unless debug_info.is_a?(String)
78
- puts debug_info.split("\n").map {|s| "BUNDLER: " + " " * depth + s }
81
+ puts debug_info.split("\n").map {|s| depth == 0 ? "BUNDLER: #{s}" : "BUNDLER(#{depth}): #{s}" }
79
82
  end
80
83
 
81
84
  def debug?
@@ -103,16 +106,25 @@ module Bundler
103
106
  include Molinillo::SpecificationProvider
104
107
 
105
108
  def dependencies_for(specification)
106
- specification.dependencies_for_activated_platforms
109
+ all_dependencies = specification.dependencies_for_activated_platforms
110
+
111
+ if @variant_specific_names.include?(specification.name)
112
+ @variant_specific_names |= all_dependencies.map(&:name) - @generic_names
113
+ else
114
+ generic_names, variant_specific_names = specification.partitioned_dependency_names_for_activated_platforms
115
+ @variant_specific_names |= variant_specific_names - @generic_names
116
+ @generic_names |= generic_names
117
+ end
118
+
119
+ all_dependencies
107
120
  end
108
121
 
109
122
  def search_for(dependency_proxy)
110
123
  platform = dependency_proxy.__platform
111
124
  dependency = dependency_proxy.dep
112
- @search_for[dependency_proxy] ||= begin
113
- name = dependency.name
114
- index = index_for(dependency)
115
- results = index.search(dependency, @base[name])
125
+ name = dependency.name
126
+ search_result = @search_for[dependency_proxy] ||= begin
127
+ results = results_for(dependency, @base[name])
116
128
 
117
129
  if vertex = @base_dg.vertex_named(name)
118
130
  locked_requirement = vertex.payload.requirement
@@ -137,60 +149,70 @@ module Bundler
137
149
  end
138
150
  nested.reduce([]) do |groups, (version, specs)|
139
151
  next groups if locked_requirement && !locked_requirement.satisfied_by?(version)
140
- spec_group = SpecGroup.new(specs)
141
- spec_group.ignores_bundler_dependencies = @allow_bundler_dependency_conflicts
142
- groups << spec_group
152
+
153
+ specs_by_platform = Hash.new do |current_specs, current_platform|
154
+ current_specs[current_platform] = select_best_platform_match(specs, current_platform)
155
+ end
156
+
157
+ spec_group_ruby = SpecGroup.create_for(specs_by_platform, [Gem::Platform::RUBY], Gem::Platform::RUBY)
158
+ groups << spec_group_ruby if spec_group_ruby
159
+
160
+ next groups if @resolving_only_for_ruby
161
+
162
+ spec_group = SpecGroup.create_for(specs_by_platform, @platforms, platform)
163
+ groups << spec_group if spec_group
164
+
165
+ groups
143
166
  end
144
167
  else
145
168
  []
146
169
  end
147
170
  # GVP handles major itself, but it's still a bit risky to trust it with it
148
171
  # until we get it settled with new behavior. For 2.x it can take over all cases.
149
- search = if !@use_gvp
172
+ if !@use_gvp
150
173
  spec_groups
151
174
  else
152
175
  @gem_version_promoter.sort_versions(dependency, spec_groups)
153
176
  end
154
- selected_sgs = []
155
- search.each do |sg|
156
- next unless sg.for?(platform)
157
- sg_all_platforms = sg.copy_for(self.class.sort_platforms(@platforms).reverse)
158
- next unless sg_all_platforms
159
-
160
- selected_sgs << sg_all_platforms
161
-
162
- next if sg_all_platforms.activated_platforms == [Gem::Platform::RUBY]
163
- # Add a spec group for "non platform specific spec" as the fallback
164
- # spec group.
165
- sg_ruby = sg.copy_for([Gem::Platform::RUBY])
166
- next unless sg_ruby
177
+ end
167
178
 
168
- sg_ruby_deps = sg_ruby.dependencies_for_activated_platforms.map(&:dep)
169
- sg_all_platforms_deps = sg_all_platforms.dependencies_for_activated_platforms.map(&:dep)
179
+ unless search_result.empty?
180
+ specific_dependency = @variant_specific_names.include?(name)
181
+ return search_result unless specific_dependency
170
182
 
171
- selected_sgs.insert(-2, sg_ruby) if sg_ruby_deps != sg_all_platforms_deps
183
+ search_result.each do |sg|
184
+ if @generic_names.include?(name)
185
+ @variant_specific_names -= [name]
186
+ sg.activate_all_platforms!
187
+ else
188
+ sg.activate_platform!(platform)
189
+ end
172
190
  end
173
- selected_sgs
174
191
  end
192
+
193
+ search_result
175
194
  end
176
195
 
177
- def index_for(dependency)
196
+ def index_for(dependency, base)
178
197
  source = @source_requirements[dependency.name]
179
198
  if source
180
199
  source.specs
181
- elsif @lockfile_uses_separate_rubygems_sources
182
- Index.build do |idx|
183
- if dependency.all_sources
184
- dependency.all_sources.each {|s| idx.add_source(s.specs) if s }
185
- else
186
- idx.add_source @source_requirements[:default].specs
187
- end
200
+ elsif @no_aggregate_global_source
201
+ dependency.all_sources.find(-> { Index.new }) do |s|
202
+ idx = s.specs
203
+ results = idx.search(dependency, base)
204
+ next if results.empty? || results == base
205
+ return idx
188
206
  end
189
207
  else
190
- @index
208
+ @source_requirements[:global]
191
209
  end
192
210
  end
193
211
 
212
+ def results_for(dependency, base)
213
+ index_for(dependency, base).search(dependency, base)
214
+ end
215
+
194
216
  def name_for(dependency)
195
217
  dependency.name
196
218
  end
@@ -211,13 +233,19 @@ module Bundler
211
233
  requirement.matches_spec?(spec) || spec.source.is_a?(Source::Gemspec)
212
234
  end
213
235
 
236
+ def dependencies_equal?(dependencies, other_dependencies)
237
+ dependencies.map(&:dep) == other_dependencies.map(&:dep)
238
+ end
239
+
214
240
  def relevant_sources_for_vertex(vertex)
215
241
  if vertex.root?
216
- [@source_requirements[vertex.name]]
217
- elsif @lockfile_uses_separate_rubygems_sources
242
+ [@source_requirements[vertex.name]].compact
243
+ elsif @no_aggregate_global_source
218
244
  vertex.recursive_predecessors.map do |v|
219
245
  @source_requirements[v.name]
220
- end << @source_requirements[:default]
246
+ end.compact << @source_requirements[:default]
247
+ else
248
+ []
221
249
  end
222
250
  end
223
251
 
@@ -238,13 +266,6 @@ module Bundler
238
266
  end
239
267
  end
240
268
 
241
- # Sort platforms from most general to most specific
242
- def self.sort_platforms(platforms)
243
- platforms.sort_by do |platform|
244
- platform_sort_key(platform)
245
- end
246
- end
247
-
248
269
  def self.platform_sort_key(platform)
249
270
  # Prefer specific platform to not specific platform
250
271
  return ["99-LAST", "", "", ""] if Gem::Platform::RUBY == platform
@@ -265,7 +286,7 @@ module Bundler
265
286
  if (base = @base[dependency.name]) && !base.empty?
266
287
  dependency.requirement.satisfied_by?(base.first.version) ? 0 : 1
267
288
  else
268
- all = index_for(dependency).search(dependency.name).size
289
+ all = index_for(dependency, base).search(dependency.name).size
269
290
 
270
291
  if all <= 1
271
292
  all - 1_000_000
@@ -308,7 +329,7 @@ module Bundler
308
329
  "The source does not contain any versions of '#{name}'"
309
330
  end
310
331
  else
311
- message = "Could not find gem '#{requirement}' in any of the gem sources " \
332
+ message = "Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in any of the gem sources " \
312
333
  "listed in your Gemfile#{cache_message}."
313
334
  end
314
335
  raise GemNotFound, message
@@ -329,10 +350,16 @@ module Bundler
329
350
  def version_conflict_message(e)
330
351
  # only show essential conflicts, if possible
331
352
  conflicts = e.conflicts.dup
332
- conflicts.delete_if do |_name, conflict|
333
- deps = conflict.requirement_trees.map(&:last).flatten(1)
334
- !Bundler::VersionRanges.empty?(*Bundler::VersionRanges.for_many(deps.map(&:requirement)))
353
+
354
+ if conflicts["bundler"]
355
+ conflicts.replace("bundler" => conflicts["bundler"])
356
+ else
357
+ conflicts.delete_if do |_name, conflict|
358
+ deps = conflict.requirement_trees.map(&:last).flatten(1)
359
+ !Bundler::VersionRanges.empty?(*Bundler::VersionRanges.for_many(deps.map(&:requirement)))
360
+ end
335
361
  end
362
+
336
363
  e = Molinillo::VersionConflict.new(conflicts, e.specification_provider) unless conflicts.empty?
337
364
 
338
365
  solver_name = "Bundler"
@@ -360,15 +387,25 @@ module Bundler
360
387
  :additional_message_for_conflict => lambda do |o, name, conflict|
361
388
  if name == "bundler"
362
389
  o << %(\n Current Bundler version:\n bundler (#{Bundler::VERSION}))
363
- other_bundler_required = !conflict.requirement.requirement.satisfied_by?(Gem::Version.new(Bundler::VERSION))
364
- end
365
390
 
366
- if name == "bundler" && other_bundler_required
367
- o << "\n"
368
- o << "This Gemfile requires a different version of Bundler.\n"
369
- o << "Perhaps you need to update Bundler by running `gem install bundler`?\n"
370
- end
371
- if conflict.locked_requirement
391
+ conflict_dependency = conflict.requirement
392
+ conflict_requirement = conflict_dependency.requirement
393
+ other_bundler_required = !conflict_requirement.satisfied_by?(Gem::Version.new(Bundler::VERSION))
394
+
395
+ if other_bundler_required
396
+ o << "\n\n"
397
+
398
+ candidate_specs = @source_requirements[:default_bundler].specs.search(conflict_dependency)
399
+ if candidate_specs.any?
400
+ target_version = candidate_specs.last.version
401
+ new_command = [File.basename($PROGRAM_NAME), "_#{target_version}_", *ARGV].join(" ")
402
+ o << "Your bundle requires a different version of Bundler than the one you're running.\n"
403
+ o << "Install the necessary version with `gem install bundler:#{target_version}` and rerun bundler using `#{new_command}`\n"
404
+ else
405
+ o << "Your bundle requires a different version of Bundler than the one you're running, and that version could not be found.\n"
406
+ end
407
+ end
408
+ elsif conflict.locked_requirement
372
409
  o << "\n"
373
410
  o << %(Running `bundle update` will rebuild your snapshot from scratch, using only\n)
374
411
  o << %(the gems in your Gemfile, which may resolve the conflict.\n)
@@ -377,14 +414,8 @@ module Bundler
377
414
 
378
415
  relevant_sources = if conflict.requirement.source
379
416
  [conflict.requirement.source]
380
- elsif conflict.requirement.all_sources
381
- conflict.requirement.all_sources
382
- elsif @lockfile_uses_separate_rubygems_sources
383
- # every conflict should have an explicit group of sources when we
384
- # enforce strict pinning
385
- raise "no source set for #{conflict}"
386
417
  else
387
- []
418
+ conflict.requirement.all_sources
388
419
  end.compact.map(&:to_s).uniq.sort
389
420
 
390
421
  metadata_requirement = name.end_with?("\0")
@@ -421,7 +452,8 @@ module Bundler
421
452
  def validate_resolved_specs!(resolved_specs)
422
453
  resolved_specs.each do |v|
423
454
  name = v.name
424
- next unless sources = relevant_sources_for_vertex(v)
455
+ sources = relevant_sources_for_vertex(v)
456
+ next unless sources.any?
425
457
  sources.compact!
426
458
  if default_index = sources.index(@source_requirements[:default])
427
459
  sources.delete_at(default_index)
@@ -430,14 +462,12 @@ module Bundler
430
462
  sources.uniq!
431
463
  next if sources.size <= 1
432
464
 
433
- multisource_disabled = Bundler.feature_flag.disable_multisource?
434
-
435
465
  msg = ["The gem '#{name}' was found in multiple relevant sources."]
436
466
  msg.concat sources.map {|s| " * #{s}" }.sort
437
- msg << "You #{multisource_disabled ? :must : :should} add this gem to the source block for the source you wish it to be installed from."
467
+ msg << "You #{@no_aggregate_global_source ? :must : :should} add this gem to the source block for the source you wish it to be installed from."
438
468
  msg = msg.join("\n")
439
469
 
440
- raise SecurityError, msg if multisource_disabled
470
+ raise SecurityError, msg if @no_aggregate_global_source
441
471
  Bundler.ui.warn "Warning: #{msg}"
442
472
  end
443
473
  end