bundler 2.2.29 → 2.5.16

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 (330) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1129 -4
  3. data/README.md +4 -8
  4. data/bundler.gemspec +11 -11
  5. data/exe/bundle +5 -26
  6. data/exe/bundler +1 -1
  7. data/lib/bundler/.document +1 -0
  8. data/lib/bundler/build_metadata.rb +4 -4
  9. data/lib/bundler/capistrano.rb +1 -1
  10. data/lib/bundler/checksum.rb +254 -0
  11. data/lib/bundler/ci_detector.rb +75 -0
  12. data/lib/bundler/cli/add.rb +4 -4
  13. data/lib/bundler/cli/binstubs.rb +10 -6
  14. data/lib/bundler/cli/cache.rb +1 -1
  15. data/lib/bundler/cli/check.rb +3 -3
  16. data/lib/bundler/cli/common.rb +13 -3
  17. data/lib/bundler/cli/config.rb +18 -8
  18. data/lib/bundler/cli/console.rb +5 -4
  19. data/lib/bundler/cli/doctor.rb +12 -5
  20. data/lib/bundler/cli/exec.rb +1 -1
  21. data/lib/bundler/cli/fund.rb +1 -1
  22. data/lib/bundler/cli/gem.rb +141 -48
  23. data/lib/bundler/cli/info.rb +27 -17
  24. data/lib/bundler/cli/init.rb +6 -2
  25. data/lib/bundler/cli/install.rb +22 -39
  26. data/lib/bundler/cli/issue.rb +5 -4
  27. data/lib/bundler/cli/lock.rb +36 -29
  28. data/lib/bundler/cli/open.rb +9 -9
  29. data/lib/bundler/cli/outdated.rb +19 -12
  30. data/lib/bundler/cli/platform.rb +8 -6
  31. data/lib/bundler/cli/plugin.rb +9 -15
  32. data/lib/bundler/cli/pristine.rb +38 -30
  33. data/lib/bundler/cli/show.rb +3 -3
  34. data/lib/bundler/cli/update.rb +12 -7
  35. data/lib/bundler/cli/viz.rb +1 -1
  36. data/lib/bundler/cli.rb +266 -285
  37. data/lib/bundler/compact_index_client/cache.rb +53 -67
  38. data/lib/bundler/compact_index_client/cache_file.rb +153 -0
  39. data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  40. data/lib/bundler/compact_index_client/parser.rb +84 -0
  41. data/lib/bundler/compact_index_client/updater.rb +83 -76
  42. data/lib/bundler/compact_index_client.rb +59 -87
  43. data/lib/bundler/constants.rb +9 -2
  44. data/lib/bundler/current_ruby.rb +12 -16
  45. data/lib/bundler/definition.rb +509 -319
  46. data/lib/bundler/dependency.rb +33 -71
  47. data/lib/bundler/digest.rb +71 -0
  48. data/lib/bundler/dsl.rb +88 -69
  49. data/lib/bundler/endpoint_specification.rb +32 -15
  50. data/lib/bundler/env.rb +5 -7
  51. data/lib/bundler/environment_preserver.rb +8 -22
  52. data/lib/bundler/errors.rb +101 -13
  53. data/lib/bundler/feature_flag.rb +0 -2
  54. data/lib/bundler/fetcher/base.rb +11 -11
  55. data/lib/bundler/fetcher/compact_index.rb +32 -52
  56. data/lib/bundler/fetcher/dependency.rb +3 -7
  57. data/lib/bundler/fetcher/downloader.rb +17 -16
  58. data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  59. data/lib/bundler/fetcher/index.rb +2 -29
  60. data/lib/bundler/fetcher.rb +87 -79
  61. data/lib/bundler/force_platform.rb +18 -0
  62. data/lib/bundler/friendly_errors.rb +29 -40
  63. data/lib/bundler/gem_helper.rb +11 -23
  64. data/lib/bundler/gem_helpers.rb +30 -6
  65. data/lib/bundler/gem_version_promoter.rb +68 -109
  66. data/lib/bundler/graph.rb +9 -9
  67. data/lib/bundler/index.rb +71 -79
  68. data/lib/bundler/injector.rb +23 -11
  69. data/lib/bundler/inline.rb +11 -23
  70. data/lib/bundler/installer/gem_installer.rb +18 -11
  71. data/lib/bundler/installer/parallel_installer.rb +17 -65
  72. data/lib/bundler/installer/standalone.rb +56 -15
  73. data/lib/bundler/installer.rb +35 -61
  74. data/lib/bundler/lazy_specification.rb +92 -61
  75. data/lib/bundler/lockfile_generator.rb +12 -3
  76. data/lib/bundler/lockfile_parser.rb +137 -70
  77. data/lib/bundler/man/bundle-add.1 +19 -26
  78. data/lib/bundler/man/bundle-add.1.ronn +16 -4
  79. data/lib/bundler/man/bundle-binstubs.1 +4 -16
  80. data/lib/bundler/man/bundle-cache.1 +9 -24
  81. data/lib/bundler/man/bundle-cache.1.ronn +9 -2
  82. data/lib/bundler/man/bundle-check.1 +5 -12
  83. data/lib/bundler/man/bundle-check.1.ronn +3 -0
  84. data/lib/bundler/man/bundle-clean.1 +4 -11
  85. data/lib/bundler/man/bundle-clean.1.ronn +1 -1
  86. data/lib/bundler/man/bundle-config.1 +47 -224
  87. data/lib/bundler/man/bundle-config.1.ronn +40 -28
  88. data/lib/bundler/man/bundle-console.1 +35 -0
  89. data/lib/bundler/man/bundle-console.1.ronn +44 -0
  90. data/lib/bundler/man/bundle-doctor.1 +4 -18
  91. data/lib/bundler/man/bundle-exec.1 +16 -77
  92. data/lib/bundler/man/bundle-exec.1.ronn +8 -9
  93. data/lib/bundler/man/bundle-gem.1 +45 -72
  94. data/lib/bundler/man/bundle-gem.1.ronn +32 -5
  95. data/lib/bundler/man/bundle-help.1 +9 -0
  96. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  97. data/lib/bundler/man/bundle-info.1 +5 -11
  98. data/lib/bundler/man/bundle-info.1.ronn +3 -3
  99. data/lib/bundler/man/bundle-init.1 +6 -11
  100. data/lib/bundler/man/bundle-init.1.ronn +2 -0
  101. data/lib/bundler/man/bundle-inject.1 +8 -18
  102. data/lib/bundler/man/bundle-inject.1.ronn +3 -1
  103. data/lib/bundler/man/bundle-install.1 +32 -155
  104. data/lib/bundler/man/bundle-install.1.ronn +11 -33
  105. data/lib/bundler/man/bundle-list.1 +4 -19
  106. data/lib/bundler/man/bundle-lock.1 +5 -29
  107. data/lib/bundler/man/bundle-open.1 +18 -18
  108. data/lib/bundler/man/bundle-open.1.ronn +9 -1
  109. data/lib/bundler/man/bundle-outdated.1 +17 -72
  110. data/lib/bundler/man/bundle-outdated.1.ronn +13 -18
  111. data/lib/bundler/man/bundle-platform.1 +16 -28
  112. data/lib/bundler/man/bundle-platform.1.ronn +14 -7
  113. data/lib/bundler/man/bundle-plugin.1 +58 -0
  114. data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  115. data/lib/bundler/man/bundle-pristine.1 +5 -16
  116. data/lib/bundler/man/bundle-remove.1 +4 -14
  117. data/lib/bundler/man/bundle-show.1 +3 -10
  118. data/lib/bundler/man/bundle-update.1 +19 -138
  119. data/lib/bundler/man/bundle-update.1.ronn +2 -1
  120. data/lib/bundler/man/bundle-version.1 +22 -0
  121. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  122. data/lib/bundler/man/bundle-viz.1 +6 -15
  123. data/lib/bundler/man/bundle-viz.1.ronn +2 -0
  124. data/lib/bundler/man/bundle.1 +17 -51
  125. data/lib/bundler/man/bundle.1.ronn +12 -7
  126. data/lib/bundler/man/gemfile.5 +130 -346
  127. data/lib/bundler/man/gemfile.5.ronn +121 -86
  128. data/lib/bundler/man/index.txt +4 -0
  129. data/lib/bundler/match_metadata.rb +17 -0
  130. data/lib/bundler/match_platform.rb +1 -2
  131. data/lib/bundler/match_remote_metadata.rb +29 -0
  132. data/lib/bundler/mirror.rb +8 -10
  133. data/lib/bundler/plugin/api/source.rb +9 -13
  134. data/lib/bundler/plugin/index.rb +13 -5
  135. data/lib/bundler/plugin/installer/git.rb +0 -4
  136. data/lib/bundler/plugin/installer/path.rb +18 -0
  137. data/lib/bundler/plugin/installer/rubygems.rb +0 -8
  138. data/lib/bundler/plugin/installer.rb +42 -19
  139. data/lib/bundler/plugin/source_list.rb +4 -4
  140. data/lib/bundler/plugin.rb +16 -7
  141. data/lib/bundler/process_lock.rb +1 -1
  142. data/lib/bundler/remote_specification.rb +11 -5
  143. data/lib/bundler/resolver/base.rb +111 -0
  144. data/lib/bundler/resolver/candidate.rb +82 -0
  145. data/lib/bundler/resolver/incompatibility.rb +15 -0
  146. data/lib/bundler/resolver/package.rb +81 -0
  147. data/lib/bundler/resolver/root.rb +25 -0
  148. data/lib/bundler/resolver/spec_group.rb +53 -66
  149. data/lib/bundler/resolver.rb +419 -307
  150. data/lib/bundler/retry.rb +1 -1
  151. data/lib/bundler/ruby_dsl.rb +42 -7
  152. data/lib/bundler/ruby_version.rb +16 -22
  153. data/lib/bundler/rubygems_ext.rb +250 -64
  154. data/lib/bundler/rubygems_gem_installer.rb +90 -64
  155. data/lib/bundler/rubygems_integration.rb +81 -190
  156. data/lib/bundler/runtime.rb +8 -13
  157. data/lib/bundler/safe_marshal.rb +31 -0
  158. data/lib/bundler/self_manager.rb +206 -0
  159. data/lib/bundler/settings.rb +139 -57
  160. data/lib/bundler/setup.rb +13 -1
  161. data/lib/bundler/shared_helpers.rb +67 -36
  162. data/lib/bundler/source/git/git_proxy.rb +285 -82
  163. data/lib/bundler/source/git.rb +81 -41
  164. data/lib/bundler/source/metadata.rb +17 -16
  165. data/lib/bundler/source/path/installer.rb +1 -22
  166. data/lib/bundler/source/path.rb +13 -25
  167. data/lib/bundler/source/rubygems/remote.rb +1 -1
  168. data/lib/bundler/source/rubygems.rb +164 -234
  169. data/lib/bundler/source/rubygems_aggregate.rb +1 -1
  170. data/lib/bundler/source.rb +7 -6
  171. data/lib/bundler/source_list.rb +40 -32
  172. data/lib/bundler/source_map.rb +15 -2
  173. data/lib/bundler/spec_set.rb +156 -46
  174. data/lib/bundler/stub_specification.rb +18 -5
  175. data/lib/bundler/templates/Executable +3 -5
  176. data/lib/bundler/templates/Executable.bundler +7 -12
  177. data/lib/bundler/templates/Executable.standalone +4 -4
  178. data/lib/bundler/templates/Gemfile +0 -2
  179. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  180. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  181. data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  182. data/lib/bundler/templates/newgem/README.md.tt +7 -11
  183. data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
  184. data/lib/bundler/templates/newgem/bin/console.tt +0 -4
  185. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  186. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  187. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  188. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  189. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  190. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  191. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +13 -3
  192. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  193. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  194. data/lib/bundler/templates/newgem/newgem.gemspec.tt +25 -17
  195. data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  196. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  197. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  198. data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  199. data/lib/bundler/ui/rg_proxy.rb +1 -1
  200. data/lib/bundler/ui/shell.rb +38 -15
  201. data/lib/bundler/ui/silent.rb +21 -5
  202. data/lib/bundler/uri_credentials_filter.rb +2 -2
  203. data/lib/bundler/uri_normalizer.rb +23 -0
  204. data/lib/bundler/vendor/.document +1 -0
  205. data/lib/bundler/vendor/connection_pool/.document +1 -0
  206. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  207. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  208. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  209. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  210. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
  211. data/lib/bundler/vendor/fileutils/.document +1 -0
  212. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  213. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1340 -410
  214. data/lib/bundler/vendor/net-http-persistent/.document +1 -0
  215. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  216. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  217. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  218. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  219. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +57 -57
  220. data/lib/bundler/vendor/pub_grub/.document +1 -0
  221. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  222. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  223. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  224. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  225. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  226. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  227. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  228. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  229. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  230. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  231. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  232. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  233. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  234. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  235. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  236. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  237. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  238. data/lib/bundler/vendor/thor/.document +1 -0
  239. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  240. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  241. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  242. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  243. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +12 -14
  244. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
  245. data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
  246. data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  247. data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  248. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
  249. data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
  250. data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  251. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  252. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  253. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  254. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  255. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  256. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +63 -7
  257. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  258. data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  259. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +48 -154
  260. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
  261. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  262. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +0 -45
  263. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  264. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  265. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  266. data/lib/bundler/vendor/thor/lib/thor/shell.rb +2 -2
  267. data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
  268. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  269. data/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  270. data/lib/bundler/vendor/tsort/.document +1 -0
  271. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  272. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  273. data/lib/bundler/vendor/uri/.document +1 -0
  274. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  275. data/lib/bundler/vendor/uri/lib/uri/common.rb +316 -207
  276. data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  277. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
  278. data/lib/bundler/vendor/uri/lib/uri/generic.rb +33 -13
  279. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
  280. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
  281. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
  282. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  283. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
  284. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -23
  285. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +105 -47
  286. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  287. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  288. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  289. data/lib/bundler/vendor/uri/lib/uri.rb +3 -3
  290. data/lib/bundler/vendored_net_http.rb +23 -0
  291. data/lib/bundler/vendored_persistent.rb +0 -36
  292. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  293. data/lib/bundler/vendored_timeout.rb +12 -0
  294. data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
  295. data/lib/bundler/vendored_uri.rb +18 -1
  296. data/lib/bundler/version.rb +5 -1
  297. data/lib/bundler/vlad.rb +1 -1
  298. data/lib/bundler/worker.rb +7 -9
  299. data/lib/bundler/yaml_serializer.rb +21 -12
  300. data/lib/bundler.rb +114 -121
  301. metadata +87 -41
  302. data/lib/bundler/dep_proxy.rb +0 -55
  303. data/lib/bundler/gemdeps.rb +0 -29
  304. data/lib/bundler/psyched_yaml.rb +0 -22
  305. data/lib/bundler/templates/gems.rb +0 -8
  306. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  307. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  308. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  309. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  310. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  311. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  312. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  313. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  314. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  315. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  316. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  317. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  318. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  319. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  320. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  321. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  322. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  323. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  324. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  325. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  326. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  327. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  328. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  329. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  330. data/lib/bundler/version_ranges.rb +0 -122
