bundler 1.17.3 → 2.4.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2786 -1256
  3. data/LICENSE.md +18 -19
  4. data/README.md +10 -14
  5. data/bundler.gemspec +13 -33
  6. data/exe/bundle +15 -8
  7. data/exe/bundler +1 -1
  8. data/lib/bundler/.document +1 -0
  9. data/lib/bundler/build_metadata.rb +4 -12
  10. data/lib/bundler/capistrano.rb +4 -4
  11. data/lib/bundler/cli/add.rb +28 -16
  12. data/lib/bundler/cli/binstubs.rb +12 -4
  13. data/lib/bundler/cli/cache.rb +24 -17
  14. data/lib/bundler/cli/check.rb +5 -3
  15. data/lib/bundler/cli/clean.rb +1 -1
  16. data/lib/bundler/cli/common.rb +41 -13
  17. data/lib/bundler/cli/config.rb +170 -86
  18. data/lib/bundler/cli/console.rb +3 -3
  19. data/lib/bundler/cli/doctor.rb +27 -10
  20. data/lib/bundler/cli/exec.rb +8 -25
  21. data/lib/bundler/cli/fund.rb +36 -0
  22. data/lib/bundler/cli/gem.rb +261 -48
  23. data/lib/bundler/cli/info.rb +53 -9
  24. data/lib/bundler/cli/init.rb +7 -3
  25. data/lib/bundler/cli/inject.rb +1 -1
  26. data/lib/bundler/cli/install.rb +39 -67
  27. data/lib/bundler/cli/issue.rb +8 -7
  28. data/lib/bundler/cli/list.rb +19 -11
  29. data/lib/bundler/cli/lock.rb +11 -4
  30. data/lib/bundler/cli/open.rb +14 -9
  31. data/lib/bundler/cli/outdated.rb +153 -122
  32. data/lib/bundler/cli/platform.rb +8 -6
  33. data/lib/bundler/cli/plugin.rb +19 -2
  34. data/lib/bundler/cli/pristine.rb +6 -1
  35. data/lib/bundler/cli/remove.rb +1 -2
  36. data/lib/bundler/cli/show.rb +3 -3
  37. data/lib/bundler/cli/update.rb +49 -18
  38. data/lib/bundler/cli/viz.rb +1 -1
  39. data/lib/bundler/cli.rb +269 -165
  40. data/lib/bundler/compact_index_client/cache.rb +7 -24
  41. data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/lib/bundler/compact_index_client/updater.rb +58 -57
  43. data/lib/bundler/compact_index_client.rb +28 -18
  44. data/lib/bundler/constants.rb +1 -1
  45. data/lib/bundler/current_ruby.rb +26 -11
  46. data/lib/bundler/definition.rb +432 -464
  47. data/lib/bundler/dependency.rb +29 -71
  48. data/lib/bundler/deployment.rb +1 -1
  49. data/lib/bundler/digest.rb +71 -0
  50. data/lib/bundler/dsl.rb +85 -117
  51. data/lib/bundler/endpoint_specification.rb +16 -14
  52. data/lib/bundler/env.rb +11 -16
  53. data/lib/bundler/environment_preserver.rb +32 -5
  54. data/lib/bundler/errors.rb +31 -14
  55. data/lib/bundler/feature_flag.rb +12 -33
  56. data/lib/bundler/fetcher/base.rb +7 -9
  57. data/lib/bundler/fetcher/compact_index.rb +47 -40
  58. data/lib/bundler/fetcher/dependency.rb +3 -7
  59. data/lib/bundler/fetcher/downloader.rb +17 -12
  60. data/lib/bundler/fetcher/index.rb +5 -32
  61. data/lib/bundler/fetcher.rb +51 -43
  62. data/lib/bundler/force_platform.rb +18 -0
  63. data/lib/bundler/friendly_errors.rb +49 -54
  64. data/lib/bundler/gem_helper.rb +81 -46
  65. data/lib/bundler/gem_helpers.rb +44 -28
  66. data/lib/bundler/gem_tasks.rb +1 -1
  67. data/lib/bundler/gem_version_promoter.rb +54 -99
  68. data/lib/bundler/graph.rb +5 -5
  69. data/lib/bundler/index.rb +16 -54
  70. data/lib/bundler/injector.rb +51 -17
  71. data/lib/bundler/inline.rb +28 -29
  72. data/lib/bundler/installer/gem_installer.rb +22 -23
  73. data/lib/bundler/installer/parallel_installer.rb +39 -52
  74. data/lib/bundler/installer/standalone.rb +62 -12
  75. data/lib/bundler/installer.rb +47 -98
  76. data/lib/bundler/lazy_specification.rb +88 -52
  77. data/lib/bundler/lockfile_generator.rb +4 -4
  78. data/lib/bundler/lockfile_parser.rb +41 -72
  79. data/{man → lib/bundler/man}/bundle-add.1 +29 -5
  80. data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +22 -4
  81. data/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  82. data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  83. data/lib/bundler/man/bundle-cache.1 +61 -0
  84. data/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +24 -17
  85. data/{man → lib/bundler/man}/bundle-check.1 +1 -1
  86. data/{man → lib/bundler/man}/bundle-clean.1 +2 -2
  87. data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  88. data/{man → lib/bundler/man}/bundle-config.1 +78 -63
  89. data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +96 -88
  90. data/lib/bundler/man/bundle-console.1 +53 -0
  91. data/lib/bundler/man/bundle-console.1.ronn +44 -0
  92. data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  93. data/{man → lib/bundler/man}/bundle-exec.1 +6 -6
  94. data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +6 -6
  95. data/lib/bundler/man/bundle-gem.1 +105 -0
  96. data/lib/bundler/man/bundle-gem.1.ronn +117 -0
  97. data/lib/bundler/man/bundle-help.1 +13 -0
  98. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  99. data/{man → lib/bundler/man}/bundle-info.1 +3 -3
  100. data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +3 -3
  101. data/{man → lib/bundler/man}/bundle-init.1 +6 -2
  102. data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +3 -1
  103. data/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  104. data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  105. data/{man → lib/bundler/man}/bundle-install.1 +42 -37
  106. data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +42 -38
  107. data/{man → lib/bundler/man}/bundle-list.1 +7 -7
  108. data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  109. data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  110. data/{man → lib/bundler/man}/bundle-open.1 +22 -2
  111. data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
  112. data/{man → lib/bundler/man}/bundle-outdated.1 +15 -18
  113. data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +13 -19
  114. data/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  115. data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  116. data/lib/bundler/man/bundle-plugin.1 +81 -0
  117. data/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  118. data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  119. data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  120. data/{man → lib/bundler/man}/bundle-show.1 +1 -1
  121. data/{man → lib/bundler/man}/bundle-update.1 +8 -8
  122. data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +8 -7
  123. data/lib/bundler/man/bundle-version.1 +35 -0
  124. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  125. data/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  126. data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  127. data/{man → lib/bundler/man}/bundle.1 +17 -12
  128. data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  129. data/{man → lib/bundler/man}/gemfile.5 +139 -92
  130. data/{man → lib/bundler/man}/gemfile.5.ronn +118 -96
  131. data/{man → lib/bundler/man}/index.txt +5 -1
  132. data/lib/bundler/match_metadata.rb +13 -0
  133. data/lib/bundler/match_platform.rb +1 -2
  134. data/lib/bundler/match_remote_metadata.rb +29 -0
  135. data/lib/bundler/mirror.rb +10 -12
  136. data/lib/bundler/plugin/api/source.rb +29 -15
  137. data/lib/bundler/plugin/api.rb +1 -1
  138. data/lib/bundler/plugin/dsl.rb +1 -1
  139. data/lib/bundler/plugin/index.rb +32 -9
  140. data/lib/bundler/plugin/installer/git.rb +0 -4
  141. data/lib/bundler/plugin/installer/rubygems.rb +1 -9
  142. data/lib/bundler/plugin/installer.rb +40 -24
  143. data/lib/bundler/plugin/source_list.rb +5 -1
  144. data/lib/bundler/plugin.rb +103 -43
  145. data/lib/bundler/process_lock.rb +1 -1
  146. data/lib/bundler/remote_specification.rb +12 -9
  147. data/lib/bundler/resolver/base.rb +107 -0
  148. data/lib/bundler/resolver/candidate.rb +94 -0
  149. data/lib/bundler/resolver/incompatibility.rb +15 -0
  150. data/lib/bundler/resolver/package.rb +72 -0
  151. data/lib/bundler/resolver/root.rb +25 -0
  152. data/lib/bundler/resolver/spec_group.rb +49 -73
  153. data/lib/bundler/resolver.rb +355 -301
  154. data/lib/bundler/retry.rb +4 -4
  155. data/lib/bundler/ruby_dsl.rb +7 -1
  156. data/lib/bundler/ruby_version.rb +12 -40
  157. data/lib/bundler/rubygems_ext.rb +237 -92
  158. data/lib/bundler/rubygems_gem_installer.rb +87 -21
  159. data/lib/bundler/rubygems_integration.rb +180 -516
  160. data/lib/bundler/runtime.rb +26 -41
  161. data/lib/bundler/safe_marshal.rb +31 -0
  162. data/lib/bundler/self_manager.rb +168 -0
  163. data/lib/bundler/settings.rb +164 -120
  164. data/lib/bundler/setup.rb +14 -12
  165. data/lib/bundler/shared_helpers.rb +62 -103
  166. data/lib/bundler/similarity_detector.rb +3 -3
  167. data/lib/bundler/source/git/git_proxy.rb +292 -128
  168. data/lib/bundler/source/git.rb +114 -64
  169. data/lib/bundler/source/metadata.rb +9 -9
  170. data/lib/bundler/source/path/installer.rb +11 -32
  171. data/lib/bundler/source/path.rb +29 -18
  172. data/lib/bundler/source/rubygems/remote.rb +3 -4
  173. data/lib/bundler/source/rubygems.rb +181 -208
  174. data/lib/bundler/source/rubygems_aggregate.rb +68 -0
  175. data/lib/bundler/source.rb +31 -11
  176. data/lib/bundler/source_list.rb +108 -67
  177. data/lib/bundler/source_map.rb +71 -0
  178. data/lib/bundler/spec_set.rb +96 -72
  179. data/lib/bundler/stub_specification.rb +45 -37
  180. data/lib/bundler/templates/Executable +3 -5
  181. data/lib/bundler/templates/Executable.bundler +22 -18
  182. data/lib/bundler/templates/Executable.standalone +4 -4
  183. data/lib/bundler/templates/Gemfile +0 -2
  184. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  185. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  186. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  187. data/lib/bundler/templates/newgem/Gemfile.tt +22 -2
  188. data/lib/bundler/templates/newgem/README.md.tt +13 -15
  189. data/lib/bundler/templates/newgem/Rakefile.tt +43 -5
  190. data/lib/bundler/templates/newgem/bin/console.tt +1 -4
  191. data/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  192. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  193. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  194. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  195. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  196. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  197. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  198. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  199. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  200. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  201. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  202. data/lib/bundler/templates/newgem/newgem.gemspec.tt +37 -41
  203. data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  204. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  205. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  206. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  207. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  208. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  209. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  210. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  211. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  212. data/lib/bundler/ui/rg_proxy.rb +2 -2
  213. data/lib/bundler/ui/shell.rb +39 -20
  214. data/lib/bundler/ui/silent.rb +21 -5
  215. data/lib/bundler/ui.rb +3 -3
  216. data/lib/bundler/uri_credentials_filter.rb +10 -4
  217. data/lib/bundler/uri_normalizer.rb +23 -0
  218. data/lib/bundler/vendor/.document +1 -0
  219. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  220. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  221. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  222. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  223. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  224. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  225. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1493 -425
  226. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  227. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  228. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  229. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  230. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  231. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  232. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  233. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  234. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  235. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  236. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  237. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  238. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  239. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  240. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  241. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  242. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  243. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  244. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  245. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  246. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  247. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  248. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  249. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  250. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  251. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  252. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +25 -14
  253. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +20 -10
  254. data/lib/bundler/vendor/thor/lib/thor/actions.rb +34 -15
  255. data/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  256. data/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  257. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  258. data/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
  259. data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  260. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  261. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  262. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  263. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  264. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  265. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  266. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  267. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +40 -6
  268. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  269. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  270. data/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  271. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +88 -13
  272. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  273. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  274. data/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  275. data/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  276. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  277. data/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  278. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  279. data/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  280. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  281. data/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  282. data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  283. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  284. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  285. data/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  286. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  287. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  288. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  289. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  290. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  291. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  292. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  293. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  294. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  295. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  296. data/lib/bundler/vendored_fileutils.rb +1 -6
  297. data/lib/bundler/vendored_persistent.rb +2 -39
  298. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  299. data/lib/bundler/vendored_thor.rb +2 -2
  300. data/lib/bundler/vendored_tsort.rb +4 -0
  301. data/lib/bundler/vendored_uri.rb +4 -0
  302. data/lib/bundler/version.rb +5 -20
  303. data/lib/bundler/vlad.rb +2 -2
  304. data/lib/bundler/worker.rb +26 -15
  305. data/lib/bundler/yaml_serializer.rb +3 -4
  306. data/lib/bundler.rb +285 -190
  307. metadata +157 -218
  308. data/exe/bundle_ruby +0 -60
  309. data/lib/bundler/cli/package.rb +0 -49
  310. data/lib/bundler/compatibility_guard.rb +0 -14
  311. data/lib/bundler/dep_proxy.rb +0 -48
  312. data/lib/bundler/gem_remote_fetcher.rb +0 -43
  313. data/lib/bundler/gemdeps.rb +0 -29
  314. data/lib/bundler/psyched_yaml.rb +0 -37
  315. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  316. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  317. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  318. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  319. data/lib/bundler/templates/gems.rb +0 -8
  320. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -3
  321. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  322. data/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  323. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  324. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  325. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  326. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  327. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  328. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  329. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  330. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  331. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  332. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  333. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  334. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  335. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  336. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  337. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  338. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  339. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  340. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  341. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  342. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  343. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  344. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  345. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  346. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  347. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  348. data/lib/bundler/version_ranges.rb +0 -76
  349. data/man/bundle-add.1.txt +0 -52
  350. data/man/bundle-binstubs.1.txt +0 -48
  351. data/man/bundle-check.1.txt +0 -33
  352. data/man/bundle-clean.1.txt +0 -26
  353. data/man/bundle-config.1.txt +0 -529
  354. data/man/bundle-doctor.1.txt +0 -44
  355. data/man/bundle-exec.1.txt +0 -178
  356. data/man/bundle-gem.1 +0 -80
  357. data/man/bundle-gem.1.txt +0 -91
  358. data/man/bundle-gem.ronn +0 -78
  359. data/man/bundle-info.1.txt +0 -21
  360. data/man/bundle-init.1.txt +0 -34
  361. data/man/bundle-inject.1.txt +0 -32
  362. data/man/bundle-install.1.txt +0 -396
  363. data/man/bundle-list.1.txt +0 -43
  364. data/man/bundle-lock.1.txt +0 -93
  365. data/man/bundle-open.1.txt +0 -29
  366. data/man/bundle-outdated.1.txt +0 -131
  367. data/man/bundle-package.1 +0 -55
  368. data/man/bundle-package.1.txt +0 -79
  369. data/man/bundle-platform.1.txt +0 -57
  370. data/man/bundle-pristine.1.txt +0 -44
  371. data/man/bundle-remove.1.txt +0 -34
  372. data/man/bundle-show.1.txt +0 -27
  373. data/man/bundle-update.1.txt +0 -391
  374. data/man/bundle-viz.1.txt +0 -39
  375. data/man/bundle.1.txt +0 -116
  376. data/man/gemfile.5.txt +0 -653
  377. /data/lib/bundler/{ssl_certs → man}/.document +0 -0
  378. /data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  379. /data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  380. /data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  381. /data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  382. /data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  383. /data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
