bundler 2.3.26 → 2.4.5

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/CHANGELOG.md +110 -1
  3. data/README.md +2 -2
  4. data/bundler.gemspec +2 -2
  5. data/exe/bundle +1 -4
  6. data/lib/bundler/build_metadata.rb +2 -2
  7. data/lib/bundler/cli/add.rb +1 -1
  8. data/lib/bundler/cli/check.rb +1 -1
  9. data/lib/bundler/cli/common.rb +1 -0
  10. data/lib/bundler/cli/console.rb +2 -2
  11. data/lib/bundler/cli/doctor.rb +4 -6
  12. data/lib/bundler/cli/gem.rb +62 -40
  13. data/lib/bundler/cli/install.rb +2 -3
  14. data/lib/bundler/cli/lock.rb +8 -5
  15. data/lib/bundler/cli/open.rb +6 -4
  16. data/lib/bundler/cli/outdated.rb +1 -3
  17. data/lib/bundler/cli/viz.rb +1 -1
  18. data/lib/bundler/cli.rb +44 -2
  19. data/lib/bundler/compact_index_client/cache.rb +1 -1
  20. data/lib/bundler/compact_index_client/updater.rb +40 -39
  21. data/lib/bundler/constants.rb +1 -1
  22. data/lib/bundler/definition.rb +87 -51
  23. data/lib/bundler/dependency.rb +12 -11
  24. data/lib/bundler/digest.rb +1 -1
  25. data/lib/bundler/dsl.rb +3 -3
  26. data/lib/bundler/env.rb +1 -1
  27. data/lib/bundler/environment_preserver.rb +1 -0
  28. data/lib/bundler/errors.rb +1 -11
  29. data/lib/bundler/fetcher/compact_index.rb +9 -11
  30. data/lib/bundler/fetcher/dependency.rb +1 -1
  31. data/lib/bundler/fetcher/downloader.rb +2 -5
  32. data/lib/bundler/fetcher.rb +2 -6
  33. data/lib/bundler/force_platform.rb +18 -0
  34. data/lib/bundler/friendly_errors.rb +0 -3
  35. data/lib/bundler/gem_version_promoter.rb +52 -86
  36. data/lib/bundler/graph.rb +3 -3
  37. data/lib/bundler/index.rb +5 -13
  38. data/lib/bundler/injector.rb +1 -1
  39. data/lib/bundler/inline.rb +2 -2
  40. data/lib/bundler/installer/parallel_installer.rb +0 -31
  41. data/lib/bundler/installer.rb +9 -23
  42. data/lib/bundler/lazy_specification.rb +37 -33
  43. data/lib/bundler/lockfile_parser.rb +5 -5
  44. data/lib/bundler/man/bundle-add.1 +1 -1
  45. data/lib/bundler/man/bundle-binstubs.1 +1 -1
  46. data/lib/bundler/man/bundle-cache.1 +1 -1
  47. data/lib/bundler/man/bundle-check.1 +1 -1
  48. data/lib/bundler/man/bundle-clean.1 +1 -1
  49. data/lib/bundler/man/bundle-config.1 +2 -2
  50. data/lib/bundler/man/bundle-config.1.ronn +1 -1
  51. data/lib/bundler/man/bundle-console.1 +1 -1
  52. data/lib/bundler/man/bundle-doctor.1 +1 -1
  53. data/lib/bundler/man/bundle-exec.1 +5 -5
  54. data/lib/bundler/man/bundle-exec.1.ronn +5 -5
  55. data/lib/bundler/man/bundle-gem.1 +27 -37
  56. data/lib/bundler/man/bundle-gem.1.ronn +5 -5
  57. data/lib/bundler/man/bundle-help.1 +1 -1
  58. data/lib/bundler/man/bundle-info.1 +1 -1
  59. data/lib/bundler/man/bundle-init.1 +1 -1
  60. data/lib/bundler/man/bundle-inject.1 +1 -1
  61. data/lib/bundler/man/bundle-install.1 +1 -30
  62. data/lib/bundler/man/bundle-install.1.ronn +0 -29
  63. data/lib/bundler/man/bundle-list.1 +1 -1
  64. data/lib/bundler/man/bundle-lock.1 +1 -1
  65. data/lib/bundler/man/bundle-open.1 +22 -2
  66. data/lib/bundler/man/bundle-open.1.ronn +9 -1
  67. data/lib/bundler/man/bundle-outdated.1 +1 -1
  68. data/lib/bundler/man/bundle-platform.1 +2 -2
  69. data/lib/bundler/man/bundle-platform.1.ronn +1 -1
  70. data/lib/bundler/man/bundle-plugin.1 +1 -1
  71. data/lib/bundler/man/bundle-pristine.1 +1 -1
  72. data/lib/bundler/man/bundle-remove.1 +1 -1
  73. data/lib/bundler/man/bundle-show.1 +1 -1
  74. data/lib/bundler/man/bundle-update.1 +1 -1
  75. data/lib/bundler/man/bundle-version.1 +1 -1
  76. data/lib/bundler/man/bundle-viz.1 +1 -1
  77. data/lib/bundler/man/bundle.1 +1 -1
  78. data/lib/bundler/man/gemfile.5 +1 -1
  79. data/lib/bundler/mirror.rb +5 -7
  80. data/lib/bundler/plugin/index.rb +4 -4
  81. data/lib/bundler/plugin/installer/rubygems.rb +0 -4
  82. data/lib/bundler/resolver/base.rb +42 -15
  83. data/lib/bundler/resolver/candidate.rb +94 -0
  84. data/lib/bundler/resolver/incompatibility.rb +15 -0
  85. data/lib/bundler/resolver/package.rb +72 -0
  86. data/lib/bundler/resolver/root.rb +25 -0
  87. data/lib/bundler/resolver/spec_group.rb +26 -36
  88. data/lib/bundler/resolver.rb +314 -278
  89. data/lib/bundler/rubygems_ext.rb +11 -6
  90. data/lib/bundler/rubygems_gem_installer.rb +4 -2
  91. data/lib/bundler/rubygems_integration.rb +1 -9
  92. data/lib/bundler/runtime.rb +1 -5
  93. data/lib/bundler/settings.rb +0 -6
  94. data/lib/bundler/shared_helpers.rb +1 -0
  95. data/lib/bundler/source/git/git_proxy.rb +193 -67
  96. data/lib/bundler/source/git.rb +15 -17
  97. data/lib/bundler/source/metadata.rb +0 -1
  98. data/lib/bundler/source/path/installer.rb +1 -22
  99. data/lib/bundler/source/path.rb +5 -5
  100. data/lib/bundler/source/rubygems.rb +14 -68
  101. data/lib/bundler/source_list.rb +8 -2
  102. data/lib/bundler/spec_set.rb +7 -9
  103. data/lib/bundler/templates/Executable +1 -1
  104. data/lib/bundler/templates/Executable.bundler +4 -9
  105. data/lib/bundler/templates/Executable.standalone +2 -0
  106. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  107. data/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  108. data/lib/bundler/templates/newgem/README.md.tt +6 -4
  109. data/lib/bundler/templates/newgem/Rakefile.tt +2 -1
  110. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  111. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  112. data/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +0 -0
  113. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  114. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  115. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  116. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  117. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +8 -0
  118. data/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
  119. data/lib/bundler/ui/shell.rb +35 -12
  120. data/lib/bundler/ui/silent.rb +21 -5
  121. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  122. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  123. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  124. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -408
  125. data/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  126. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  127. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  128. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  129. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  130. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  131. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +151 -0
  132. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  133. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  134. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  135. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  136. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +53 -0
  137. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  138. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  139. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +128 -0
  140. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +409 -0
  141. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +240 -0
  142. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  143. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  144. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  145. data/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  146. data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  147. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  148. data/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  149. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  150. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  151. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  152. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  153. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  154. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +13 -7
  155. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +10 -5
  156. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  157. data/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  158. data/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  159. data/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  160. data/lib/bundler/vendored_persistent.rb +1 -33
  161. data/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  162. data/lib/bundler/version.rb +5 -1
  163. data/lib/bundler/worker.rb +5 -7
  164. data/lib/bundler.rb +20 -64
  165. metadata +33 -32
  166. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  167. data/lib/bundler/vendor/molinillo/LICENSE +0 -9
  168. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  169. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  170. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  171. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  172. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  173. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  174. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  175. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  176. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  177. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  178. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  179. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  180. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  181. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  182. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  183. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  184. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  185. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  186. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  187. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  188. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  189. data/lib/bundler/vendored_molinillo.rb +0 -4
  190. data/lib/bundler/version_ranges.rb +0 -122
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ecbb775b34e7c64a72d01af5cce8bacbd1a470404845444fda36a2f0e37a1aa
4
- data.tar.gz: 40fbd944cb4094b105e01672961a790730055bd8563632dbbe4ae3738b9d531f
3
+ metadata.gz: f0ed8153bf4161ce7da774eaa1abd23954e3ca61eb7ba730efcb934a6c13b2fe
4
+ data.tar.gz: 81f598764da83308327451e2ab17276401b9f89f6cd170f82c540b74e3038b41
5
5
  SHA512:
6
- metadata.gz: 1a2e39b4aa05271b042c17f35ac0376306d509221d91c13480eb40da97fda0fbe811fd59951a550a455232428b41856f04a63ea474b4dc88553eb6ae3b5e149e
7
- data.tar.gz: 3ccf4c9906a118084bdcd4e8a124dab5f96310ac8ac09bea0ed7de8be6019c1fae3fc58e2b421406e0d2d9de19518869e0beaf1faeae7f8148388724521d3a65
6
+ metadata.gz: 668e10c171354b03ee63547510c0e3cb57caa1146749b9f357ee36d74d9c3bfaa84283dc39d908b91a0e7870ecd673b392f7ea062e7987f9f833b492700f5533
7
+ data.tar.gz: b498147f45cdd036ba4cb3c8ed03eb6353397a5acbbe76fb0b2729c58a4fc99beb86247b6d410e3e55612b7f950d53bea05f705a8d387ed24ab00c47388e7a4a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,112 @@
1
+ # 2.4.5 (January 21, 2023)
2
+
3
+ ## Bug fixes:
4
+
5
+ - Fix `bundler/inline` not resolving properly if gems not preinstalled [#6282](https://github.com/rubygems/rubygems/pull/6282)
6
+ - Fix packages for external platforms being introduced in lockfile when Bundler retries resolution [#6285](https://github.com/rubygems/rubygems/pull/6285)
7
+
8
+ ## Documentation:
9
+
10
+ - Update bundle-exec man page to not use deprecated `Bundler.with_clean_env` [#6284](https://github.com/rubygems/rubygems/pull/6284)
11
+
12
+ # 2.4.4 (January 16, 2023)
13
+
14
+ ## Bug fixes:
15
+
16
+ - Fix platform specific gems removed from the lockfile [#6266](https://github.com/rubygems/rubygems/pull/6266)
17
+ - Properly handle incompatibilities on platform specific gems [#6270](https://github.com/rubygems/rubygems/pull/6270)
18
+ - Optimistically exclude prereleases from initial resolution [#6246](https://github.com/rubygems/rubygems/pull/6246)
19
+ - Fix another case of not properly falling back to ruby variant when materializing [#6261](https://github.com/rubygems/rubygems/pull/6261)
20
+ - Skip setting `BUNDLER_SETUP` on Ruby 2.6 [#6252](https://github.com/rubygems/rubygems/pull/6252)
21
+ - Let resolver deal with legacy gems with equivalent version and different dependencies [#6219](https://github.com/rubygems/rubygems/pull/6219)
22
+
23
+ # 2.4.3 (January 6, 2023)
24
+
25
+ ## Enhancements:
26
+
27
+ - Enhance `bundle open` command to allow opening subdir/file of gem [#6146](https://github.com/rubygems/rubygems/pull/6146)
28
+
29
+ ## Bug fixes:
30
+
31
+ - Fix pointing GitHub sources to PRs [#6241](https://github.com/rubygems/rubygems/pull/6241)
32
+ - Fix version ranges incorrectly handling platforms [#6240](https://github.com/rubygems/rubygems/pull/6240)
33
+ - Cleanup unnecessary gems when removing lockfile platforms [#6234](https://github.com/rubygems/rubygems/pull/6234)
34
+ - When auto-removing RUBY platform don't add specific platform if not needed [#6233](https://github.com/rubygems/rubygems/pull/6233)
35
+ - Fallback to selecting installable candidates if possible when materializing specs [#6225](https://github.com/rubygems/rubygems/pull/6225)
36
+
37
+ ## Documentation:
38
+
39
+ - Fix several typos [#6224](https://github.com/rubygems/rubygems/pull/6224)
40
+
41
+ # 2.4.2 (January 1, 2023)
42
+
43
+ ## Performance:
44
+
45
+ - Speed up resolution by properly merging incompatibility ranges [#6215](https://github.com/rubygems/rubygems/pull/6215)
46
+
47
+ ## Documentation:
48
+
49
+ - Remove stray word in `bundle config` man page [#6220](https://github.com/rubygems/rubygems/pull/6220)
50
+
51
+ # 2.4.1 (December 24, 2022)
52
+
53
+ ## Enhancements:
54
+
55
+ - Allow Bundler to run on old RubyGems + Ruby 2.7 without warnings [#6187](https://github.com/rubygems/rubygems/pull/6187)
56
+
57
+ ## Bug fixes:
58
+
59
+ - Fix dependencies scoped to other platforms making resolver fail [#6189](https://github.com/rubygems/rubygems/pull/6189)
60
+ - Restore annotated git tag support [#6186](https://github.com/rubygems/rubygems/pull/6186)
61
+
62
+ # 2.4.0 (December 24, 2022)
63
+
64
+ ## Security:
65
+
66
+ - In README generated by `bundle gem`, do not fill rubygems.org install commands with the gem name automatically [#6093](https://github.com/rubygems/rubygems/pull/6093)
67
+ - Use safe Marshal deserialization for dependency API response [#6141](https://github.com/rubygems/rubygems/pull/6141)
68
+
69
+ ## Breaking changes:
70
+
71
+ - Remove Travis CI from gem skeleton [#6150](https://github.com/rubygems/rubygems/pull/6150)
72
+ - Drop support for Ruby 2.3, 2.4, 2.5 and RubyGems 2.5, 2.6, 2.7 [#6107](https://github.com/rubygems/rubygems/pull/6107)
73
+ - Completely remove "auto-sudo" feature [#5888](https://github.com/rubygems/rubygems/pull/5888)
74
+
75
+ ## Deprecations:
76
+
77
+ - Turn `--ext` option of `bundle gem` into string. Deprecate usage without explicit value [#6144](https://github.com/rubygems/rubygems/pull/6144)
78
+
79
+ ## Features:
80
+
81
+ - Add `--ext=rust` support to `bundle gem` for creating simple gems with Rust extensions [#6149](https://github.com/rubygems/rubygems/pull/6149)
82
+ - Migrate our resolver engine to PubGrub [#5960](https://github.com/rubygems/rubygems/pull/5960)
83
+
84
+ ## Performance:
85
+
86
+ - Make cloning git repos faster [#4475](https://github.com/rubygems/rubygems/pull/4475)
87
+
88
+ ## Enhancements:
89
+
90
+ - Add `bundle lock --update --bundler` [#6134](https://github.com/rubygems/rubygems/pull/6134)
91
+ - Support for pre flag in `bundle update`/`bundle lock` [#5258](https://github.com/rubygems/rubygems/pull/5258)
92
+ - Improve error message when changing Gemfile to a mistyped git ref [#6130](https://github.com/rubygems/rubygems/pull/6130)
93
+ - Remove special handling of some `LoadError` and `NoMethodError` [#6115](https://github.com/rubygems/rubygems/pull/6115)
94
+
95
+ ## Bug fixes:
96
+
97
+ - Don't unlock dependencies of a gemspec when its version changes [#6184](https://github.com/rubygems/rubygems/pull/6184)
98
+ - Fix platform specific version for libv8-node and other allowlisted gems not being chosen in Truffleruby [#6169](https://github.com/rubygems/rubygems/pull/6169)
99
+ - Fix `bundle outdated` with both `--groups` and `--parseable` flags [#6148](https://github.com/rubygems/rubygems/pull/6148)
100
+ - Auto-heal lockfile when it's missing specs [#6132](https://github.com/rubygems/rubygems/pull/6132)
101
+ - Fix unintentional downgrades when gemspec DSL is used [#6131](https://github.com/rubygems/rubygems/pull/6131)
102
+ - Fix display of previous gem version when previously downloaded already [#6110](https://github.com/rubygems/rubygems/pull/6110)
103
+ - Fix hang when a lockfile gem does not resolve on the current platform [#6070](https://github.com/rubygems/rubygems/pull/6070)
104
+
105
+ ## Documentation:
106
+
107
+ - Improve Bundler setup docs for development [#6154](https://github.com/rubygems/rubygems/pull/6154)
108
+ - Fx link in bundle-platform man page [#6071](https://github.com/rubygems/rubygems/pull/6071)
109
+
1
110
  # 2.3.26 (November 16, 2022)
2
111
 
3
112
  ## Enhancements:
@@ -1449,7 +1558,7 @@ Changes
1449
1558
 
1450
1559
  - avoid new RubyGems warning about unsafe YAML loading (to keep output consistent) (@segiddins)
1451
1560
  - load digest subclasses in a thread-safe manner (@segiddins, @colby-swandale)
1452
- - avoid unusued variable warnings under ruby 2.5 (@amatsuda)
1561
+ - avoid unused variable warnings under ruby 2.5 (@amatsuda)
1453
1562
  - fix printing the same message twice in verbose mode ([#6028](https://github.com/rubygems/bundler/issues/6028), @akhramov)
1454
1563
  - allow `SignalException`s to bubble up to the interpreter during `bundle exec` ([#6090](https://github.com/rubygems/bundler/issues/6090), @dekellum)
1455
1564
  - avoid activating stdlib digest under Ruby 2.5 (@segiddins)
data/README.md CHANGED
@@ -38,13 +38,13 @@ Still stuck? Try [filing an issue](https://github.com/rubygems/rubygems/issues/n
38
38
 
39
39
  To see what has changed in recent versions of Bundler, see the [CHANGELOG](CHANGELOG.md).
40
40
 
41
- To get in touch with the Bundler core team and other Bundler users, please see [getting help](doc/contributing/GETTING_HELP.md).
41
+ To get in touch with the Bundler core team and other Bundler users, please join [the Bundler slack](https://slack.bundler.io).
42
42
 
43
43
  ### Contributing
44
44
 
45
45
  If you'd like to contribute to Bundler, that's awesome, and we <3 you. We've put together [the Bundler contributor guide](https://github.com/rubygems/rubygems/blob/master/bundler/doc/contributing/README.md) with all of the information you need to get started.
46
46
 
47
- If you'd like to request a substantial change to Bundler or its documentation, refer to the [Bundler RFC process](https://github.com/bundler/rfcs) for more information.
47
+ If you'd like to request a substantial change to Bundler or its documentation, refer to the [Bundler RFC process](https://github.com/rubygems/rfcs) for more information.
48
48
 
49
49
  While some Bundler contributors are compensated by Ruby Together, the project maintainers make decisions independent of Ruby Together. As a project, we welcome contributions regardless of the author's affiliation with Ruby Together.
50
50
 
data/bundler.gemspec CHANGED
@@ -29,8 +29,8 @@ Gem::Specification.new do |s|
29
29
  "source_code_uri" => "https://github.com/rubygems/rubygems/tree/master/bundler",
30
30
  }
31
31
 
32
- s.required_ruby_version = ">= 2.3.0"
33
- s.required_rubygems_version = ">= 2.5.2"
32
+ s.required_ruby_version = ">= 2.6.0"
33
+ s.required_rubygems_version = ">= 3.0.1"
34
34
 
35
35
  s.files = Dir.glob("lib/bundler{.rb,/**/*}", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
36
36
 
data/exe/bundle CHANGED
@@ -15,10 +15,7 @@ else
15
15
  require "bundler"
16
16
  end
17
17
 
18
- # Workaround for non-activated bundler spec due to missing https://github.com/rubygems/rubygems/commit/4e306d7bcdee924b8d80ca9db6125aa59ee4e5a3
19
- gem "bundler", Bundler::VERSION if Gem.rubygems_version < Gem::Version.new("2.6.2")
20
-
21
- if Gem.rubygems_version < Gem::Version.new("3.2.3") && Gem.ruby_version < Gem::Version.new("2.6.a") && !ENV["BUNDLER_NO_OLD_RUBYGEMS_WARNING"]
18
+ if Gem.rubygems_version < Gem::Version.new("3.2.3") && Gem.ruby_version < Gem::Version.new("2.7.a") && !ENV["BUNDLER_NO_OLD_RUBYGEMS_WARNING"]
22
19
  Bundler.ui.warn \
23
20
  "Your RubyGems version (#{Gem::VERSION}) has a bug that prevents " \
24
21
  "`required_ruby_version` from working for Bundler. Any scripts that use " \
@@ -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 = "2022-11-17".freeze
8
- @git_commit_sha = "23ec5b8501".freeze
7
+ @built_at = "2023-01-21".freeze
8
+ @git_commit_sha = "d8ff3b6e4a".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -40,7 +40,7 @@ module Bundler
40
40
  raise InvalidOption, "Please specify gems to add." if gems.empty?
41
41
 
42
42
  version.to_a.each do |v|
43
- raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN =~ v.to_s
43
+ raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN.match?(v.to_s)
44
44
  end
45
45
  end
46
46
  end
@@ -17,7 +17,7 @@ module Bundler
17
17
  begin
18
18
  definition.resolve_only_locally!
19
19
  not_installed = definition.missing_specs
20
- rescue GemNotFound, VersionConflict
20
+ rescue GemNotFound, SolveFailure
21
21
  Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies."
22
22
  Bundler.ui.warn "Install missing gems with `bundle install`."
23
23
  exit 1
@@ -111,6 +111,7 @@ module Bundler
111
111
  definition.gem_version_promoter.tap do |gvp|
112
112
  gvp.level = patch_level.first || :major
113
113
  gvp.strict = options[:strict] || options["filter-strict"]
114
+ gvp.pre = options[:pre]
114
115
  end
115
116
  end
116
117
 
@@ -30,9 +30,9 @@ module Bundler
30
30
 
31
31
  def get_constant(name)
32
32
  const_name = {
33
- "pry" => :Pry,
33
+ "pry" => :Pry,
34
34
  "ripl" => :Ripl,
35
- "irb" => :IRB,
35
+ "irb" => :IRB,
36
36
  }[name]
37
37
  Object.const_get(const_name)
38
38
  rescue NameError
@@ -73,12 +73,10 @@ module Bundler
73
73
  definition.specs.each do |spec|
74
74
  bundles_for_gem(spec).each do |bundle|
75
75
  bad_paths = dylibs(bundle).select do |f|
76
- begin
77
- Fiddle.dlopen(f)
78
- false
79
- rescue Fiddle::DLError
80
- true
81
- end
76
+ Fiddle.dlopen(f)
77
+ false
78
+ rescue Fiddle::DLError
79
+ true
82
80
  end
83
81
  if bad_paths.any?
84
82
  broken_links[spec] ||= []
@@ -15,7 +15,7 @@ module Bundler
15
15
  "test-unit" => "3.0",
16
16
  }.freeze
17
17
 
18
- attr_reader :options, :gem_name, :thor, :name, :target
18
+ attr_reader :options, :gem_name, :thor, :name, :target, :extension
19
19
 
20
20
  def initialize(options, gem_name, thor)
21
21
  @options = options
@@ -28,7 +28,11 @@ module Bundler
28
28
  @name = @gem_name
29
29
  @target = SharedHelpers.pwd.join(gem_name)
30
30
 
31
- validate_ext_name if options[:ext]
31
+ @extension = options[:ext]
32
+
33
+ validate_ext_name if @extension
34
+ validate_rust_builder_rubygems_version if @extension == "rust"
35
+ travis_removal_info
32
36
  end
33
37
 
34
38
  def run
@@ -55,21 +59,22 @@ module Bundler
55
59
  end
56
60
 
57
61
  config = {
58
- :name => name,
62
+ :name => name,
59
63
  :underscored_name => underscored_name,
60
- :namespaced_path => namespaced_path,
61
- :makefile_path => "#{underscored_name}/#{underscored_name}",
62
- :constant_name => constant_name,
63
- :constant_array => constant_array,
64
- :author => git_author_name.empty? ? "TODO: Write your name" : git_author_name,
65
- :email => git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
66
- :test => options[:test],
67
- :ext => options[:ext],
68
- :exe => options[:exe],
69
- :bundler_version => bundler_dependency_version,
70
- :git => use_git,
71
- :github_username => github_username.empty? ? "[USERNAME]" : github_username,
64
+ :namespaced_path => namespaced_path,
65
+ :makefile_path => "#{underscored_name}/#{underscored_name}",
66
+ :constant_name => constant_name,
67
+ :constant_array => constant_array,
68
+ :author => git_author_name.empty? ? "TODO: Write your name" : git_author_name,
69
+ :email => git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
70
+ :test => options[:test],
71
+ :ext => extension,
72
+ :exe => options[:exe],
73
+ :bundler_version => bundler_dependency_version,
74
+ :git => use_git,
75
+ :github_username => github_username.empty? ? "[USERNAME]" : github_username,
72
76
  :required_ruby_version => required_ruby_version,
77
+ :rust_builder_required_rubygems_version => rust_builder_required_rubygems_version,
73
78
  :minitest_constant_name => minitest_constant_name,
74
79
  }
75
80
  ensure_safe_gem_name(name, constant_array)
@@ -132,8 +137,6 @@ module Bundler
132
137
  case config[:ci]
133
138
  when "github"
134
139
  templates.merge!("github/workflows/main.yml.tt" => ".github/workflows/main.yml")
135
- when "travis"
136
- templates.merge!("travis.yml.tt" => ".travis.yml")
137
140
  when "gitlab"
138
141
  templates.merge!("gitlab-ci.yml.tt" => ".gitlab-ci.yml")
139
142
  when "circle"
@@ -188,14 +191,23 @@ module Bundler
188
191
 
189
192
  templates.merge!("exe/newgem.tt" => "exe/#{name}") if config[:exe]
190
193
 
191
- if options[:ext]
194
+ if extension == "c"
192
195
  templates.merge!(
193
- "ext/newgem/extconf.rb.tt" => "ext/#{name}/extconf.rb",
196
+ "ext/newgem/extconf-c.rb.tt" => "ext/#{name}/extconf.rb",
194
197
  "ext/newgem/newgem.h.tt" => "ext/#{name}/#{underscored_name}.h",
195
198
  "ext/newgem/newgem.c.tt" => "ext/#{name}/#{underscored_name}.c"
196
199
  )
197
200
  end
198
201
 
202
+ if extension == "rust"
203
+ templates.merge!(
204
+ "Cargo.toml.tt" => "Cargo.toml",
205
+ "ext/newgem/Cargo.toml.tt" => "ext/#{name}/Cargo.toml",
206
+ "ext/newgem/extconf-rust.rb.tt" => "ext/#{name}/extconf.rb",
207
+ "ext/newgem/src/lib.rs.tt" => "ext/#{name}/src/lib.rs",
208
+ )
209
+ end
210
+
199
211
  if target.exist? && !target.directory?
200
212
  Bundler.ui.error "Couldn't create a new gem named `#{gem_name}` because there's an existing file named `#{gem_name}`."
201
213
  exit Bundler::BundlerError.all_errors[Bundler::GenericSystemCallError]
@@ -270,7 +282,7 @@ module Bundler
270
282
  Bundler.ui.info hint_text("test")
271
283
 
272
284
  result = Bundler.ui.ask "Enter a test framework. rspec/minitest/test-unit/(none):"
273
- if result =~ /rspec|minitest|test-unit/
285
+ if /rspec|minitest|test-unit/.match?(result)
274
286
  test_framework = result
275
287
  else
276
288
  test_framework = false
@@ -306,12 +318,11 @@ module Bundler
306
318
  "* CircleCI: https://circleci.com/\n" \
307
319
  "* GitHub Actions: https://github.com/features/actions\n" \
308
320
  "* GitLab CI: https://docs.gitlab.com/ee/ci/\n" \
309
- "* Travis CI: https://travis-ci.org/\n" \
310
321
  "\n"
311
322
  Bundler.ui.info hint_text("ci")
312
323
 
313
- result = Bundler.ui.ask "Enter a CI service. github/travis/gitlab/circle/(none):"
314
- if result =~ /github|travis|gitlab|circle/
324
+ result = Bundler.ui.ask "Enter a CI service. github/gitlab/circle/(none):"
325
+ if /github|gitlab|circle/.match?(result)
315
326
  ci_template = result
316
327
  else
317
328
  ci_template = false
@@ -342,7 +353,7 @@ module Bundler
342
353
  Bundler.ui.info hint_text("linter")
343
354
 
344
355
  result = Bundler.ui.ask "Enter a linter. rubocop/standard/(none):"
345
- if result =~ /rubocop|standard/
356
+ if /rubocop|standard/.match?(result)
346
357
  linter_template = result
347
358
  else
348
359
  linter_template = false
@@ -389,7 +400,7 @@ module Bundler
389
400
  end
390
401
 
391
402
  def ensure_safe_gem_name(name, constant_array)
392
- if name =~ /^\d/
403
+ if /^\d/.match?(name)
393
404
  Bundler.ui.error "Invalid gem name #{name} Please give a name which does not start with numbers."
394
405
  exit 1
395
406
  end
@@ -415,28 +426,39 @@ module Bundler
415
426
  thor.run(%(#{editor} "#{file}"))
416
427
  end
417
428
 
429
+ def rust_builder_required_rubygems_version
430
+ "3.3.11"
431
+ end
432
+
418
433
  def required_ruby_version
419
- if Gem.ruby_version < Gem::Version.new("2.4.a") then "2.3.0"
420
- elsif Gem.ruby_version < Gem::Version.new("2.5.a") then "2.4.0"
421
- elsif Gem.ruby_version < Gem::Version.new("2.6.a") then "2.5.0"
422
- else
423
- "2.6.0"
424
- end
434
+ "2.6.0"
425
435
  end
426
436
 
427
437
  def rubocop_version
428
- if Gem.ruby_version < Gem::Version.new("2.4.a") then "0.81.0"
429
- elsif Gem.ruby_version < Gem::Version.new("2.5.a") then "1.12"
430
- else
431
- "1.21"
432
- end
438
+ "1.21"
433
439
  end
434
440
 
435
441
  def standard_version
436
- if Gem.ruby_version < Gem::Version.new("2.4.a") then "0.2.5"
437
- elsif Gem.ruby_version < Gem::Version.new("2.5.a") then "1.0"
438
- else
439
- "1.3"
442
+ "1.3"
443
+ end
444
+
445
+ # TODO: remove at next minor release
446
+ def travis_removal_info
447
+ if options[:ci] == "travis"
448
+ Bundler.ui.error "Support for Travis CI was removed from gem skeleton generator."
449
+ exit 1
450
+ end
451
+
452
+ if Bundler.settings["gem.ci"] == "travis"
453
+ Bundler.ui.error "Support for Travis CI was removed from gem skeleton generator, but it is present in bundle config. Please configure another provider using `bundle config set gem.ci SERVICE` (where SERVICE is one of github/gitlab/circle) or unset configuration using `bundle config unset gem.ci`."
454
+ exit 1
455
+ end
456
+ end
457
+
458
+ def validate_rust_builder_rubygems_version
459
+ if Gem::Version.new(rust_builder_required_rubygems_version) > Gem.rubygems_version
460
+ Bundler.ui.error "Your RubyGems version (#{Gem.rubygems_version}) is too old to build Rust extension. Please update your RubyGems using `gem update --system` or any other way and try again."
461
+ exit 1
440
462
  end
441
463
  end
442
464
  end
@@ -94,9 +94,8 @@ module Bundler
94
94
 
95
95
  def warn_if_root
96
96
  return if Bundler.settings[:silence_root_warning] || Gem.win_platform? || !Process.uid.zero?
97
- Bundler.ui.warn "Don't run Bundler as root. Bundler can ask for sudo " \
98
- "if it is needed, and installing your bundle as root will break this " \
99
- "application for all non-root users on this machine.", :wrap => true
97
+ Bundler.ui.warn "Don't run Bundler as root. Installing your bundle as root " \
98
+ "will break this application for all non-root users on this machine.", :wrap => true
100
99
  end
101
100
 
102
101
  def dependencies_count_for(definition)
@@ -15,19 +15,22 @@ module Bundler
15
15
  end
16
16
 
17
17
  print = options[:print]
18
- ui = Bundler.ui
19
- Bundler.ui = UI::Silent.new if print
18
+ previous_ui_level = Bundler.ui.level
19
+ Bundler.ui.level = "silent" if print
20
20
 
21
21
  Bundler::Fetcher.disable_endpoint = options["full-index"]
22
22
 
23
23
  update = options[:update]
24
24
  conservative = options[:conservative]
25
+ bundler = options[:bundler]
25
26
 
26
27
  if update.is_a?(Array) # unlocking specific gems
27
28
  Bundler::CLI::Common.ensure_all_gems_in_lockfile!(update)
28
29
  update = { :gems => update, :conservative => conservative }
29
- elsif update
30
- update = { :conservative => conservative } if conservative
30
+ elsif update && conservative
31
+ update = { :conservative => conservative }
32
+ elsif update && bundler
33
+ update = { :bundler => bundler }
31
34
  end
32
35
  definition = Bundler.definition(update)
33
36
 
@@ -61,7 +64,7 @@ module Bundler
61
64
  definition.lock(file)
62
65
  end
63
66
 
64
- Bundler.ui = ui
67
+ Bundler.ui.level = previous_ui_level
65
68
  end
66
69
  end
67
70
  end
@@ -2,23 +2,25 @@
2
2
 
3
3
  module Bundler
4
4
  class CLI::Open
5
- attr_reader :options, :name
5
+ attr_reader :options, :name, :path
6
6
  def initialize(options, name)
7
7
  @options = options
8
8
  @name = name
9
+ @path = options[:path] unless options[:path].nil?
9
10
  end
10
11
 
11
12
  def run
13
+ raise InvalidOption, "Cannot specify `--path` option without a value" if !@path.nil? && @path.empty?
12
14
  editor = [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? }
13
15
  return Bundler.ui.info("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") unless editor
14
16
  return unless spec = Bundler::CLI::Common.select_spec(name, :regex_match)
15
17
  if spec.default_gem?
16
18
  Bundler.ui.info "Unable to open #{name} because it's a default gem, so the directory it would normally be installed to does not exist."
17
19
  else
18
- path = spec.full_gem_path
19
- Dir.chdir(path) do
20
+ root_path = spec.full_gem_path
21
+ Dir.chdir(root_path) do
20
22
  require "shellwords"
21
- command = Shellwords.split(editor) + [path]
23
+ command = Shellwords.split(editor) << File.join([root_path, path].compact)
22
24
  Bundler.with_original_env do
23
25
  system(*command)
24
26
  end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
@@ -111,9 +111,7 @@ module Bundler
111
111
  end.compact
112
112
 
113
113
  if options[:parseable]
114
- relevant_outdated_gems.each do |gems|
115
- print_gems(gems)
116
- end
114
+ print_gems(relevant_outdated_gems)
117
115
  else
118
116
  print_gems_table(relevant_outdated_gems)
119
117
  end
@@ -23,7 +23,7 @@ module Bundler
23
23
  Bundler.ui.warn "Make sure you have the graphviz ruby gem. You can install it with:"
24
24
  Bundler.ui.warn "`gem install ruby-graphviz`"
25
25
  rescue StandardError => e
26
- raise unless e.message =~ /GraphViz not installed or dot not in PATH/
26
+ raise unless e.message.to_s.include?("GraphViz not installed or dot not in PATH")
27
27
  Bundler.ui.error e.message
28
28
  Bundler.ui.warn "Please install GraphViz. On a Mac with Homebrew, you can run `brew install graphviz`."
29
29
  end
data/lib/bundler/cli.rb CHANGED
@@ -10,6 +10,7 @@ module Bundler
10
10
 
11
11
  AUTO_INSTALL_CMDS = %w[show binstubs outdated exec open console licenses clean].freeze
12
12
  PARSEABLE_COMMANDS = %w[check config help exec platform show version].freeze
13
+ EXTENSIONS = ["c", "rust"].freeze
13
14
 
14
15
  COMMAND_ALIASES = {
15
16
  "check" => "c",
@@ -22,6 +23,8 @@ module Bundler
22
23
  }.freeze
23
24
 
24
25
  def self.start(*)
26
+ check_deprecated_ext_option(ARGV) if ARGV.include?("--ext")
27
+
25
28
  super
26
29
  ensure
27
30
  Bundler::SharedHelpers.print_major_deprecations!
@@ -292,6 +295,8 @@ module Bundler
292
295
  "Prefer updating only to next minor version"
293
296
  method_option "major", :type => :boolean, :banner =>
294
297
  "Prefer updating to next major version (default)"
298
+ method_option "pre", :type => :boolean, :banner =>
299
+ "Always choose the highest allowed version when updating gems, regardless of prerelease status"
295
300
  method_option "strict", :type => :boolean, :banner =>
296
301
  "Do not allow any gem to be updated past latest --patch | --minor | --major"
297
302
  method_option "conservative", :type => :boolean, :banner =>
@@ -504,6 +509,7 @@ module Bundler
504
509
  subcommand "config", Config
505
510
 
506
511
  desc "open GEM", "Opens the source directory of the given bundled gem"
512
+ method_option "path", :type => :string, :lazy_default => "", :banner => "Open relative path of the gem source."
507
513
  def open(name)
508
514
  require_relative "cli/open"
509
515
  Open.new(options, name).run
@@ -574,7 +580,7 @@ module Bundler
574
580
  method_option :edit, :type => :string, :aliases => "-e", :required => false, :banner => "EDITOR",
575
581
  :lazy_default => [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? },
576
582
  :desc => "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
577
- method_option :ext, :type => :boolean, :default => false, :desc => "Generate the boilerplate for C extension code"
583
+ method_option :ext, :type => :string, :desc => "Generate the boilerplate for C extension code.", :enum => EXTENSIONS
578
584
  method_option :git, :type => :boolean, :default => true, :desc => "Initialize a git repo inside your library."
579
585
  method_option :mit, :type => :boolean, :desc => "Generate an MIT license file. Set a default with `bundle config set --global gem.mit true`."
580
586
  method_option :rubocop, :type => :boolean, :desc => "Add rubocop to the generated Rakefile and gemspec. Set a default with `bundle config set --global gem.rubocop true`."
@@ -582,7 +588,7 @@ module Bundler
582
588
  method_option :test, :type => :string, :lazy_default => Bundler.settings["gem.test"] || "", :aliases => "-t", :banner => "Use the specified test framework for your library",
583
589
  :desc => "Generate a test directory for your library, either rspec, minitest or test-unit. Set a default with `bundle config set --global gem.test (rspec|minitest|test-unit)`."
584
590
  method_option :ci, :type => :string, :lazy_default => Bundler.settings["gem.ci"] || "",
585
- :desc => "Generate CI configuration, either GitHub Actions, Travis CI, GitLab CI or CircleCI. Set a default with `bundle config set --global gem.ci (github|travis|gitlab|circle)`"
591
+ :desc => "Generate CI configuration, either GitHub Actions, GitLab CI or CircleCI. Set a default with `bundle config set --global gem.ci (github|gitlab|circle)`"
586
592
  method_option :linter, :type => :string, :lazy_default => Bundler.settings["gem.linter"] || "",
587
593
  :desc => "Add a linter and code formatter, either RuboCop or Standard. Set a default with `bundle config set --global gem.linter (rubocop|standard)`"
588
594
  method_option :github_username, :type => :string, :default => Bundler.settings["gem.github_username"], :banner => "Set your username on GitHub", :desc => "Fill in GitHub username on README so that you don't have to do it manually. Set a default with `bundle config set --global gem.github_username <your_username>`."
@@ -668,10 +674,14 @@ module Bundler
668
674
  "If updating, prefer updating only to next minor version"
669
675
  method_option "major", :type => :boolean, :banner =>
670
676
  "If updating, prefer updating to next major version (default)"
677
+ method_option "pre", :type => :boolean, :banner =>
678
+ "If updating, always choose the highest allowed version, regardless of prerelease status"
671
679
  method_option "strict", :type => :boolean, :banner =>
672
680
  "If updating, do not allow any gem to be updated past latest --patch | --minor | --major"
673
681
  method_option "conservative", :type => :boolean, :banner =>
674
682
  "If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"
683
+ method_option "bundler", :type => :string, :lazy_default => "> 0.a", :banner =>
684
+ "Update the locked version of bundler"
675
685
  def lock
676
686
  require_relative "cli/lock"
677
687
  Lock.new(options).run
@@ -749,6 +759,38 @@ module Bundler
749
759
  end
750
760
  end
751
761
 
762
+ def self.check_deprecated_ext_option(arguments)
763
+ # when deprecated version of `--ext` is called
764
+ # print out deprecation warning and pretend `--ext=c` was provided
765
+ if deprecated_ext_value?(arguments)
766
+ SharedHelpers.major_deprecation 2, "Extensions can now be generated using C or Rust, so `--ext` with no arguments has been deprecated. Please select a language, e.g. `--ext=rust` to generate a Rust extension. This gem will now be generated as if `--ext=c` was used."
767
+ arguments[arguments.index("--ext")] = "--ext=c"
768
+ end
769
+ end
770
+
771
+ def self.deprecated_ext_value?(arguments)
772
+ index = arguments.index("--ext")
773
+ next_argument = arguments[index+1]
774
+
775
+ # it is ok when --ext is followed with valid extension value
776
+ # for example `bundle gem hello --ext c`
777
+ return false if EXTENSIONS.include?(next_argument)
778
+
779
+ # deprecated call when --ext is called with no value in last position
780
+ # for example `bundle gem hello_gem --ext`
781
+ return true if next_argument.nil?
782
+
783
+ # deprecated call when --ext is followed by other parameter
784
+ # for example `bundle gem --ext --no-ci hello_gem`
785
+ return true if next_argument.start_with?("-")
786
+
787
+ # deprecated call when --ext is followed by gem name
788
+ # for example `bundle gem --ext hello_gem`
789
+ return true if next_argument
790
+
791
+ false
792
+ end
793
+
752
794
  private
753
795
 
754
796
  # Automatically invoke `bundle install` and resume if