bundler 1.17.2 → 2.2.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (322) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2095 -1251
  3. data/LICENSE.md +18 -19
  4. data/README.md +10 -11
  5. data/bundler.gemspec +10 -28
  6. data/exe/bundle +22 -3
  7. data/lib/bundler/build_metadata.rb +4 -12
  8. data/lib/bundler/capistrano.rb +4 -4
  9. data/lib/bundler/cli/add.rb +28 -16
  10. data/lib/bundler/cli/binstubs.rb +6 -2
  11. data/lib/bundler/cli/cache.rb +24 -17
  12. data/lib/bundler/cli/check.rb +4 -2
  13. data/lib/bundler/cli/clean.rb +1 -1
  14. data/lib/bundler/cli/common.rb +39 -13
  15. data/lib/bundler/cli/config.rb +161 -86
  16. data/lib/bundler/cli/console.rb +1 -1
  17. data/lib/bundler/cli/doctor.rb +20 -9
  18. data/lib/bundler/cli/exec.rb +8 -25
  19. data/lib/bundler/cli/fund.rb +36 -0
  20. data/lib/bundler/cli/gem.rb +213 -32
  21. data/lib/bundler/cli/info.rb +42 -7
  22. data/lib/bundler/cli/init.rb +2 -2
  23. data/lib/bundler/cli/inject.rb +1 -1
  24. data/lib/bundler/cli/install.rb +34 -44
  25. data/lib/bundler/cli/issue.rb +8 -7
  26. data/lib/bundler/cli/list.rb +19 -11
  27. data/lib/bundler/cli/lock.rb +5 -1
  28. data/lib/bundler/cli/open.rb +11 -8
  29. data/lib/bundler/cli/outdated.rb +142 -118
  30. data/lib/bundler/cli/plugin.rb +19 -2
  31. data/lib/bundler/cli/pristine.rb +6 -1
  32. data/lib/bundler/cli/remove.rb +1 -2
  33. data/lib/bundler/cli/show.rb +2 -2
  34. data/lib/bundler/cli/update.rb +43 -16
  35. data/lib/bundler/cli.rb +211 -150
  36. data/lib/bundler/compact_index_client/cache.rb +6 -14
  37. data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  38. data/lib/bundler/compact_index_client/updater.rb +15 -28
  39. data/lib/bundler/compact_index_client.rb +28 -12
  40. data/lib/bundler/current_ruby.rb +14 -11
  41. data/lib/bundler/definition.rb +207 -368
  42. data/lib/bundler/dep_proxy.rb +16 -9
  43. data/lib/bundler/dependency.rb +19 -14
  44. data/lib/bundler/deployment.rb +1 -1
  45. data/lib/bundler/digest.rb +71 -0
  46. data/lib/bundler/dsl.rb +81 -81
  47. data/lib/bundler/endpoint_specification.rb +1 -1
  48. data/lib/bundler/env.rb +9 -14
  49. data/lib/bundler/environment_preserver.rb +29 -3
  50. data/lib/bundler/errors.rb +20 -3
  51. data/lib/bundler/feature_flag.rb +14 -33
  52. data/lib/bundler/fetcher/base.rb +1 -1
  53. data/lib/bundler/fetcher/compact_index.rb +28 -14
  54. data/lib/bundler/fetcher/dependency.rb +1 -1
  55. data/lib/bundler/fetcher/downloader.rb +14 -8
  56. data/lib/bundler/fetcher/index.rb +8 -8
  57. data/lib/bundler/fetcher.rb +22 -17
  58. data/lib/bundler/friendly_errors.rb +29 -48
  59. data/lib/bundler/gem_helper.rb +79 -43
  60. data/lib/bundler/gem_helpers.rb +38 -29
  61. data/lib/bundler/gem_tasks.rb +1 -1
  62. data/lib/bundler/gem_version_promoter.rb +5 -5
  63. data/lib/bundler/graph.rb +3 -3
  64. data/lib/bundler/index.rb +9 -9
  65. data/lib/bundler/injector.rb +33 -13
  66. data/lib/bundler/inline.rb +41 -30
  67. data/lib/bundler/installer/gem_installer.rb +9 -18
  68. data/lib/bundler/installer/parallel_installer.rb +50 -33
  69. data/lib/bundler/installer/standalone.rb +30 -11
  70. data/lib/bundler/installer.rb +39 -66
  71. data/lib/bundler/lazy_specification.rb +63 -28
  72. data/lib/bundler/lockfile_generator.rb +1 -1
  73. data/lib/bundler/lockfile_parser.rb +19 -52
  74. data/lib/bundler/{ssl_certs → man}/.document +0 -0
  75. data/{man → lib/bundler/man}/bundle-add.1 +10 -2
  76. data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
  77. data/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  78. data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  79. data/lib/bundler/man/bundle-cache.1 +55 -0
  80. data/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
  81. data/{man → lib/bundler/man}/bundle-check.1 +1 -1
  82. data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  83. data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  84. data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  85. data/{man → lib/bundler/man}/bundle-config.1 +59 -60
  86. data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +77 -78
  87. data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  88. data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  89. data/{man → lib/bundler/man}/bundle-exec.1 +2 -2
  90. data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  91. data/{man → lib/bundler/man}/bundle-gem.1 +38 -3
  92. data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +46 -7
  93. data/{man → lib/bundler/man}/bundle-info.1 +1 -1
  94. data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  95. data/{man → lib/bundler/man}/bundle-init.1 +2 -2
  96. data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
  97. data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  98. data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  99. data/{man → lib/bundler/man}/bundle-install.1 +37 -7
  100. data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
  101. data/{man → lib/bundler/man}/bundle-list.1 +7 -7
  102. data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  103. data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  104. data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  105. data/{man → lib/bundler/man}/bundle-open.1 +1 -1
  106. data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  107. data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  108. data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  109. data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  110. data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  111. data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  112. data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  113. data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  114. data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  115. data/{man → lib/bundler/man}/bundle-show.1 +1 -1
  116. data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  117. data/{man → lib/bundler/man}/bundle-update.1 +7 -7
  118. data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +6 -6
  119. data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  120. data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  121. data/{man → lib/bundler/man}/bundle.1 +7 -3
  122. data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +5 -2
  123. data/{man → lib/bundler/man}/gemfile.5 +44 -21
  124. data/{man → lib/bundler/man}/gemfile.5.ronn +24 -20
  125. data/{man → lib/bundler/man}/index.txt +1 -1
  126. data/lib/bundler/match_platform.rb +1 -1
  127. data/lib/bundler/mirror.rb +5 -5
  128. data/lib/bundler/plugin/api/source.rb +27 -7
  129. data/lib/bundler/plugin/api.rb +1 -1
  130. data/lib/bundler/plugin/dsl.rb +1 -1
  131. data/lib/bundler/plugin/index.rb +27 -4
  132. data/lib/bundler/plugin/installer/rubygems.rb +1 -1
  133. data/lib/bundler/plugin/installer.rb +35 -22
  134. data/lib/bundler/plugin/source_list.rb +5 -1
  135. data/lib/bundler/plugin.rb +100 -42
  136. data/lib/bundler/psyched_yaml.rb +0 -15
  137. data/lib/bundler/remote_specification.rb +5 -4
  138. data/lib/bundler/resolver/spec_group.rb +57 -53
  139. data/lib/bundler/resolver.rb +127 -113
  140. data/lib/bundler/retry.rb +4 -4
  141. data/lib/bundler/ruby_version.rb +5 -20
  142. data/lib/bundler/rubygems_ext.rb +103 -79
  143. data/lib/bundler/rubygems_gem_installer.rb +69 -8
  144. data/lib/bundler/rubygems_integration.rb +181 -446
  145. data/lib/bundler/runtime.rb +24 -34
  146. data/lib/bundler/settings.rb +159 -110
  147. data/lib/bundler/setup.rb +11 -12
  148. data/lib/bundler/shared_helpers.rb +56 -90
  149. data/lib/bundler/similarity_detector.rb +3 -3
  150. data/lib/bundler/source/git/git_proxy.rb +106 -105
  151. data/lib/bundler/source/git.rb +66 -39
  152. data/lib/bundler/source/metadata.rb +9 -9
  153. data/lib/bundler/source/path/installer.rb +10 -10
  154. data/lib/bundler/source/path.rb +23 -12
  155. data/lib/bundler/source/rubygems/remote.rb +3 -4
  156. data/lib/bundler/source/rubygems.rb +136 -120
  157. data/lib/bundler/source/rubygems_aggregate.rb +68 -0
  158. data/lib/bundler/source.rb +27 -6
  159. data/lib/bundler/source_list.rb +101 -66
  160. data/lib/bundler/source_map.rb +58 -0
  161. data/lib/bundler/spec_set.rb +49 -53
  162. data/lib/bundler/stub_specification.rb +40 -34
  163. data/lib/bundler/templates/Executable.bundler +24 -15
  164. data/lib/bundler/templates/Gemfile +1 -1
  165. data/lib/bundler/templates/gems.rb +1 -1
  166. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  167. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  168. data/lib/bundler/templates/newgem/Gemfile.tt +19 -2
  169. data/lib/bundler/templates/newgem/README.md.tt +7 -5
  170. data/lib/bundler/templates/newgem/Rakefile.tt +23 -5
  171. data/lib/bundler/templates/newgem/bin/console.tt +1 -0
  172. data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  173. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  174. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +27 -0
  175. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  176. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  177. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  178. data/lib/bundler/templates/newgem/newgem.gemspec.tt +29 -40
  179. data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  180. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  181. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  182. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  183. data/lib/bundler/templates/newgem/standard.yml.tt +2 -0
  184. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  185. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  186. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  187. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  188. data/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  189. data/lib/bundler/ui/rg_proxy.rb +1 -1
  190. data/lib/bundler/ui/shell.rb +7 -11
  191. data/lib/bundler/ui.rb +3 -3
  192. data/lib/bundler/uri_credentials_filter.rb +10 -4
  193. data/lib/bundler/vendor/.document +1 -0
  194. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  195. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  196. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  197. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
  198. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +126 -0
  199. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  200. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
  201. data/lib/bundler/vendor/molinillo/LICENSE +9 -0
  202. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  203. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  204. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  205. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  206. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  207. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  208. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  209. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
  210. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
  211. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +38 -6
  212. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
  213. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  214. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
  215. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
  216. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  217. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
  218. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  219. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  220. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  221. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  222. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  223. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  224. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  225. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  226. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  227. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +20 -9
  228. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
  229. data/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
  230. data/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  231. data/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  232. data/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
  233. data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  234. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  235. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  236. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  237. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  238. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  239. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  240. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  241. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +21 -5
  242. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  243. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  244. data/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  245. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
  246. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  247. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  248. data/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  249. data/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  250. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  251. data/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  252. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  253. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  254. data/lib/bundler/vendor/tsort/lib/tsort.rb +453 -0
  255. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  256. data/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
  257. data/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
  258. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  259. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
  260. data/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
  261. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  262. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  263. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
  264. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
  265. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  266. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
  267. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  268. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  269. data/lib/bundler/vendored_fileutils.rb +1 -6
  270. data/lib/bundler/vendored_molinillo.rb +1 -1
  271. data/lib/bundler/vendored_persistent.rb +7 -12
  272. data/lib/bundler/vendored_thor.rb +2 -2
  273. data/lib/bundler/vendored_tmpdir.rb +4 -0
  274. data/lib/bundler/vendored_tsort.rb +4 -0
  275. data/lib/bundler/vendored_uri.rb +4 -0
  276. data/lib/bundler/version.rb +1 -20
  277. data/lib/bundler/version_ranges.rb +51 -5
  278. data/lib/bundler/vlad.rb +2 -2
  279. data/lib/bundler/worker.rb +21 -8
  280. data/lib/bundler/yaml_serializer.rb +3 -4
  281. data/lib/bundler.rb +248 -118
  282. metadata +115 -190
  283. data/exe/bundle_ruby +0 -60
  284. data/lib/bundler/cli/package.rb +0 -49
  285. data/lib/bundler/compatibility_guard.rb +0 -14
  286. data/lib/bundler/gem_remote_fetcher.rb +0 -43
  287. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  288. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  289. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  290. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  291. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  292. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  293. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  294. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  295. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  296. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  297. data/man/bundle-add.1.txt +0 -52
  298. data/man/bundle-binstubs.1.txt +0 -48
  299. data/man/bundle-check.1.txt +0 -33
  300. data/man/bundle-clean.1.txt +0 -26
  301. data/man/bundle-config.1.txt +0 -529
  302. data/man/bundle-doctor.1.txt +0 -44
  303. data/man/bundle-exec.1.txt +0 -178
  304. data/man/bundle-gem.1.txt +0 -91
  305. data/man/bundle-info.1.txt +0 -21
  306. data/man/bundle-init.1.txt +0 -34
  307. data/man/bundle-inject.1.txt +0 -32
  308. data/man/bundle-install.1.txt +0 -396
  309. data/man/bundle-list.1.txt +0 -43
  310. data/man/bundle-lock.1.txt +0 -93
  311. data/man/bundle-open.1.txt +0 -29
  312. data/man/bundle-outdated.1.txt +0 -131
  313. data/man/bundle-package.1 +0 -55
  314. data/man/bundle-package.1.txt +0 -79
  315. data/man/bundle-platform.1.txt +0 -57
  316. data/man/bundle-pristine.1.txt +0 -44
  317. data/man/bundle-remove.1.txt +0 -34
  318. data/man/bundle-show.1.txt +0 -27
  319. data/man/bundle-update.1.txt +0 -391
  320. data/man/bundle-viz.1.txt +0 -39
  321. data/man/bundle.1.txt +0 -113
  322. data/man/gemfile.5.txt +0 -653