@@ -1,80 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rubygems/dependency"
4
- require "bundler/shared_helpers"
5
- require "bundler/rubygems_ext"
4
+ require_relative "shared_helpers"
5
+ require_relative "rubygems_ext"
6
6
 
7
7
  module Bundler
8
8
  class Dependency < Gem::Dependency
9
9
  attr_reader :autorequire
10
- attr_reader :groups, :platforms, :gemfile
10
+ attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref
11
11
 
12
+ ALL_RUBY_VERSIONS = ((18..27).to_a + (30..33).to_a).freeze
12
13
  PLATFORM_MAP = {
13
- :ruby => Gem::Platform::RUBY,
14
- :ruby_18 => Gem::Platform::RUBY,
15
- :ruby_19 => Gem::Platform::RUBY,
16
- :ruby_20 => Gem::Platform::RUBY,
17
- :ruby_21 => Gem::Platform::RUBY,
18
- :ruby_22 => Gem::Platform::RUBY,
19
- :ruby_23 => Gem::Platform::RUBY,
20
- :ruby_24 => Gem::Platform::RUBY,
21
- :ruby_25 => Gem::Platform::RUBY,
22
- :mri => Gem::Platform::RUBY,
23
- :mri_18 => Gem::Platform::RUBY,
24
- :mri_19 => Gem::Platform::RUBY,
25
- :mri_20 => Gem::Platform::RUBY,
26
- :mri_21 => Gem::Platform::RUBY,
27
- :mri_22 => Gem::Platform::RUBY,
28
- :mri_23 => Gem::Platform::RUBY,
29
- :mri_24 => Gem::Platform::RUBY,
30
- :mri_25 => Gem::Platform::RUBY,
31
- :rbx => Gem::Platform::RUBY,
32
- :truffleruby => Gem::Platform::RUBY,
33
- :jruby => Gem::Platform::JAVA,
34
- :jruby_18 => Gem::Platform::JAVA,
35
- :jruby_19 => Gem::Platform::JAVA,
36
- :mswin => Gem::Platform::MSWIN,
37
- :mswin_18 => Gem::Platform::MSWIN,
38
- :mswin_19 => Gem::Platform::MSWIN,
39
- :mswin_20 => Gem::Platform::MSWIN,
40
- :mswin_21 => Gem::Platform::MSWIN,
41
- :mswin_22 => Gem::Platform::MSWIN,
42
- :mswin_23 => Gem::Platform::MSWIN,
43
- :mswin_24 => Gem::Platform::MSWIN,
44
- :mswin_25 => Gem::Platform::MSWIN,
45
- :mswin64 => Gem::Platform::MSWIN64,
46
- :mswin64_19 => Gem::Platform::MSWIN64,
47
- :mswin64_20 => Gem::Platform::MSWIN64,
48
- :mswin64_21 => Gem::Platform::MSWIN64,
49
- :mswin64_22 => Gem::Platform::MSWIN64,
50
- :mswin64_23 => Gem::Platform::MSWIN64,
51
- :mswin64_24 => Gem::Platform::MSWIN64,
52
- :mswin64_25 => Gem::Platform::MSWIN64,
53
- :mingw => Gem::Platform::MINGW,
54
- :mingw_18 => Gem::Platform::MINGW,
55
- :mingw_19 => Gem::Platform::MINGW,
56
- :mingw_20 => Gem::Platform::MINGW,
57
- :mingw_21 => Gem::Platform::MINGW,
58
- :mingw_22 => Gem::Platform::MINGW,
59
- :mingw_23 => Gem::Platform::MINGW,
60
- :mingw_24 => Gem::Platform::MINGW,
61
- :mingw_25 => Gem::Platform::MINGW,
62
- :x64_mingw => Gem::Platform::X64_MINGW,
63
- :x64_mingw_20 => Gem::Platform::X64_MINGW,
64
- :x64_mingw_21 => Gem::Platform::X64_MINGW,
65
- :x64_mingw_22 => Gem::Platform::X64_MINGW,
66
- :x64_mingw_23 => Gem::Platform::X64_MINGW,
67
- :x64_mingw_24 => Gem::Platform::X64_MINGW,
68
- :x64_mingw_25 => Gem::Platform::X64_MINGW,
69
- }.freeze
70
-
71
- REVERSE_PLATFORM_MAP = {}.tap do |reverse_platform_map|
72
- PLATFORM_MAP.each do |key, value|
73
- reverse_platform_map[value] ||= []
74
- reverse_platform_map[value] << key
75
- end
76
-
77
- reverse_platform_map.each {|_, platforms| platforms.freeze }
14
+ :ruby => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
15
+ :mri => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
16
+ :rbx => [Gem::Platform::RUBY],
17
+ :truffleruby => [Gem::Platform::RUBY],
18
+ :jruby => [Gem::Platform::JAVA, [18, 19]],
19
+ :windows => [Gem::Platform::WINDOWS, ALL_RUBY_VERSIONS],
20
+ :mswin => [Gem::Platform::MSWIN, ALL_RUBY_VERSIONS],
21
+ :mswin64 => [Gem::Platform::MSWIN64, ALL_RUBY_VERSIONS - [18]],
22
+ :mingw => [Gem::Platform::MINGW, ALL_RUBY_VERSIONS],
23
+ :x64_mingw => [Gem::Platform::X64_MINGW, ALL_RUBY_VERSIONS - [18, 19]],
24
+ }.each_with_object({}) do |(platform, spec), hash|
25
+ hash[platform] = spec[0]
26
+ spec[1]&.each {|version| hash[:"#{platform}_#{version}"] = spec[0] }
78
27
  end.freeze