@@ -2,17 +2,17 @@
2
2
 
3
3
  module Bundler
4
4
  class CLI::Config < Thor
5
- class_option :parseable, :type => :boolean, :banner => "Use minimal formatting for more parseable output"
5
+ class_option :parseable, type: :boolean, banner: "Use minimal formatting for more parseable output"
6
6
 
7
7
  def self.scope_options
8
- method_option :global, :type => :boolean, :banner => "Only change the global config"
9
- method_option :local, :type => :boolean, :banner => "Only change the local config"
8
+ method_option :global, type: :boolean, banner: "Only change the global config"
9
+ method_option :local, type: :boolean, banner: "Only change the local config"
10
10
  end
11
11
  private_class_method :scope_options
12
12
 
13
- desc "base NAME [VALUE]", "The Bundler 1 config interface", :hide => true
13
+ desc "base NAME [VALUE]", "The Bundler 1 config interface", hide: true
14
14
  scope_options
15
- method_option :delete, :type => :boolean, :banner => "delete"
15
+ method_option :delete, type: :boolean, banner: "delete"
16
16
  def base(name = nil, *value)
17
17
  new_args =
18
18
  if ARGV.size == 1
@@ -25,8 +25,9 @@ module Bundler
25
25
  ["config", "get", ARGV[1]]