@@ -56,6 +56,7 @@ module Bundler
56
56
  class SudoNotPermittedError < BundlerError; status_code(30); end
57
57
  class ThreadCreationError < BundlerError; status_code(33); end
58
58
  class APIResponseMismatchError < BundlerError; status_code(34); end
59
+ class APIResponseInvalidDependenciesError < BundlerError; status_code(35); end
59
60
  class GemfileEvalError < GemfileError; end
60
61
  class MarshalError < StandardError; end
61
62
 
@@ -74,10 +75,26 @@ module Bundler
74
75
  end
75
76
  end
76
77
 
78
+ def permission_type
79
+ case @permission_type
80
+ when :create
81
+ "executable permissions for all parent directories and write permissions for `#{parent_folder}`"
82
+ when :delete
83
+ permissions = "executable permissions for all parent directories and write permissions for `#{parent_folder}`"
84
+ permissions += ", and the same thing for all subdirectories inside #{@path}" if File.directory?(@path)
85
+ permissions
86
+ else
87
+ "#{@permission_type} permissions for that path"
88
+ end
89
+ end
90
+
91
+ def parent_folder
92
+ File.dirname(@path)
93
+ end
94
+
77
95
  def message
78
96
  "There was an error while trying to #{action} `#{@path}`. " \