79
28
 
80
29
  def initialize(name, version, options = {}, &blk)
@@ -84,10 +33,16 @@ module Bundler
84
33
  @autorequire = nil
85
34
  @groups = Array(options["group"] || :default).map(&:to_sym)
86
35
  @source = options["source"]
36
+ @path = options["path"]
37
+ @git = options["git"]
38
+ @github = options["github"]
39
+ @branch = options["branch"]
40
+ @ref = options["ref"]
87
41
  @platforms = Array(options["platforms"])
88
42
  @env = options["env"]
89
43
  @should_include = options.fetch("should_include", true)
90
44
  @gemfile = options["gemfile"]
45
+ @force_ruby_platform = options["force_ruby_platform"] if options.key?("force_ruby_platform")
91
46
 
92
47
  @autorequire = Array(options["require"] || []) if options.key?("require")
93
48
  end
@@ -95,11 +50,14 @@ module Bundler
95
50
  # Returns the platforms this dependency is valid for, in the same order as
96
51
  # passed in the `valid_platforms` parameter
97
52
  def gem_platforms(valid_platforms)
53
+ return [Gem::Platform::RUBY] if force_ruby_platform
98
54
  return valid_platforms if @platforms.empty?
99
55
 
100
- @gem_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.uniq
56
+ valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
57
+ end
101
58
 