26
26
  end
27
27
 
28
- SharedHelpers.major_deprecation 3,
29
- "Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle #{new_args.join(" ")}` instead."
28
+ message = "Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle #{new_args.join(" ")}` instead."
29
+ removed_message = "Using the `config` command without a subcommand [list, get, set, unset] is has been removed. Use `bundle #{new_args.join(" ")}` instead."
30
+ SharedHelpers.major_deprecation 3, message, removed_message: removed_message
30
31
 
31
32
  Base.new(options, name, value, self).run
32
33
  end
@@ -180,7 +181,7 @@ module Bundler
180
181
  scopes = %w[global local].select {|s| options[s] }
181
182
  case scopes.size
182
183
  when 0
183
- @scope = "global"
184
+ @scope = inside_app? ? "local" : "global"
184
185
  @explicit_scope = false
185
186
  when 1
186
187
  @scope = scopes.first
@@ -189,6 +190,15 @@ module Bundler
189
190
  "The options #{scopes.join " and "} were specified. Please only use one of the switches at a time."
190
191
  end
191
192
  end
193
+
194
+ private
195
+
196
+ def inside_app?
197
+ Bundler.root
198
+ true
199
+ rescue GemfileNotFound
200
+ false
201
+ end
192
202
  end
193
203
  end
194
204
  end