79
- "It is likely that you need to grant #{@permission_type} permissions " \
80
- "for that path."
97
+ "It is likely that you need to grant #{permission_type}."
81
98
  end
82
99
 
83
100
  status_code(23)
@@ -121,7 +138,7 @@ module Bundler
121
138
 
122
139
  class VirtualProtocolError < BundlerError
123
140
  def message
124
- "There was an error relating to virtualization and file access." \
141
+ "There was an error relating to virtualization and file access. " \
125
142
  "It is likely that you need to grant access to or mount some file system correctly."
126
143
  end
127
144
 
@@ -19,7 +19,7 @@ module Bundler
19
19
  def self.settings_method(name, key, &default)
20
20
  define_method(name) do
21
21
  value = Bundler.settings[key]
22
- value = instance_eval(&default) if value.nil? && !default.nil?
22
+ value = instance_eval(&default) if value.nil?
23
23
  value
24
24
  end
25
25
  end
@@ -27,40 +27,21 @@ module Bundler
27
27
 
28
28
  (1..10).each {|v| define_method("bundler_#{v}_mode?") { major_version >= v } }
29
29
 
30
- settings_flag(:allow_bundler_dependency_conflicts) { bundler_2_mode? }
31
- settings_flag(:allow_offline_install) { bundler_2_mode? }
32
- settings_flag(:auto_clean_without_path) { bundler_2_mode? }
33
- settings_flag(:auto_config_jobs) { bundler_2_mode? }
34
- settings_flag(:cache_all) { bundler_2_mode? }
35
- settings_flag(:cache_command_is_package) { bundler_2_mode? }
36
- settings_flag(:console_command) { !bundler_2_mode? }
37
- settings_flag(:default_install_uses_path) { bundler_2_mode? }
38
- settings_flag(:deployment_means_frozen) { bundler_2_mode? }
39
- settings_flag(:disable_multisource) { bundler_2_mode? }
40
- settings_flag(:error_on_stderr) { bundler_2_mode? }
41
- settings_flag(:forget_cli_options) { bundler_2_mode? }
42
- settings_flag(:global_path_appends_ruby_scope) { bundler_2_mode? }
43
- settings_flag(:global_gem_cache) { bundler_2_mode? }
44
- settings_flag(:init_gems_rb) { bundler_2_mode? }
45
- settings_flag(:list_command) { bundler_2_mode? }
46
- settings_flag(:lockfile_uses_separate_rubygems_sources) { bundler_2_mode? }
47
- settings_flag(:only_update_to_newer_versions) { bundler_2_mode? }
48
- settings_flag(:path_relative_to_cwd) { bundler_2_mode? }
30
+ settings_flag(:allow_offline_install) { bundler_3_mode? }
31
+ settings_flag(:auto_clean_without_path) { bundler_3_mode? }
32
+ settings_flag(:cache_all) { bundler_3_mode? }
33
+ settings_flag(:default_install_uses_path) { bundler_3_mode? }
34
+ settings_flag(:forget_cli_options) { bundler_3_mode? }
35
+ settings_flag(:global_gem_cache) { bundler_3_mode? }
36
+ settings_flag(:path_relative_to_cwd) { bundler_3_mode? }
49
37
  settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