102
- valid_platforms & @gem_platforms
59
+ def expanded_platforms
60
+ @expanded_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.flatten.uniq
103
61
  end
104
62
 
105
63
  def should_include?
@@ -127,7 +85,7 @@ module Bundler
127
85
  def to_lock
128
86
  out = super
129
87
  out << "!" if source
130
- out << "\n"
88
+ out
131
89
  end
132
90
 
133
91
  def specific?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/shared_helpers"
3
+ require_relative "shared_helpers"
4
4
  Bundler::SharedHelpers.major_deprecation 2, "Bundler no longer integrates with " \
5
5
  "Capistrano, but Capistrano provides its own integration with " \
6
6
  "Bundler via the capistrano-bundler gem. Use it instead."
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code was extracted from https://github.com/Solistra/ruby-digest which is under public domain
4
+ module Bundler
5
+ module Digest
6
+ # The initial constant values for the 32-bit constant words A, B, C, D, and
7
+ # E, respectively.
8
+ SHA1_WORDS = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0].freeze
9
+
10
+ # The 8-bit field used for bitwise `AND` masking. Defaults to `0xFFFFFFFF`.
11
+ SHA1_MASK = 0xFFFFFFFF
12
+
13
+ class << self
14
+ def sha1(string)
15
+ unless string.is_a?(String)
16
+ raise TypeError, "can't convert #{string.class.inspect} into String"
17
+ end
18
+
19
+ buffer = string.b
20
+
21
+ words = SHA1_WORDS.dup
22
+ generate_split_buffer(buffer) do |chunk|
23
+ w = []
24
+ chunk.each_slice(4) do |a, b, c, d|
25
+ w << (((a << 8 | b) << 8 | c) << 8 | d)
26
+ end
27
+ a, b, c, d, e = *words
28
+ (16..79).each do |i|
29
+ w[i] = SHA1_MASK & rotate((w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16]), 1)
30
+ end
31
+ 0.upto(79) do |i|
32
+ case i
33
+ when 0..19
34
+ f = ((b & c) | (~b & d))
35
+ k = 0x5A827999
36
+ when 20..39
37
+ f = (b ^ c ^ d)
38
+ k = 0x6ED9EBA1
39
+ when 40..59
40
+ f = ((b & c) | (b & d) | (c & d))
41
+ k = 0x8F1BBCDC
42
+ when 60..79
43
+ f = (b ^ c ^ d)
44
+ k = 0xCA62C1D6
45
+ end
46
+ t = SHA1_MASK & rotate(a, 5) + f + e + k + w[i]
47
+ a, b, c, d, e = t, a, SHA1_MASK & rotate(b, 30), c, d # rubocop:disable Style/ParallelAssignment
48
+ end
49
+ mutated = [a, b, c, d, e]
50
+ words.map!.with_index {|word, index| SHA1_MASK & (word + mutated[index]) }
51
+ end
52
+
53
+ words.pack("N*").unpack("H*").first
54
+ end
55
+
56
+ private
57
+
58
+ def generate_split_buffer(string, &block)
59
+ size = string.bytesize * 8
60
+ buffer = string.bytes << 128
61
+ buffer << 0 while buffer.size % 64 != 56
62
+ buffer.concat([size].pack("Q>").bytes)
63
+ buffer.each_slice(64, &block)
64
+ end
65
+
66
+ def rotate(value, spaces)
67
+ value << spaces | value >> (32 - spaces)
68
+ end
69
+ end
70
+ end
71
+ end
data/lib/bundler/dsl.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/dependency"
4
- require "bundler/ruby_dsl"
3
+ require_relative "dependency"
4
+ require_relative "ruby_dsl"
5
5
 