@@ -9,8 +9,9 @@ module Bundler
9
9
  end
10
10
 
11
11
  def run
12
- Bundler::SharedHelpers.major_deprecation 2, "bundle console will be replaced " \
13
- "by `bin/console` generated by `bundle gem <name>`"
12
+ message = "bundle console will be replaced by `bin/console` generated by `bundle gem <name>`"
13
+ removed_message = "bundle console has been replaced by `bin/console` generated by `bundle gem <name>`"
14
+ Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
14
15
 
15
16
  group ? Bundler.require(:default, *group.split(" ").map!(&:to_sym)) : Bundler.require
16
17
  ARGV.clear
@@ -30,9 +31,9 @@ module Bundler
30
31
 
31
32
  def get_constant(name)
32
33
  const_name = {
33
- "pry" => :Pry,
34
+ "pry" => :Pry,
34
35
  "ripl" => :Ripl,
35
- "irb" => :IRB,
36
+ "irb" => :IRB,
36
37
  }[name]
37
38
  Object.const_get(const_name)
38
39
  rescue NameError
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rbconfig"
4
+ require "shellwords"
5
+ require "fiddle"
4
6
 
5
7
  module Bundler
6
8
  class CLI::Doctor
7
- DARWIN_REGEX = /\s+(.+) \(compatibility /.freeze
8
- LDD_REGEX = /\t\S+ => (\S+) \(\S+\)/.freeze
9
+ DARWIN_REGEX = /\s+(.+) \(compatibility /
10
+ LDD_REGEX = /\t\S+ => (\S+) \(\S+\)/
9
11
 
10
12
  attr_reader :options
11
13
 
@@ -22,14 +24,14 @@ module Bundler
22
24
  end
23
25
 
24
26
  def dylibs_darwin(path)
25
- output = `/usr/bin/otool -L "#{path}"`.chomp
27
+ output = `/usr/bin/otool -L #{path.shellescape}`.chomp
26
28
  dylibs = output.split("\n")[1..-1].map {|l| l.match(DARWIN_REGEX).captures[0] }.uniq
27
29
  # ignore @rpath and friends
28
30
  dylibs.reject {|dylib| dylib.start_with? "@" }
29
31
  end
30
32
 
31
33
  def dylibs_ldd(path)
32
- output = `/usr/bin/ldd "#{path}"`.chomp
34
+ output = `/usr/bin/ldd #{path.shellescape}`.chomp
33
35
  output.split("\n").map do |l|
34
36
  match = l.match(LDD_REGEX)
35
37
  next if match.nil?
@@ -70,7 +72,12 @@ module Bundler
70
72
 
71
73
  definition.specs.each do |spec|
72
74
  bundles_for_gem(spec).each do |bundle|
73
- bad_paths = dylibs(bundle).select {|f| !File.exist?(f) }
75
+ bad_paths = dylibs(bundle).select do |f|
76
+ Fiddle.dlopen(f)
77
+ false
78
+ rescue Fiddle::DLError
79
+ true
80
+ end
74
81
  if bad_paths.any?
75
82
  broken_links[spec] ||= []
76
83
  broken_links[spec].concat(bad_paths)
@@ -12,7 +12,7 @@ module Bundler
12
12
  @options = options
13
13
  @cmd = args.shift
14
14
  @args = args
15
- @args << { :close_others => !options.keep_file_descriptors? } unless Bundler.current_ruby.jruby?
15
+ @args << { close_others: !options.keep_file_descriptors? } unless Bundler.current_ruby.jruby?
16
16
  end
17
17
 
18
18
  def run
@@ -16,7 +16,7 @@ module Bundler
16
16
  deps = if groups.any?
17
17
  Bundler.definition.dependencies_for(groups)
18
18
  else
19
- Bundler.definition.current_dependencies
19
+ Bundler.definition.requested_dependencies
20
20
  end
21
21
 
22
22
  fund_info = deps.each_with_object([]) do |dep, arr|
@@ -11,11 +11,11 @@ module Bundler
11
11
  class CLI::Gem
12
12
  TEST_FRAMEWORK_VERSIONS = {
13
13
  "rspec" => "3.0",
14
- "minitest" => "5.0",
14
+ "minitest" => "5.16",
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,10 @@ 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"
32
35
  end
33
36
 
34
37
  def run
@@ -38,6 +41,7 @@ module Bundler
38
41
  namespaced_path = name.tr("-", "/")
39
42
  constant_name = name.gsub(/-[_-]*(?![_-]|$)/) { "::" }.gsub(/([_-]+|(::)|^)(.|$)/) { $2.to_s + $3.upcase }
40
43
  constant_array = constant_name.split("::")
44
+ minitest_constant_name = constant_array.clone.tap {|a| a[-1] = "Test#{a[-1]}" }.join("::") # Foo::Bar => Foo::TestBar
41
45
 
42
46
  use_git = Bundler.git_present? && options[:git]
43
47
 
@@ -54,21 +58,23 @@ module Bundler
54
58
  end
55
59
 
56
60
  config = {
57
- :name => name,
58
- :underscored_name => underscored_name,
59
- :namespaced_path => namespaced_path,
60
- :makefile_path => "#{underscored_name}/#{underscored_name}",
61
- :constant_name => constant_name,
62
- :constant_array => constant_array,
63
- :author => git_author_name.empty? ? "TODO: Write your name" : git_author_name,
64
- :email => git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
65
- :test => options[:test],
66
- :ext => options[:ext],
67
- :exe => options[:exe],
68
- :bundler_version => bundler_dependency_version,
69
- :git => use_git,
70
- :github_username => github_username.empty? ? "[USERNAME]" : github_username,
71
- :required_ruby_version => required_ruby_version,
61
+ name: name,
62
+ underscored_name: underscored_name,
63
+ namespaced_path: namespaced_path,
64
+ makefile_path: "#{underscored_name}/#{underscored_name}",
65
+ constant_name: constant_name,
66
+ constant_array: constant_array,
67
+ author: git_author_name.empty? ? "TODO: Write your name" : git_author_name,
68
+ email: git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
69
+ test: options[:test],
70
+ ext: extension,
71
+ exe: options[:exe],
72
+ bundler_version: bundler_dependency_version,
73
+ git: use_git,
74
+ github_username: github_username.empty? ? "[USERNAME]" : github_username,
75
+ required_ruby_version: required_ruby_version,
76
+ rust_builder_required_rubygems_version: rust_builder_required_rubygems_version,
77
+ minitest_constant_name: minitest_constant_name,
72
78
  }
73
79
  ensure_safe_gem_name(name, constant_array)
74
80
 
@@ -76,6 +82,7 @@ module Bundler
76
82
  "#{Bundler.preferred_gemfile_name}.tt" => Bundler.preferred_gemfile_name,
77
83
  "lib/newgem.rb.tt" => "lib/#{namespaced_path}.rb",
78
84
  "lib/newgem/version.rb.tt" => "lib/#{namespaced_path}/version.rb",
85
+ "sig/newgem.rbs.tt" => "sig/#{namespaced_path}.rbs",
79
86
  "newgem.gemspec.tt" => "#{name}.gemspec",
80
87
  "Rakefile.tt" => "Rakefile",
81
88
  "README.md.tt" => "README.md",
@@ -103,9 +110,17 @@ module Bundler
103
110
  )
104
111
  config[:test_task] = :spec
105
112
  when "minitest"
113
+ # Generate path for minitest target file (FileList["test/**/test_*.rb"])
114
+ # foo => test/test_foo.rb
115
+ # foo-bar => test/foo/test_bar.rb
116
+ # foo_bar => test/test_foo_bar.rb
117
+ paths = namespaced_path.rpartition("/")
118
+ paths[2] = "test_#{paths[2]}"
119
+ minitest_namespaced_path = paths.join("")
120
+
106
121
  templates.merge!(
107
122
  "test/minitest/test_helper.rb.tt" => "test/test_helper.rb",
108
- "test/minitest/newgem_test.rb.tt" => "test/#{namespaced_path}_test.rb"
123
+ "test/minitest/test_newgem.rb.tt" => "test/#{minitest_namespaced_path}.rb"
109
124
  )
110
125
  config[:test_task] = :test
111
126
  when "test-unit"
@@ -121,12 +136,13 @@ module Bundler
121
136
  case config[:ci]
122
137
  when "github"
123
138
  templates.merge!("github/workflows/main.yml.tt" => ".github/workflows/main.yml")
124
- when "travis"
125
- templates.merge!("travis.yml.tt" => ".travis.yml")
139
+ config[:ci_config_path] = ".github "
126
140
  when "gitlab"
127
141
  templates.merge!("gitlab-ci.yml.tt" => ".gitlab-ci.yml")
142
+ config[:ci_config_path] = ".gitlab-ci.yml "
128
143
  when "circle"
129
144
  templates.merge!("circleci/config.yml.tt" => ".circleci/config.yml")
145
+ config[:ci_config_path] = ".circleci "
130
146
  end
131
147
 
132
148
  if ask_and_set(:mit, "Do you want to license your code permissively under the MIT license?",
@@ -163,27 +179,37 @@ module Bundler
163
179
  templates.merge!("CHANGELOG.md.tt" => "CHANGELOG.md")
164
180
  end
165
181
 
166
- if ask_and_set(:rubocop, "Do you want to add rubocop as a dependency for gems you generate?",
167
- "RuboCop is a static code analyzer that has out-of-the-box rules for many " \
168
- "of the guidelines in the community style guide. " \
169
- "For more information, see the RuboCop docs (https://docs.rubocop.org/en/stable/) " \
170
- "and the Ruby Style Guides (https://github.com/rubocop-hq/ruby-style-guide).")
171
- config[:rubocop] = true
172
- config[:rubocop_version] = rubocop_version
182
+ config[:linter] = ask_and_set_linter
183
+ case config[:linter]
184
+ when "rubocop"
185
+ config[:linter_version] = rubocop_version
173
186
  Bundler.ui.info "RuboCop enabled in config"
174
187
  templates.merge!("rubocop.yml.tt" => ".rubocop.yml")
188
+ when "standard"
189
+ config[:linter_version] = standard_version
190
+ Bundler.ui.info "Standard enabled in config"
191
+ templates.merge!("standard.yml.tt" => ".standard.yml")
175
192
  end
176
193
 
177
194
  templates.merge!("exe/newgem.tt" => "exe/#{name}") if config[:exe]
178
195
 
179
- if options[:ext]
196
+ if extension == "c"
180
197
  templates.merge!(
181
- "ext/newgem/extconf.rb.tt" => "ext/#{name}/extconf.rb",
198
+ "ext/newgem/extconf-c.rb.tt" => "ext/#{name}/extconf.rb",
182
199
  "ext/newgem/newgem.h.tt" => "ext/#{name}/#{underscored_name}.h",
183
200
  "ext/newgem/newgem.c.tt" => "ext/#{name}/#{underscored_name}.c"
184
201
  )
185
202
  end
186
203
 
204
+ if extension == "rust"
205
+ templates.merge!(
206
+ "Cargo.toml.tt" => "Cargo.toml",
207
+ "ext/newgem/Cargo.toml.tt" => "ext/#{name}/Cargo.toml",
208
+ "ext/newgem/extconf-rust.rb.tt" => "ext/#{name}/extconf.rb",
209
+ "ext/newgem/src/lib.rs.tt" => "ext/#{name}/src/lib.rs",
210
+ )
211
+ end
212
+
187
213
  if target.exist? && !target.directory?
188
214
  Bundler.ui.error "Couldn't create a new gem named `#{gem_name}` because there's an existing file named `#{gem_name}`."
189
215
  exit Bundler::BundlerError.all_errors[Bundler::GenericSystemCallError]
@@ -209,9 +235,7 @@ module Bundler
209
235
  end
210
236
 
211
237
  if use_git
212
- Dir.chdir(target) do
213
- `git add .`
214
- end
238
+ IO.popen(%w[git add .], { chdir: target }, &:read)
215
239
  end
216
240
 
217
241
  # Open gemspec in editor
@@ -251,6 +275,7 @@ module Bundler
251
275
  end
252
276
 
253
277
  def ask_and_set_test_framework
278
+ return if skip?(:test)
254
279
  test_framework = options[:test] || Bundler.settings["gem.test"]
255
280
 
256
281
  if test_framework.to_s.empty?
@@ -258,7 +283,7 @@ module Bundler
258
283
  Bundler.ui.info hint_text("test")
259
284
 
260
285
  result = Bundler.ui.ask "Enter a test framework. rspec/minitest/test-unit/(none):"
261
- if result =~ /rspec|minitest|test-unit/
286
+ if /rspec|minitest|test-unit/.match?(result)
262
287
  test_framework = result
263
288
  else
264
289
  test_framework = false
@@ -276,6 +301,10 @@ module Bundler
276
301
  test_framework
277
302
  end
278
303
 
304
+ def skip?(option)
305
+ options.key?(option) && options[option].nil?
306
+ end
307
+
279
308
  def hint_text(setting)
280
309
  if Bundler.settings["gem.#{setting}"] == false
281
310
  "Your choice will only be applied to this gem."
@@ -286,6 +315,7 @@ module Bundler
286
315
  end
287
316
 
288
317
  def ask_and_set_ci
318
+ return if skip?(:ci)
289
319
  ci_template = options[:ci] || Bundler.settings["gem.ci"]
290
320
 
291
321
  if ci_template.to_s.empty?
@@ -294,12 +324,11 @@ module Bundler
294
324
  "* CircleCI: https://circleci.com/\n" \
295
325
  "* GitHub Actions: https://github.com/features/actions\n" \
296
326
  "* GitLab CI: https://docs.gitlab.com/ee/ci/\n" \
297
- "* Travis CI: https://travis-ci.org/\n" \
298
327
  "\n"
299
328
  Bundler.ui.info hint_text("ci")
300
329
 
301
- result = Bundler.ui.ask "Enter a CI service. github/travis/gitlab/circle/(none):"
302
- if result =~ /github|travis|gitlab|circle/
330
+ result = Bundler.ui.ask "Enter a CI service. github/gitlab/circle/(none):"
331
+ if /github|gitlab|circle/.match?(result)
303
332
  ci_template = result
304
333
  else
305
334
  ci_template = false
@@ -317,6 +346,64 @@ module Bundler
317
346
  ci_template
318
347
  end
319
348
 
349
+ def ask_and_set_linter
350
+ return if skip?(:linter)
351
+ linter_template = options[:linter] || Bundler.settings["gem.linter"]
352
+ linter_template = deprecated_rubocop_option if linter_template.nil?
353
+
354
+ if linter_template.to_s.empty?
355
+ Bundler.ui.confirm "Do you want to add a code linter and formatter to your gem? " \
356
+ "Supported Linters:\n" \
357
+ "* RuboCop: https://rubocop.org\n" \
358
+ "* Standard: https://github.com/standardrb/standard\n" \
359
+ "\n"
360
+ Bundler.ui.info hint_text("linter")
361
+
362
+ result = Bundler.ui.ask "Enter a linter. rubocop/standard/(none):"
363
+ if /rubocop|standard/.match?(result)
364
+ linter_template = result
365
+ else
366
+ linter_template = false
367
+ end
368
+ end
369
+
370
+ if Bundler.settings["gem.linter"].nil?
371
+ Bundler.settings.set_global("gem.linter", linter_template)
372
+ end
373
+
374
+ # Once gem.linter safely set, unset the deprecated gem.rubocop
375
+ unless Bundler.settings["gem.rubocop"].nil?
376
+ Bundler.settings.set_global("gem.rubocop", nil)
377
+ end
378
+
379
+ if options[:linter] == Bundler.settings["gem.linter"]
380
+ Bundler.ui.info "#{options[:linter]} is already configured, ignoring --linter flag."
381
+ end
382
+
383
+ linter_template
384
+ end
385
+
386
+ def deprecated_rubocop_option
387
+ if !options[:rubocop].nil?
388
+ if options[:rubocop]
389
+ Bundler::SharedHelpers.major_deprecation 2,
390
+ "--rubocop is deprecated, use --linter=rubocop",
391
+ removed_message: "--rubocop has been removed, use --linter=rubocop"
392
+ "rubocop"
393
+ else
394
+ Bundler::SharedHelpers.major_deprecation 2,
395
+ "--no-rubocop is deprecated, use --linter",
396
+ removed_message: "--no-rubocop has been removed, use --linter"
397
+ false
398
+ end
399
+ elsif !Bundler.settings["gem.rubocop"].nil?
400
+ Bundler::SharedHelpers.major_deprecation 2,
401
+ "config gem.rubocop is deprecated; we've updated your config to use gem.linter instead",
402
+ removed_message: "config gem.rubocop has been removed; we've updated your config to use gem.linter instead"
403
+ Bundler.settings["gem.rubocop"] ? "rubocop" : false
404
+ end
405
+ end
406
+
320
407
  def bundler_dependency_version
321
408
  v = Gem::Version.new(Bundler::VERSION)
322
409
  req = v.segments[0..1]
@@ -325,7 +412,7 @@ module Bundler
325
412
  end
326
413
 
327
414
  def ensure_safe_gem_name(name, constant_array)
328
- if name =~ /^\d/
415
+ if /^\d/.match?(name)
329
416
  Bundler.ui.error "Invalid gem name #{name} Please give a name which does not start with numbers."
330
417
  exit 1
331
418
  end
@@ -351,20 +438,26 @@ module Bundler
351
438
  thor.run(%(#{editor} "#{file}"))
352
439
  end
353
440
 
441
+ def rust_builder_required_rubygems_version
442
+ "3.3.11"
443
+ end
444
+
354
445
  def required_ruby_version
355
- if Gem.ruby_version < Gem::Version.new("2.4.a") then "2.3.0"
356
- elsif Gem.ruby_version < Gem::Version.new("2.5.a") then "2.4.0"
357
- elsif Gem.ruby_version < Gem::Version.new("2.6.a") then "2.5.0"
358
- else
359
- "2.6.0"
360
- end
446
+ "3.0.0"
361
447
  end
362
448
 
363
449
  def rubocop_version
364
- if Gem.ruby_version < Gem::Version.new("2.4.a") then "0.81.0"
365
- elsif Gem.ruby_version < Gem::Version.new("2.5.a") then "1.12"
366
- else
367
- "1.21"
450
+ "1.21"
451
+ end
452
+
453
+ def standard_version
454
+ "1.3"
455
+ end
456
+
457
+ def validate_rust_builder_rubygems_version
458
+ if Gem::Version.new(rust_builder_required_rubygems_version) > Gem.rubygems_version
459
+ 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."
460
+ exit 1
368
461
  end
369
462
  end
370
463
  end
@@ -18,34 +18,29 @@ module Bundler
18
18
 
19
19
  if spec
20
20
  return print_gem_path(spec) if @options[:path]
21
+ return print_gem_version(spec) if @options[:version]
21
22
  print_gem_info(spec)
22
23
  end
23
24
  end
24
25
 
25
26
  private
26
27
 
27
- def spec_for_gem(gem_name)
28
- spec = Bundler.definition.specs.find {|s| s.name == gem_name }
29
- spec || default_gem_spec(gem_name) || Bundler::CLI::Common.select_spec(gem_name, :regex_match)
28
+ def spec_for_gem(name)
29
+ Bundler::CLI::Common.select_spec(name, :regex_match)
30
30
  end
31
31
 
32
- def default_gem_spec(gem_name)
33
- return unless Gem::Specification.respond_to?(:find_all_by_name)
34
- gem_spec = Gem::Specification.find_all_by_name(gem_name).last
35
- return gem_spec if gem_spec && gem_spec.respond_to?(:default_gem?) && gem_spec.default_gem?
36
- end
37
-
38
- def spec_not_found(gem_name)
39
- raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(gem_name, Bundler.definition.dependencies)
32
+ def print_gem_version(spec)
33
+ Bundler.ui.info spec.version.to_s
40
34
  end
41
35
 
42
36
  def print_gem_path(spec)
43
- if spec.name == "bundler"
44
- path = File.expand_path("../../../..", __FILE__)
37
+ name = spec.name
38
+ if name == "bundler"
39
+ path = File.expand_path("../../..", __dir__)
45
40
  else
46
41
  path = spec.full_gem_path
47
- unless File.directory?(path)
48
- return Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at: #{path}"
42
+ if spec.deleted_gem?
43
+ return Bundler.ui.warn "The gem #{name} has been deleted. It was installed at: #{path}"
49
44
  end
50
45
  end
51
46
 
@@ -54,8 +49,9 @@ module Bundler
54
49
 
55
50
  def print_gem_info(spec)
56
51
  metadata = spec.metadata
52
+ name = spec.name
57
53
  gem_info = String.new
58
- gem_info << " * #{spec.name} (#{spec.version}#{spec.git_version})\n"
54
+ gem_info << " * #{name} (#{spec.version}#{spec.git_version})\n"
59
55
  gem_info << "\tSummary: #{spec.summary}\n" if spec.summary
60
56
  gem_info << "\tHomepage: #{spec.homepage}\n" if spec.homepage
61
57
  gem_info << "\tDocumentation: #{metadata["documentation_uri"]}\n" if metadata.key?("documentation_uri")
@@ -66,8 +62,22 @@ module Bundler
66
62
  gem_info << "\tBug Tracker: #{metadata["bug_tracker_uri"]}\n" if metadata.key?("bug_tracker_uri")
67
63
  gem_info << "\tMailing List: #{metadata["mailing_list_uri"]}\n" if metadata.key?("mailing_list_uri")
68
64
  gem_info << "\tPath: #{spec.full_gem_path}\n"
69
- gem_info << "\tDefault Gem: yes" if spec.respond_to?(:default_gem?) && spec.default_gem?
65
+ gem_info << "\tDefault Gem: yes\n" if spec.respond_to?(:default_gem?) && spec.default_gem?
66
+ gem_info << "\tReverse Dependencies: \n\t\t#{gem_dependencies.join("\n\t\t")}" if gem_dependencies.any?
67
+
68
+ if name != "bundler" && spec.deleted_gem?
69
+ return Bundler.ui.warn "The gem #{name} has been deleted. Gemspec information is still available though:\n#{gem_info}"
70
+ end
71
+
70
72
  Bundler.ui.info gem_info
71
73
  end
74
+
75
+ def gem_dependencies
76
+ @gem_dependencies ||= Bundler.definition.specs.map do |spec|
77
+ dependency = spec.dependencies.find {|dep| dep.name == gem_name }
78
+ next unless dependency
79
+ "#{spec.name} (#{spec.version}) depends on #{gem_name} (#{dependency.requirements_list.join(", ")})"
80
+ end.compact.sort
81
+ end
72
82
  end
73
83
  end
@@ -32,7 +32,11 @@ module Bundler
32
32
  file << spec.to_gemfile
33
33
  end
34
34
  else
35
- FileUtils.cp(File.expand_path("../../templates/#{gemfile}", __FILE__), gemfile)
35
+ File.open(File.expand_path("../templates/Gemfile", __dir__), "r") do |template|
36
+ File.open(gemfile, "wb") do |destination|
37
+ IO.copy_stream(template, destination)
38
+ end
39
+ end
36
40
  end
37
41
 
38
42
  puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
@@ -41,7 +45,7 @@ module Bundler
41
45
  private
42
46
 
43
47
  def gemfile
44
- @gemfile ||= Bundler.preferred_gemfile_name
48
+ @gemfile ||= options[:gemfile] || Bundler.preferred_gemfile_name
45
49
  end
46
50
  end
47
51
  end