50
- settings_flag(:prefer_gems_rb) { bundler_2_mode? }
51
- settings_flag(:print_only_version_number) { bundler_2_mode? }
52
- settings_flag(:setup_makes_kernel_gem_public) { !bundler_2_mode? }
53
- settings_flag(:skip_default_git_sources) { bundler_2_mode? }
54
- settings_flag(:specific_platform) { bundler_2_mode? }
55
- settings_flag(:suppress_install_using_messages) { bundler_2_mode? }
56
- settings_flag(:unlock_source_unlocks_spec) { !bundler_2_mode? }
57
- settings_flag(:update_requires_all_flag) { bundler_2_mode? }
58
- settings_flag(:use_gem_version_promoter_for_major_updates) { bundler_2_mode? }
59
- settings_flag(:viz_command) { !bundler_2_mode? }
38
+ settings_flag(:print_only_version_number) { bundler_3_mode? }
39
+ settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
40
+ settings_flag(:suppress_install_using_messages) { bundler_3_mode? }
41
+ settings_flag(:update_requires_all_flag) { bundler_4_mode? }
42
+ settings_flag(:use_gem_version_promoter_for_major_updates) { bundler_3_mode? }
60
43
 
61
- settings_option(:default_cli_command) { bundler_2_mode? ? :cli_help : :install }
62
-
63
- settings_method(:github_https?, "github.https") { bundler_2_mode? }
44
+ settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }
64
45
 
65
46
  def initialize(bundler_version)