6
6
  module Bundler
7
7
  class Dsl
@@ -16,7 +16,9 @@ module Bundler
16
16
  VALID_PLATFORMS = Bundler::Dependency::PLATFORM_MAP.keys.freeze
17
17
 
18
18
  VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
19
- platform platforms type source install_if gemfile].freeze
19
+ platform platforms type source install_if gemfile force_ruby_platform].freeze
20
+
21
+ GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}.freeze
20
22
 
21
23
  attr_reader :gemspecs
22
24
  attr_accessor :dependencies
@@ -39,13 +41,13 @@ module Bundler
39
41
  end
40
42
 
41
43
  def eval_gemfile(gemfile, contents = nil)
42
- expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile && @gemfile.parent)
44
+ expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
43
45
  original_gemfile = @gemfile
44
46
  @gemfile = expanded_gemfile_path
45
47
  @gemfiles << expanded_gemfile_path
46
48
  contents ||= Bundler.read_file(@gemfile.to_s)
47
- instance_eval(contents.dup.untaint, gemfile.to_s, 1)
48
- rescue Exception => e
49
+ instance_eval(contents.dup.tap {|x| x.untaint if RUBY_VERSION < "2.7" }, gemfile.to_s, 1)
50
+ rescue Exception => e # rubocop:disable Lint/RescueException
49
51
  message = "There was an error " \