66
47
  @bundler_version = Gem::Version.create(bundler_version)
@@ -38,7 +38,7 @@ module Bundler
38
38
  false
39
39
  end
40
40
 
41
- private
41
+ private
42
42
 
43
43
  def log_specs(debug_msg)
44
44
  if Bundler.ui.debug?
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/fetcher/base"
4
- require "bundler/worker"
3
+ require_relative "base"
4
+ require_relative "../worker"
5
5
 
6
6
  module Bundler
7
- autoload :CompactIndexClient, "bundler/compact_index_client"
7
+ autoload :CompactIndexClient, File.expand_path("../compact_index_client", __dir__)
8
8
 
9
9
  class Fetcher
10
10
  class CompactIndex < Base
@@ -39,7 +39,13 @@ module Bundler
39
39
  until remaining_gems.empty?
40
40
  log_specs "Looking up gems #{remaining_gems.inspect}"
41
41
 
42
- deps = compact_index_client.dependencies(remaining_gems)
42
+ deps = begin
43
+ parallel_compact_index_client.dependencies(remaining_gems)
44
+ rescue TooManyRequestsError
45
+ @bundle_worker.stop if @bundle_worker
46
+ @bundle_worker = nil # reset it. Not sure if necessary
47
+ serial_compact_index_client.dependencies(remaining_gems)
48
+ end
43
49
  next_gems = deps.map {|d| d[3].map(&:first).flatten(1) }.flatten(1).uniq
44
50
  deps.each {|dep| gem_info << dep }
45
51
  complete_gems.concat(deps.map(&:first)).uniq!
@@ -77,27 +83,35 @@ module Bundler
77
83
  true
78
84
  end
79
85
 
80
- private
86
+ private
81
87
 
82
88
  def compact_index_client
83
- @compact_index_client ||= begin
89
+ @compact_index_client ||=
84
90
  SharedHelpers.filesystem_access(cache_path) do
85
91
  CompactIndexClient.new(cache_path, client_fetcher)
86
- end.tap do |client|
87
- client.in_parallel = lambda do |inputs, &blk|
88
- func = lambda {|object, _index| blk.call(object) }
89
- worker = bundle_worker(func)
90
- inputs.each {|input| worker.enq(input) }
91
- inputs.map { worker.deq }
92
- end
93
92
  end
93
+ end
94
+
95
+ def parallel_compact_index_client
96
+ compact_index_client.execution_mode = lambda do |inputs, &blk|
97
+ func = lambda {|object, _index| blk.call(object) }
98
+ worker = bundle_worker(func)
99
+ inputs.each {|input| worker.enq(input) }
100
+ inputs.map { worker.deq }
94
101
  end
102
+
103
+ compact_index_client
104
+ end
105
+
106
+ def serial_compact_index_client
107
+ compact_index_client.sequential_execution_mode!
108
+ compact_index_client
95
109
  end
96
110
 
97
111
  def bundle_worker(func = nil)
98
112
  @bundle_worker ||= begin
99
113
  worker_name = "Compact Index (#{display_uri.host})"
100
- Bundler::Worker.new(Bundler.current_ruby.rbx? ? 1 : 25, worker_name, func)
114
+ Bundler::Worker.new(Bundler.settings.processor_count, worker_name, func)
101
115
  end
102
116
  @bundle_worker.tap do |worker|
103
117
  worker.instance_variable_set(:@func, func) if func
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/fetcher/base"
3
+ require_relative "base"
4
4
  require "cgi"
5
5
 
6
6
  module Bundler
@@ -14,14 +14,16 @@ module Bundler
14
14
  def fetch(uri, headers = {}, counter = 0)
15
15
  raise HTTPError, "Too many redirects" if counter >= redirect_limit
16
16
 
17
+ filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)
18
+
17
19
  response = request(uri, headers)
18
- Bundler.ui.debug("HTTP #{response.code} #{response.message} #{uri}")
20
+ Bundler.ui.debug("HTTP #{response.code} #{response.message} #{filtered_uri}")
19
21
 
20
22
  case response
21
23
  when Net::HTTPSuccess, Net::HTTPNotModified
22
24
  response
23
25
  when Net::HTTPRedirection
24
- new_uri = URI.parse(response["location"])
26
+ new_uri = Bundler::URI.parse(response["location"])
25
27
  if new_uri.host == uri.host
26
28
  new_uri.user = uri.user
27
29
  new_uri.password = uri.password
@@ -34,10 +36,13 @@ module Bundler
34
36
  fetch(uri, new_headers)
35
37
  when Net::HTTPRequestEntityTooLarge
36
38
  raise FallbackError, response.body
39
+ when Net::HTTPTooManyRequests
40
+ raise TooManyRequestsError, response.body
37
41
  when Net::HTTPUnauthorized
42
+ raise BadAuthenticationError, uri.host if uri.userinfo
38
43
  raise AuthenticationRequiredError, uri.host
39
44
  when Net::HTTPNotFound
40
- raise FallbackError, "Net::HTTPNotFound"
45
+ raise FallbackError, "Net::HTTPNotFound: #{filtered_uri}"
41
46
  else
42
47
  raise HTTPError, "#{response.class}#{": #{response.body}" unless response.body.empty?}"
43
48
  end
@@ -46,7 +51,9 @@ module Bundler
46
51
  def request(uri, headers)
47
52
  validate_uri_scheme!(uri)
48
53
 
49
- Bundler.ui.debug "HTTP GET #{uri}"
54
+ filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)
55
+
56
+ Bundler.ui.debug "HTTP GET #{filtered_uri}"
50
57
  req = Net::HTTP::Get.new uri.request_uri, headers
51
58
  if uri.user
52
59
  user = CGI.unescape(uri.user)
@@ -61,17 +68,16 @@ module Bundler
61
68
  raise CertificateFailureError.new(uri)
62
69
  rescue *HTTP_ERRORS => e
63
70
  Bundler.ui.trace e
64
- case e.message
65
- when /host down:/, /getaddrinfo: nodename nor servname provided/
71
+ if e.is_a?(SocketError) || e.message =~ /host down:/
66
72
  raise NetworkDownError, "Could not reach host #{uri.host}. Check your network " \
67
73
  "connection and try again."
68
74
  else
69
- raise HTTPError, "Network error while fetching #{URICredentialsFilter.credential_filtered_uri(uri)}" \
75
+ raise HTTPError, "Network error while fetching #{filtered_uri}" \
70
76
  " (#{e})"
71
77
  end
72
78
  end
73
79
 
74
- private
80
+ private
75
81
 
76
82
  def validate_uri_scheme!(uri)
77
83
  return if uri.scheme =~ /\Ahttps?\z/
@@ -1,25 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/fetcher/base"
4
- require "rubygems/remote_fetcher"
3
+ require_relative "base"
5
4
 
6
5
  module Bundler
7
6
  class Fetcher
8
7
  class Index < Base
9
8
  def specs(_gem_names)
10
9
  Bundler.rubygems.fetch_all_remote_specs(remote)
11
- rescue Gem::RemoteFetcher::FetchError, OpenSSL::SSL::SSLError, Net::HTTPFatalError => e
10
+ rescue Gem::RemoteFetcher::FetchError => e
12
11
  case e.message
13
12
  when /certificate verify failed/
14
13
  raise CertificateFailureError.new(display_uri)
15
14
  when /401/
15
+ raise BadAuthenticationError, remote_uri if remote_uri.userinfo
16
16
  raise AuthenticationRequiredError, remote_uri
17
17
  when /403/
18
18
  raise BadAuthenticationError, remote_uri if remote_uri.userinfo
19
19
  raise AuthenticationRequiredError, remote_uri
20
20
  else
21
- Bundler.ui.trace e
22
- raise HTTPError, "Could not fetch specs from #{display_uri}"
21
+ raise HTTPError, "Could not fetch specs from #{display_uri} due to underlying error <#{e.message}>"
23
22
  end
24
23
  end
25
24
 
@@ -27,9 +26,10 @@ module Bundler
27
26
  spec -= [nil, "ruby", ""]
28
27
  spec_file_name = "#{spec.join "-"}.gemspec"
29
28
 
30
- uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
29
+ uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
31
30
  if uri.scheme == "file"
32
- Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path))
31
+ path = Bundler.rubygems.correct_for_windows_path(uri.path)
32
+ Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
33
33
  elsif cached_spec_path = gemspec_cached_path(spec_file_name)
34
34
  Bundler.load_gemspec(cached_spec_path)
35
35
  else
@@ -40,7 +40,7 @@ module Bundler
40
40
  "Your network or your gem server is probably having issues right now."
41
41
  end
42
42
 
43
- private
43
+ private
44
44
 
45
45
  # cached gem specification path, if one exists
46
46
  def gemspec_cached_path(spec_file_name)
@@ -1,20 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/vendored_persistent"
3
+ require_relative "vendored_persistent"
4
4
  require "cgi"
5
5
  require "securerandom"
6
6
  require "zlib"
7
+ require "rubygems/request"
7
8
 
8
9
  module Bundler
9
10
  # Handles all the fetching with the rubygems server
10
11
  class Fetcher
11
- autoload :CompactIndex, "bundler/fetcher/compact_index"
12
- autoload :Downloader, "bundler/fetcher/downloader"
13
- autoload :Dependency, "bundler/fetcher/dependency"
14
- autoload :Index, "bundler/fetcher/index"
12
+ autoload :CompactIndex, File.expand_path("fetcher/compact_index", __dir__)
13
+ autoload :Downloader, File.expand_path("fetcher/downloader", __dir__)
14
+ autoload :Dependency, File.expand_path("fetcher/dependency", __dir__)
15
+ autoload :Index, File.expand_path("fetcher/index", __dir__)
15
16
 
16
17
  # This error is raised when it looks like the network is down
17
18
  class NetworkDownError < HTTPError; end