50
52
  "#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
51
53
  "`#{File.basename gemfile.to_s}`: #{e.message}"
@@ -63,9 +65,8 @@ module Bundler
63
65
  development_group = opts[:development_group] || :development
64
66
  expanded_path = gemfile_root.join(path)
65
67
 
66
- gemspecs = Dir[File.join(expanded_path, "{,*}.gemspec")].map {|g| Bundler.load_gemspec(g) }.compact
68
+ gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).map {|g| Bundler.load_gemspec(g) }.compact
67
69
  gemspecs.reject! {|s| s.name != name } if name
68
- Index.sort_specs(gemspecs)
69
70
  specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
70
71
 
71
72
  case specs_by_name_and_version.size
@@ -75,8 +76,7 @@ module Bundler
75
76
 
76
77
  @gemspecs << spec
77
78
 
78
- gem_platforms = Bundler::Dependency::REVERSE_PLATFORM_MAP[Bundler::GemHelpers.generic_local_platform]
79
- gem spec.name, :name => spec.name, :path => path, :glob => glob, :platforms => gem_platforms
79
+ gem spec.name, :name => spec.name, :path => path, :glob => glob
80
80
 
81
81
  group(development_group) do
82
82
  spec.development_dependencies.each do |dep|
@@ -104,8 +104,8 @@ module Bundler
104
104
  if current = @dependencies.find {|d| d.name == dep.name }
105
105
  deleted_dep = @dependencies.delete(current) if current.type == :development
106
106
 
107
- if current.requirement != dep.requirement
108
- unless deleted_dep
107
+ unless deleted_dep
108
+ if current.requirement != dep.requirement
109
109
  return if dep.type == :development
110
110
 
111
111
  update_prompt = ""
@@ -123,21 +123,16 @@ module Bundler
123
123
  raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
124
124
  "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
125
125
  "#{update_prompt}"
126
- end
127
-
128
- else
129
- Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
130
- "You should probably keep only one of them.\n" \
131
- "Remove any duplicate entries and specify the gem only once (per group).\n" \
132
- "While it's not a problem now, it could cause errors if you change the version of one of them later."
133
- end
134
-
135
- if current.source != dep.source
136
- unless deleted_dep
126
+ elsif current.source != dep.source
137
127
  return if dep.type == :development
138
128
  raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
139
129
  "You specified that #{dep.name} (#{dep.requirement}) should come from " \
140
130
  "#{current.source || "an unspecified source"} and #{dep.source}\n"
131
+ else
132
+ Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
133
+ "You should probably keep only one of them.\n" \
134
+ "Remove any duplicate entries and specify the gem only once.\n" \
135
+ "While it's not a problem now, it could cause errors if you change the version of one of them later."
141
136
  end
142
137
  end
143
138
  end
@@ -165,8 +160,7 @@ module Bundler
165
160
  elsif block_given?
166
161
  with_source(@sources.add_rubygems_source("remotes" => source), &blk)
167
162
  else
168
- check_primary_source_safety(@sources)
169
- @sources.global_rubygems_source = source
163
+ @sources.add_global_rubygems_remote(source)
170
164
  end
171
165
  end
172
166
 
@@ -184,24 +178,14 @@ module Bundler
184
178
  end
185
179
 
186
180
  def path(path, options = {}, &blk)
187
- unless block_given?
188
- msg = "You can no longer specify a path source by itself. Instead, \n" \
189
- "either use the :path option on a gem, or specify the gems that \n" \
190
- "bundler should find in the path source by passing a block to \n" \
191
- "the path method, like: \n\n" \
192
- " path 'dir/containing/rails' do\n" \
193
- " gem 'rails'\n" \
194
- " end\n\n"
195
-
196
- raise DeprecatedError, msg if Bundler.feature_flag.disable_multisource?
197
- SharedHelpers.major_deprecation(2, msg.strip)
198
- end
199
-
200
181
  source_options = normalize_hash(options).merge(
201
182
  "path" => Pathname.new(path),
202
183
  "root_path" => gemfile_root,
203
184
  "gemspec" => gemspecs.find {|g| g.name == options["name"] }
204
185
  )
186
+
187
+ source_options["global"] = true unless block_given?
188
+
205
189
  source = @sources.add_path_source(source_options)
206
190
  with_source(source, &blk)
207
191
  end
@@ -223,7 +207,6 @@ module Bundler
223
207
 
224
208
  def github(repo, options = {})
225
209
  raise ArgumentError, "GitHub sources require a block" unless block_given?
226
- raise DeprecatedError, "The #github method has been removed" if Bundler.feature_flag.skip_default_git_sources?
227
210
  github_uri = @git_sources["github"].call(repo)
228
211
  git_options = normalize_hash(options).merge("uri" => github_uri)
229
212
  git_source = @sources.add_git_source(git_options)
@@ -231,6 +214,7 @@ module Bundler
231
214
  end
232
215
 
233
216
  def to_definition(lockfile, unlock)
217
+ check_primary_source_safety
234
218
  Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups, @gemfiles)
235
219
  end
236
220
 
@@ -281,53 +265,33 @@ module Bundler
281
265
  raise GemfileError, "Undefined local variable or method `#{name}' for Gemfile"
282
266
  end
283
267
 
284
- private
268
+ def check_primary_source_safety
269
+ check_path_source_safety
270
+ check_rubygems_source_safety
271
+ end
285
272
 
286
- def add_git_sources
287
- return if Bundler.feature_flag.skip_default_git_sources?
273
+ private
288
274
 