19
+ # This error is raised if we should rate limit our requests to the API
20
+ class TooManyRequestsError < HTTPError; end
18
21
  # This error is raised if the API returns a 413 (only printed in verbose)
19
22
  class FallbackError < HTTPError; end
20
23
  # This is the error raised if OpenSSL fails the cert verification
@@ -25,7 +28,8 @@ module Bundler
25
28
  " is a chance you are experiencing a man-in-the-middle attack, but" \
26
29
  " most likely your system doesn't have the CA certificates needed" \
27
30
  " for verification. For information about OpenSSL certificates, see" \
28
- " http://bit.ly/ruby-ssl. To connect without using SSL, edit your Gemfile" \
31
+ " https://railsapps.github.io/openssl-certificate-verify-failed.html." \
32
+ " To connect without using SSL, edit your Gemfile" \
29
33
  " sources and change 'https' to 'http'."
30
34
  end
31
35
  end
@@ -44,7 +48,8 @@ module Bundler
44
48
  remote_uri = filter_uri(remote_uri)
45
49
  super "Authentication is required for #{remote_uri}.\n" \
46
50
  "Please supply credentials for this source. You can do this by running:\n" \
47
- " bundle config #{remote_uri} username:password"
51
+ "`bundle config set --global #{remote_uri} username:password`\n" \
52
+ "or by storing the credentials in the `#{Settings.key_for(remote_uri)}` environment variable"
48
53
  end
49
54
  end
50
55
  # This error is raised if HTTP authentication is provided, but incorrect.
@@ -94,9 +99,10 @@ module Bundler
94
99
  spec -= [nil, "ruby", ""]
95
100
  spec_file_name = "#{spec.join "-"}.gemspec"
96
101
 
97
- uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
102
+ uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
98
103
  if uri.scheme == "file"
99
- Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path))
104
+ path = Bundler.rubygems.correct_for_windows_path(uri.path)
105
+ Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
100
106
  elsif cached_spec_path = gemspec_cached_path(spec_file_name)
101
107
  Bundler.load_gemspec(cached_spec_path)
102
108
  else
@@ -133,7 +139,6 @@ module Bundler
133
139
  end
134
140
 
135
141
  specs.each do |name, version, platform, dependencies, metadata|
136
- next if name == "bundler"
137
142
  spec = if dependencies
138
143
  EndpointSpecification.new(name, version, platform, dependencies, metadata)
139
144
  else
@@ -212,7 +217,7 @@ module Bundler
212
217
  "#<#{self.class}:0x#{object_id} uri=#{uri}>"
213
218
  end
214
219
 
215
- private
220
+ private
216
221
 
217
222
  FETCHERS = [CompactIndex, Dependency, Index].freeze
218
223
 
@@ -225,8 +230,9 @@ module Bundler
225
230
  "BUILDBOX" => "buildbox",
226
231
  "GO_SERVER_URL" => "go",
227
232
  "SNAP_CI" => "snap",
233
+ "GITLAB_CI" => "gitlab",
228
234
  "CI_NAME" => ENV["CI_NAME"],
229
- "CI" => "ci"
235
+ "CI" => "ci",
230
236
  }
231
237
  env_cis.find_all {|env, _| ENV[env] }.map {|_, ci| ci }
232
238
  end
@@ -238,9 +244,9 @@ module Bundler
238
244
  Bundler.settings[:ssl_client_cert]
239
245
  raise SSLError if needs_ssl && !defined?(OpenSSL::SSL)
240
246
 
241
- con = PersistentHTTP.new "bundler", :ENV
247
+ con = PersistentHTTP.new :name => "bundler", :proxy => :ENV
242
248
  if gem_proxy = Bundler.rubygems.configuration[:http_proxy]
243
- con.proxy = URI.parse(gem_proxy) if gem_proxy != :no_proxy
249
+ con.proxy = Bundler::URI.parse(gem_proxy) if gem_proxy != :no_proxy
244
250
  end
245
251
 
246
252
  if remote_uri.scheme == "https"
@@ -293,13 +299,12 @@ module Bundler
293
299
  end
294
300
  else
295
301
  store.set_default_paths
296
- certs = File.expand_path("../ssl_certs/*/*.pem", __FILE__)
297
- Dir.glob(certs).each {|c| store.add_file c }
302
+ Gem::Request.get_cert_files.each {|c| store.add_file c }
298
303
  end
299
304
  store
300
305
  end
301
306
 
302
- private
307
+ private
303
308
 
304
309
  def remote_uri
305
310
  @remote.uri
@@ -1,12 +1,22 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- require "cgi"
5
- require "bundler/vendored_thor"
3
+ require_relative "vendored_thor"
6
4
 
7
5
  module Bundler
8
6
  module FriendlyErrors
9
- module_function
7
+ module_function
8
+
9
+ def enable!
10
+ @disabled = false
11
+ end
12
+
13
+ def disabled?
14
+ @disabled
15
+ end
16
+
17
+ def disable!
18
+ @disabled = true
19
+ end
10
20
 
11
21
  def log_error(error)
12
22
  case error
@@ -17,7 +27,7 @@ module Bundler
17
27
  Bundler.ui.error error.message
18
28
  when GemRequireError
19
29
  Bundler.ui.error error.message
20
- Bundler.ui.trace error.orig_exception, nil, true
30
+ Bundler.ui.trace error.orig_exception
21
31
  when BundlerError
22
32
  Bundler.ui.error error.message, :wrap => true
23
33
  Bundler.ui.trace error
@@ -25,13 +35,7 @@ module Bundler
25
35
  Bundler.ui.error error.message
26
36
  when LoadError
27
37
  raise error unless error.message =~ /cannot load such file -- openssl|openssl.so|libcrypto.so/
28
- Bundler.ui.error "\nCould not load OpenSSL."
29
- Bundler.ui.warn <<-WARN, :wrap => true
30
- You must recompile Ruby with OpenSSL support or change the sources in your \
31
- Gemfile from 'https' to 'http'. Instructions for compiling with OpenSSL \
32
- using RVM are available at http://rvm.io/packages/openssl.
33
- WARN
34
- Bundler.ui.trace error
38
+ Bundler.ui.error "\nCould not load OpenSSL. #{error.class}: #{error}\n#{error.backtrace.join("\n ")}"
35
39
  when Interrupt
36
40
  Bundler.ui.error "\nQuitting..."
37
41
  Bundler.ui.trace error
@@ -45,8 +49,6 @@ module Bundler
45
49
  "Alternatively, you can increase the amount of memory the JVM is able to use by running Bundler with jruby -J-Xmx1024m -S bundle (JRuby defaults to 500MB)."
46
50
  else request_issue_report_for(error)
47
51
  end
48
- rescue
49
- raise error
50
52
  end
51
53
 
52
54
  def exit_status(error)
@@ -59,36 +61,8 @@ module Bundler
59
61
  end
60
62
 
61
63
  def request_issue_report_for(e)
62
- Bundler.ui.info <<-EOS.gsub(/^ {8}/, "")
64
+ Bundler.ui.error <<-EOS.gsub(/^ {8}/, ""), nil, nil
63
65
  --- ERROR REPORT TEMPLATE -------------------------------------------------------
64
- # Error Report
65
-
66
- ## Questions
67
-
68
- Please fill out answers to these questions, it'll help us figure out
69
- why things are going wrong.
70
-
71
- - **What did you do?**
72
-
73
- I ran the command `#{$PROGRAM_NAME} #{ARGV.join(" ")}`
74
-
75
- - **What did you expect to happen?**
76
-
77
- I expected Bundler to...
78
-
79
- - **What happened instead?**
80
-
81
- Instead, what happened was...
82
-
83
- - **Have you tried any solutions posted on similar issues in our issue tracker, stack overflow, or google?**
84
-
85
- I tried...
86
-
87
- - **Have you read our issues document, https://github.com/bundler/bundler/blob/master/doc/contributing/ISSUES.md?**
88
-
89
- ...
90
-
91
- ## Backtrace
92
66
 
93
67
  ```
94
68
  #{e.class}: #{e.message}
@@ -102,29 +76,36 @@ module Bundler
102
76
 
103
77
  Bundler.ui.error "Unfortunately, an unexpected error occurred, and Bundler cannot continue."
104
78
 
105
- Bundler.ui.warn <<-EOS.gsub(/^ {8}/, "")
79
+ Bundler.ui.error <<-EOS.gsub(/^ {8}/, ""), nil, :yellow
106
80
 
107
81
  First, try this link to see if there are any existing issue reports for this error:
108
82
  #{issues_url(e)}
109
83
 
110
- If there aren't any reports for this error yet, please create copy and paste the report template above into a new issue. Don't forget to anonymize any private data! The new issue form is located at:
111
- https://github.com/bundler/bundler/issues/new
84
+ If there aren't any reports for this error yet, please fill in the new issue form located at #{new_issue_url}, and copy and paste the report template above in there.
112
85
  EOS
113
86
  end
114
87
 
115
88
  def issues_url(exception)
116
89
  message = exception.message.lines.first.tr(":", " ").chomp
117
90
  message = message.split("-").first if exception.is_a?(Errno)
118
- "https://github.com/bundler/bundler/search?q=" \
91
+ require "cgi"
92
+ "https://github.com/rubygems/rubygems/search?q=" \
119
93
  "#{CGI.escape(message)}&type=Issues"
120
94
  end
95
+
96
+ def new_issue_url
97
+ "https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md"
98
+ end
121
99
  end
122
100
 
123
101
  def self.with_friendly_errors
102
+ FriendlyErrors.enable!
124
103
  yield
125
104
  rescue SignalException
126
105
  raise
127
- rescue Exception => e
106
+ rescue Exception => e # rubocop:disable Lint/RescueException
107
+ raise if FriendlyErrors.disabled?
108
+
128
109
  FriendlyErrors.log_error(e)
129
110
  exit FriendlyErrors.exit_status(e)
130
111
  end