275
+ def add_git_sources
289
276
  git_source(:github) do |repo_name|
290
- warn_deprecated_git_source(:github, <<-'RUBY'.strip, 'Change any "reponame" :github sources to "username/reponame".')
291
- "https://github.com/#{repo_name}.git"
292
- RUBY
293
- # It would be better to use https instead of the git protocol, but this
294
- # can break deployment of existing locked bundles when switching between
295
- # different versions of Bundler. The change will be made in 2.0, which
296
- # does not guarantee compatibility with the 1.x series.
297
- #
298
- # See https://github.com/bundler/bundler/pull/2569 for discussion
299
- #
300
- # This can be overridden by adding this code to your Gemfiles:
301
- #
302
- # git_source(:github) do |repo_name|
303
- # repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
304
- # "https://github.com/#{repo_name}.git"
305
- # end
306
- repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
307
- # TODO: 2.0 upgrade this setting to the default
308
- if Bundler.feature_flag.github_https?
309
- Bundler::SharedHelpers.major_deprecation 2, "The `github.https` setting will be removed"
310
- "https://github.com/#{repo_name}.git"
277
+ if repo_name =~ GITHUB_PULL_REQUEST_URL
278
+ {
279
+ "git" => "https://github.com/#{$1}.git",
280
+ "branch" => nil,
281
+ "ref" => "refs/pull/#{$2}/head",
282
+ "tag" => nil,
283
+ }
311
284
  else
312
- "git://github.com/#{repo_name}.git"
285
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
286
+ "https://github.com/#{repo_name}.git"
313
287
  end
314
288
  end
315
289
 
316
- # TODO: 2.0 remove this deprecated git source
317
290
  git_source(:gist) do |repo_name|
318
- warn_deprecated_git_source(:gist, '"https://gist.github.com/#{repo_name}.git"')
319
-
320
291
  "https://gist.github.com/#{repo_name}.git"
321
292
  end
322
293
 
323
- # TODO: 2.0 remove this deprecated git source
324
294
  git_source(:bitbucket) do |repo_name|
325
- warn_deprecated_git_source(:bitbucket, <<-'RUBY'.strip)
326
- user_name, repo_name = repo_name.split("/")
327
- repo_name ||= user_name
328
- "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
329
- RUBY
330
-
331
295
  user_name, repo_name = repo_name.split("/")
332
296
  repo_name ||= user_name
333
297
  "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
@@ -360,12 +324,10 @@ repo_name ||= user_name
360
324
  if name.is_a?(Symbol)
361
325
  raise GemfileError, %(You need to specify gem names as Strings. Use 'gem "#{name}"' instead)
362
326
  end
363
- if name =~ /\s/
327
+ if /\s/.match?(name)
364
328
  raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
365
329
  end
366
- if name.empty?
367
- raise GemfileError, %(an empty gem name is not valid)
368
- end
330
+ raise GemfileError, %(an empty gem name is not valid) if name.empty?
369
331
 
370
332
  normalize_hash(opts)
371
333
 
@@ -400,7 +362,11 @@ repo_name ||= user_name
400
362
 
401
363
  git_name = (git_names & opts.keys).last
402
364
  if @git_sources[git_name]
403
- opts["git"] = @git_sources[git_name].call(opts[git_name])
365
+ git_opts = @git_sources[git_name].call(opts[git_name])
366
+ git_opts = { "git" => git_opts } if git_opts.is_a?(String)
367
+ opts.merge!(git_opts) do |key, _gemfile_value, _git_source_value|
368
+ raise GemfileError, %(The :#{key} option can't be used with `#{git_name}: #{opts[git_name].inspect}`)
369
+ end
404
370
  end
405
371
 
406
372
  %w[git path].each do |type|
@@ -443,10 +409,10 @@ repo_name ||= user_name
443
409
  message = String.new
444
410
  message << "You passed #{invalid_keys.map {|k| ":" + k }.join(", ")} "
445
411
  message << if invalid_keys.size > 1
446
- "as options for #{command}, but they are invalid."
447
- else
448
- "as an option for #{command}, but it is invalid."
449
- end
412
+ "as options for #{command}, but they are invalid."
413
+ else
414
+ "as an option for #{command}, but it is invalid."
415
+ end
450
416
 
451
417
  message << " Valid options are: #{valid_keys.join(", ")}."
452
418
  message << " You may be able to resolve this by upgrading Bundler to the newest version."
@@ -467,45 +433,49 @@ repo_name ||= user_name
467
433
  end
468
434
  end
469
435
 
470
- def check_primary_source_safety(source_list)
471
- return if source_list.rubygems_primary_remotes.empty? && source_list.global_rubygems_source.nil?
436
+ def check_path_source_safety
437
+ return if @sources.global_path_source.nil?
438
+
439
+ msg = "You can no longer specify a path source by itself. Instead, \n" \
440
+ "either use the :path option on a gem, or specify the gems that \n" \
441
+ "bundler should find in the path source by passing a block to \n" \
442
+ "the path method, like: \n\n" \
443
+ " path 'dir/containing/rails' do\n" \
444
+ " gem 'rails'\n" \
445
+ " end\n\n"
446
+
447
+ SharedHelpers.major_deprecation(2, msg.strip)
448
+ end
472
449
 
473
- if Bundler.feature_flag.disable_multisource?
474
- msg = "This Gemfile contains multiple primary sources. " \
450
+ def check_rubygems_source_safety
451
+ if @sources.implicit_global_source?
452
+ implicit_global_source_warning
453
+ elsif @sources.aggregate_global_source?
454
+ multiple_global_source_warning
455
+ end
456
+ end
457
+
458
+ def implicit_global_source_warning
459
+ Bundler::SharedHelpers.major_deprecation 2, "This Gemfile does not include an explicit global source. " \
460
+ "Not using an explicit global source may result in a different lockfile being generated depending on " \
461
+ "the gems you have installed locally before bundler is run. " \
462
+ "Instead, define a global source in your Gemfile like this: source \"https://rubygems.org\"."
463
+ end
464
+
465
+ def multiple_global_source_warning
466
+ if Bundler.feature_flag.bundler_3_mode?
467
+ msg = "This Gemfile contains multiple global sources. " \
475
468
  "Each source after the first must include a block to indicate which gems " \
476
469
  "should come from that source"
477
- unless Bundler.feature_flag.bundler_2_mode?
478
- msg += ". To downgrade this error to a warning, run " \
479
- "`bundle config --delete disable_multisource`"
480
- end
481
470
  raise GemfileEvalError, msg
482
471
  else
483
- Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple primary sources. " \
472
+ Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple global sources. " \
484
473
  "Using `source` more than once without a block is a security risk, and " \
485
474
  "may result in installing unexpected gems. To resolve this warning, use " \
486
- "a block to indicate which gems should come from the secondary source. " \
487
- "To upgrade this warning to an error, run `bundle config " \
488
- "disable_multisource true`."
475
+ "a block to indicate which gems should come from the secondary source."
489
476
  end
490
477
  end
491
478
 
492
- def warn_deprecated_git_source(name, replacement, additional_message = nil)
493
- # TODO: 2.0 remove deprecation
494
- additional_message &&= " #{additional_message}"
495
- replacement = if replacement.count("\n").zero?
496
- "{|repo_name| #{replacement} }"
497
- else
498
- "do |repo_name|\n#{replacement.to_s.gsub(/^/, " ")}\n end"
499
- end
500
-
501
- Bundler::SharedHelpers.major_deprecation 2, <<-EOS
502
- The :#{name} git source is deprecated, and will be removed in Bundler 2.0.#{additional_message} Add this code to the top of your Gemfile to ensure it continues to work:
503
-
504
- git_source(:#{name}) #{replacement}
505
-
506
- EOS
507
- end
508
-
509
479
  class DSLError < GemfileError
510
480
  # @return [String] the description that should be presented to the user.
511
481
  #
@@ -540,9 +510,7 @@ The :#{name} git source is deprecated, and will be removed in Bundler 2.0.#{addi
540
510
  # be raised.
541
511
  #
542
512
  def contents
543
- @contents ||= begin
544
- dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
545
- end
513
+ @contents ||= dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
546
514
  end
547
515
 
548
516
  # The message of the exception reports the content of podspec for the
@@ -595,13 +563,13 @@ The :#{name} git source is deprecated, and will be removed in Bundler 2.0.#{addi
595
563
  end
596
564
  end
597
565
 
598
- private
566
+ private
599
567
 
600
568
  def parse_line_number_from_description
601
569
  description = self.description
602
570
  if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path.to_s}):\d+)/
603
571
  trace_line = Regexp.last_match[1]
604
- description = description.sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
572
+ description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
605
573
  end
606
574
  [trace_line, description]
607
575
  end
@@ -3,17 +3,17 @@
3
3
  module Bundler
4
4
  # used for Creating Specifications from the Gemcutter Endpoint
5
5
  class EndpointSpecification < Gem::Specification
6
- ILLFORMED_MESSAGE = 'Ill-formed requirement ["#<YAML::Syck::DefaultKey'.freeze
7
- include MatchPlatform
6
+ include MatchRemoteMetadata
8
7
 
9
- attr_reader :name, :version, :platform, :required_rubygems_version, :required_ruby_version, :checksum
8
+ attr_reader :name, :version, :platform, :checksum
10
9
  attr_accessor :source, :remote, :dependencies
11
10
 
12
- def initialize(name, version, platform, dependencies, metadata = nil)
11
+ def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
13
12
  super()
14
13
  @name = name
15
14
  @version = Gem::Version.create version
16
- @platform = platform
15
+ @platform = Gem::Platform.new(platform)
16
+ @spec_fetcher = spec_fetcher
17
17
  @dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }
18
18
 
19
19
  @loaded_from = nil
@@ -104,14 +104,23 @@ module Bundler
104
104
  @remote_specification = spec
105
105
  end
106
106
 
107
- private
107
+ private
108
+
109
+ def _remote_specification
110
+ @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
111
+ end
108
112
 
109
113
  def local_specification_path
110
114
  "#{base_dir}/specifications/#{full_name}.gemspec"
111
115
  end
112
116
 
113
117
  def parse_metadata(data)
114
- return unless data
118
+ unless data
119
+ @required_ruby_version = nil
120
+ @required_rubygems_version = nil
121
+ return
122
+ end
123
+
115
124
  data.each do |k, v|
116
125
  next unless v
117
126
  case k.to_s
@@ -129,13 +138,6 @@ module Bundler
129
138
 
130
139
  def build_dependency(name, requirements)
131
140
  Gem::Dependency.new(name, requirements)
132
- rescue ArgumentError => e
133
- raise unless e.message.include?(ILLFORMED_MESSAGE)
134
- puts # we shouldn't print the error message on the "fetching info" status line
135
- raise GemspecError,
136
- "Unfortunately, the gem #{name} (#{version}) has an invalid " \
137
- "gemspec.\nPlease ask the gem author to yank the bad version to fix " \
138
- "this issue. For more information, see http://bit.ly/syck-defaultkey."
139
141
  end
140
142
  end
141
143
  end