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
@@ -7,72 +7,25 @@ require_relative "rubygems_ext"
7
7
  module Bundler
8
8
  class Dependency < Gem::Dependency
9
9
  attr_reader :autorequire
10
- attr_reader :groups, :platforms, :gemfile, :git, :branch
10
+ attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref, :glob
11
11
 
12
+ ALL_RUBY_VERSIONS = (18..27).to_a.concat((30..34).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
- :ruby_26 => Gem::Platform::RUBY,
23
- :mri => Gem::Platform::RUBY,
24
- :mri_18 => Gem::Platform::RUBY,
25
- :mri_19 => Gem::Platform::RUBY,
26
- :mri_20 => Gem::Platform::RUBY,
27
- :mri_21 => Gem::Platform::RUBY,
28
- :mri_22 => Gem::Platform::RUBY,
29
- :mri_23 => Gem::Platform::RUBY,
30
- :mri_24 => Gem::Platform::RUBY,
31
- :mri_25 => Gem::Platform::RUBY,
32
- :mri_26 => Gem::Platform::RUBY,
33
- :rbx => Gem::Platform::RUBY,
34
- :truffleruby => Gem::Platform::RUBY,
35
- :jruby => Gem::Platform::JAVA,
36
- :jruby_18 => Gem::Platform::JAVA,
37
- :jruby_19 => Gem::Platform::JAVA,
38
- :mswin => Gem::Platform::MSWIN,
39
- :mswin_18 => Gem::Platform::MSWIN,
40
- :mswin_19 => Gem::Platform::MSWIN,
41
- :mswin_20 => Gem::Platform::MSWIN,
42
- :mswin_21 => Gem::Platform::MSWIN,
43
- :mswin_22 => Gem::Platform::MSWIN,
44
- :mswin_23 => Gem::Platform::MSWIN,
45
- :mswin_24 => Gem::Platform::MSWIN,
46
- :mswin_25 => Gem::Platform::MSWIN,
47
- :mswin_26 => Gem::Platform::MSWIN,
48
- :mswin64 => Gem::Platform::MSWIN64,
49
- :mswin64_19 => Gem::Platform::MSWIN64,
50
- :mswin64_20 => Gem::Platform::MSWIN64,
51
- :mswin64_21 => Gem::Platform::MSWIN64,
52
- :mswin64_22 => Gem::Platform::MSWIN64,
53
- :mswin64_23 => Gem::Platform::MSWIN64,
54
- :mswin64_24 => Gem::Platform::MSWIN64,
55
- :mswin64_25 => Gem::Platform::MSWIN64,
56
- :mswin64_26 => Gem::Platform::MSWIN64,
57
- :mingw => Gem::Platform::MINGW,
58
- :mingw_18 => Gem::Platform::MINGW,
59
- :mingw_19 => Gem::Platform::MINGW,
60
- :mingw_20 => Gem::Platform::MINGW,
61
- :mingw_21 => Gem::Platform::MINGW,
62
- :mingw_22 => Gem::Platform::MINGW,
63
- :mingw_23 => Gem::Platform::MINGW,
64
- :mingw_24 => Gem::Platform::MINGW,
65
- :mingw_25 => Gem::Platform::MINGW,
66
- :mingw_26 => Gem::Platform::MINGW,
67
- :x64_mingw => Gem::Platform::X64_MINGW,
68
- :x64_mingw_20 => Gem::Platform::X64_MINGW,
69
- :x64_mingw_21 => Gem::Platform::X64_MINGW,
70
- :x64_mingw_22 => Gem::Platform::X64_MINGW,
71
- :x64_mingw_23 => Gem::Platform::X64_MINGW,
72
- :x64_mingw_24 => Gem::Platform::X64_MINGW,
73
- :x64_mingw_25 => Gem::Platform::X64_MINGW,
74
- :x64_mingw_26 => Gem::Platform::X64_MINGW,
75
- }.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
+ # deprecated
21
+ mswin: [Gem::Platform::MSWIN, ALL_RUBY_VERSIONS],
22
+ mswin64: [Gem::Platform::MSWIN64, ALL_RUBY_VERSIONS - [18]],
23
+ mingw: [Gem::Platform::MINGW, ALL_RUBY_VERSIONS],
24
+ x64_mingw: [Gem::Platform::X64_MINGW, ALL_RUBY_VERSIONS - [18, 19]],
25
+ }.each_with_object({}) do |(platform, spec), hash|
26
+ hash[platform] = spec[0]
27
+ spec[1]&.each {|version| hash[:"#{platform}_#{version}"] = spec[0] }
28
+ end.freeze
76
29
 
77
30
  def initialize(name, version, options = {}, &blk)
78
31
  type = options["type"] || :runtime
@@ -81,36 +34,45 @@ module Bundler
81
34
  @autorequire = nil
82
35
  @groups = Array(options["group"] || :default).map(&:to_sym)
83
36
  @source = options["source"]
37
+ @path = options["path"]
84
38
  @git = options["git"]
39
+ @github = options["github"]
85
40
  @branch = options["branch"]
41
+ @ref = options["ref"]
42
+ @glob = options["glob"]
86
43
  @platforms = Array(options["platforms"])
87
44
  @env = options["env"]
88
45
  @should_include = options.fetch("should_include", true)
89
46
  @gemfile = options["gemfile"]
47
+ @force_ruby_platform = options["force_ruby_platform"] if options.key?("force_ruby_platform")
90
48
 
91
49
  @autorequire = Array(options["require"] || []) if options.key?("require")
92
50
  end
93
51
 
52
+ RUBY_PLATFORM_ARRAY = [Gem::Platform::RUBY].freeze
53
+ private_constant :RUBY_PLATFORM_ARRAY
54
+
94
55
  # Returns the platforms this dependency is valid for, in the same order as
95
56
  # passed in the `valid_platforms` parameter
96
57
  def gem_platforms(valid_platforms)
58
+ return RUBY_PLATFORM_ARRAY if force_ruby_platform
97
59
  return valid_platforms if @platforms.empty?
98
60
 
99
- valid_generic_platforms = valid_platforms.map {|p| [p, GemHelpers.generic(p)] }.to_h
100
- @gem_platforms ||= expanded_platforms.compact.uniq
101
-
102
- filtered_generic_platforms = valid_generic_platforms.values & @gem_platforms
103
- valid_generic_platforms.select {|_, v| filtered_generic_platforms.include?(v) }.keys
61
+ valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
104
62
  end
105
63
 
106
64
  def expanded_platforms
107
- @platforms.map {|pl| PLATFORM_MAP[pl] }
65
+ @expanded_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.flatten.uniq
108
66
  end
109
67
 
110
68
  def should_include?
111
69
  @should_include && current_env? && current_platform?
112
70
  end
113
71
 
72
+ def gemspec_dev_dep?
73
+ type == :development
74
+ end
75
+
114
76
  def current_env?
115
77
  return true unless @env
116
78
  if @env.is_a?(Hash)
@@ -132,7 +94,7 @@ module Bundler
132
94
  def to_lock
133
95
  out = super
134
96
  out << "!" if source
135
- out << "\n"
97
+ out
136
98
  end
137
99
 
138
100
  def specific?
@@ -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*").unpack1("H*")
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
@@ -16,9 +16,12 @@ 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
20
 
21
- attr_reader :gemspecs
21
+ GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}
22
+ GITLAB_MERGE_REQUEST_URL = %r{\Ahttps://gitlab\.com/([A-Za-z0-9_\-\./]+)/-/merge_requests/(\d+)\z}
23
+
24
+ attr_reader :gemspecs, :gemfile
22
25
  attr_accessor :dependencies
23
26
 
24
27
  def initialize
@@ -39,12 +42,12 @@ module Bundler
39
42
  end
40
43
 
41
44
  def eval_gemfile(gemfile, contents = nil)
42
- expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile && @gemfile.parent)
45
+ expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
43
46
  original_gemfile = @gemfile
44
47
  @gemfile = expanded_gemfile_path
45
48
  @gemfiles << expanded_gemfile_path
46
49
  contents ||= Bundler.read_file(@gemfile.to_s)
47
- instance_eval(contents.dup.tap{|x| x.untaint if RUBY_VERSION < "2.7" }, gemfile.to_s, 1)
50
+ instance_eval(contents, @gemfile.to_s, 1)
48
51
  rescue Exception => e # rubocop:disable Lint/RescueException
49
52
  message = "There was an error " \
50
53
  "#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
@@ -65,7 +68,6 @@ module Bundler
65
68
 
66
69
  gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).map {|g| Bundler.load_gemspec(g) }.compact
67
70
  gemspecs.reject! {|s| s.name != name } if name
68
- Index.sort_specs(gemspecs)
69
71
  specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
70
72
 
71
73
  case specs_by_name_and_version.size
@@ -75,11 +77,11 @@ module Bundler
75
77
 
76
78
  @gemspecs << spec
77
79
 
78
- gem spec.name, :name => spec.name, :path => path, :glob => glob
80
+ gem spec.name, name: spec.name, path: path, glob: glob
79
81
 
80
82
  group(development_group) do
81
83
  spec.development_dependencies.each do |dep|
82
- gem dep.name, *(dep.requirement.as_list + [:type => :development])
84
+ gem dep.name, *(dep.requirement.as_list + [type: :development])
83
85
  end
84
86
  end
85
87
  when 0
@@ -101,40 +103,50 @@ module Bundler
101
103
 
102
104
  # if there's already a dependency with this name we try to prefer one
103
105
  if current = @dependencies.find {|d| d.name == dep.name }
104
- deleted_dep = @dependencies.delete(current) if current.type == :development
106
+ if current.requirement != dep.requirement
107
+ current_requirement_open = current.requirements_list.include?(">= 0")
105
108
 
106
- unless deleted_dep
107
- if current.requirement != dep.requirement
108
- return if dep.type == :development
109
+ gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
110
+ if gemspec_dep
111
+ gemfile_dep = [dep, current].find(&:runtime?)
109
112
 
113
+ unless current_requirement_open
114
+ Bundler.ui.warn "A gemspec development dependency (#{gemspec_dep.name}, #{gemspec_dep.requirement}) is being overridden by a Gemfile dependency (#{gemfile_dep.name}, #{gemfile_dep.requirement}).\n" \
115
+ "This behaviour may change in the future. Please remove either of them, or make sure they both have the same requirement\n"
116
+ end
117
+ else
110
118
  update_prompt = ""
111
119
 
112
120
  if File.basename(@gemfile) == Injector::INJECTED_GEMS
113
- if dep.requirements_list.include?(">= 0") && !current.requirements_list.include?(">= 0")
121
+ if dep.requirements_list.include?(">= 0") && !current_requirement_open
114
122
  update_prompt = ". Gem already added"
115
123
  else
116
124
  update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"
117
125
 
118
- update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current.requirements_list.include?(">= 0")
126
+ update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
119
127
  end
120
128
  end
121
129
 
122
130
  raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
123
- "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
124
- "#{update_prompt}"
125
- else
126
- Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
127
- "You should probably keep only one of them.\n" \
128
- "Remove any duplicate entries and specify the gem only once.\n" \
129
- "While it's not a problem now, it could cause errors if you change the version of one of them later."
131
+ "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
132
+ "#{update_prompt}"
130
133
  end
134
+ end
131
135
 
132
- if current.source != dep.source
133
- return if dep.type == :development
134
- raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
135
- "You specified that #{dep.name} (#{dep.requirement}) should come from " \
136
- "#{current.source || "an unspecified source"} and #{dep.source}\n"
137
- end
136
+ # Always prefer the dependency from the Gemfile
137
+ if current.gemspec_dev_dep?
138
+ @dependencies.delete(current)
139
+ elsif dep.gemspec_dev_dep?
140
+ return
141
+ elsif current.source != dep.source
142
+ raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
143
+ "You specified that #{dep.name} (#{dep.requirement}) should come from " \
144
+ "#{current.source || "an unspecified source"} and #{dep.source}\n"
145
+ else
146
+ Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
147
+ "You should probably keep only one of them.\n" \
148
+ "Remove any duplicate entries and specify the gem only once.\n" \
149
+ "While it's not a problem now, it could cause errors if you change the version of one of them later."
138
150
  end
139
151
  end
140
152
 
@@ -275,30 +287,42 @@ module Bundler
275
287
 
276
288
  def add_git_sources
277
289
  git_source(:github) do |repo_name|
278
- warn_deprecated_git_source(:github, <<-'RUBY'.strip, 'Change any "reponame" :github sources to "username/reponame".')
279
- "https://github.com/#{repo_name}.git"
280
- RUBY
281
- repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
282
- "https://github.com/#{repo_name}.git"
290
+ if repo_name =~ GITHUB_PULL_REQUEST_URL
291
+ {
292
+ "git" => "https://github.com/#{$1}.git",
293
+ "branch" => nil,
294
+ "ref" => "refs/pull/#{$2}/head",
295
+ "tag" => nil,
296
+ }
297
+ else
298
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
299
+ "https://github.com/#{repo_name}.git"
300
+ end
283
301
  end
284
302
 
285
303
  git_source(:gist) do |repo_name|
286
- warn_deprecated_git_source(:gist, '"https://gist.github.com/#{repo_name}.git"')
287
-
288
304
  "https://gist.github.com/#{repo_name}.git"
289
305
  end
290
306
 
291
307
  git_source(:bitbucket) do |repo_name|
292
- warn_deprecated_git_source(:bitbucket, <<-'RUBY'.strip)
293
- user_name, repo_name = repo_name.split("/")
294
- repo_name ||= user_name
295
- "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
296
- RUBY
297
-
298
308
  user_name, repo_name = repo_name.split("/")
299
309
  repo_name ||= user_name
300
310
  "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
301
311
  end
312
+
313
+ git_source(:gitlab) do |repo_name|
314
+ if repo_name =~ GITLAB_MERGE_REQUEST_URL
315
+ {
316
+ "git" => "https://gitlab.com/#{$1}.git",
317
+ "branch" => nil,
318
+ "ref" => "refs/merge-requests/#{$2}/head",
319
+ "tag" => nil,
320
+ }
321
+ else
322
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
323
+ "https://gitlab.com/#{repo_name}.git"
324
+ end
325
+ end
302
326
  end
303
327
 
304
328
  def with_source(source)
@@ -327,7 +351,7 @@ repo_name ||= user_name
327
351
  if name.is_a?(Symbol)
328
352
  raise GemfileError, %(You need to specify gem names as Strings. Use 'gem "#{name}"' instead)
329
353
  end
330
- if name =~ /\s/
354
+ if /\s/.match?(name)
331
355
  raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
332
356
  end
333
357
  raise GemfileError, %(an empty gem name is not valid) if name.empty?
@@ -365,7 +389,11 @@ repo_name ||= user_name
365
389
 
366
390
  git_name = (git_names & opts.keys).last
367
391
  if @git_sources[git_name]
368
- opts["git"] = @git_sources[git_name].call(opts[git_name])
392
+ git_opts = @git_sources[git_name].call(opts[git_name])
393
+ git_opts = { "git" => git_opts } if git_opts.is_a?(String)
394
+ opts.merge!(git_opts) do |key, _gemfile_value, _git_source_value|
395
+ raise GemfileError, %(The :#{key} option can't be used with `#{git_name}: #{opts[git_name].inspect}`)
396
+ end
369
397
  end
370
398
 
371
399
  %w[git path].each do |type|
@@ -396,13 +424,11 @@ repo_name ||= user_name
396
424
  end
397
425
 
398
426
  def validate_keys(command, opts, valid_keys)
399
- invalid_keys = opts.keys - valid_keys
400
-
401
- git_source = opts.keys & @git_sources.keys.map(&:to_s)
402
- if opts["branch"] && !(opts["git"] || opts["github"] || git_source.any?)
427
+ if opts["branch"] && !(opts["git"] || opts["github"] || (opts.keys & @git_sources.keys.map(&:to_s)).any?)
403
428
  raise GemfileError, %(The `branch` option for `#{command}` is not allowed. Only gems with a git source can specify a branch)
404
429
  end
405
430
 
431
+ invalid_keys = opts.keys - valid_keys
406
432
  return true unless invalid_keys.any?
407
433
 
408
434
  message = String.new
@@ -421,9 +447,13 @@ repo_name ||= user_name
421
447
  def normalize_source(source)
422
448
  case source
423
449
  when :gemcutter, :rubygems, :rubyforge
424
- Bundler::SharedHelpers.major_deprecation 2, "The source :#{source} is deprecated because HTTP " \
425
- "requests are insecure.\nPlease change your source to 'https://" \
426
- "rubygems.org' if possible, or 'http://rubygems.org' if not."
450
+ message =
451
+ "The source :#{source} is deprecated because HTTP requests are insecure.\n" \
452
+ "Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not."
453
+ removed_message =
454
+ "The source :#{source} is disallowed because HTTP requests are insecure.\n" \
455
+ "Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not."
456
+ Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
427
457
  "http://rubygems.org"
428
458
  when String
429
459
  source
@@ -463,34 +493,25 @@ repo_name ||= user_name
463
493
 
464
494
  def multiple_global_source_warning
465
495
  if Bundler.feature_flag.bundler_3_mode?
466
- msg = "This Gemfile contains multiple primary sources. " \
496
+ msg = "This Gemfile contains multiple global sources. " \
467
497
  "Each source after the first must include a block to indicate which gems " \
468
498
  "should come from that source"
469
499
  raise GemfileEvalError, msg
470
500
  else
471
- Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple primary sources. " \
501
+ message =
502
+ "Your Gemfile contains multiple global sources. " \
472
503
  "Using `source` more than once without a block is a security risk, and " \
473
504
  "may result in installing unexpected gems. To resolve this warning, use " \
474
505
  "a block to indicate which gems should come from the secondary source."
506
+ removed_message =
507
+ "Your Gemfile contains multiple global sources. " \
508
+ "Using `source` more than once without a block is a security risk, and " \
509
+ "may result in installing unexpected gems. To resolve this error, use " \
510
+ "a block to indicate which gems should come from the secondary source."
511
+ Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
475
512
  end
476
513
  end
477
514
 
478
- def warn_deprecated_git_source(name, replacement, additional_message = nil)
479
- additional_message &&= " #{additional_message}"
480
- replacement = if replacement.count("\n").zero?
481
- "{|repo_name| #{replacement} }"
482
- else
483
- "do |repo_name|\n#{replacement.to_s.gsub(/^/, " ")}\n end"
484
- end
485
-
486
- Bundler::SharedHelpers.major_deprecation 3, <<-EOS
487
- The :#{name} git source is deprecated, and will be removed in the future.#{additional_message} Add this code to the top of your Gemfile to ensure it continues to work:
488
-
489
- git_source(:#{name}) #{replacement}
490
-
491
- EOS
492
- end
493
-
494
515
  class DSLError < GemfileError
495
516
  # @return [String] the description that should be presented to the user.
496
517
  #
@@ -525,9 +546,7 @@ The :#{name} git source is deprecated, and will be removed in the future.#{addit
525
546
  # be raised.
526
547
  #
527
548
  def contents
528
- @contents ||= begin
529
- dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
530
- end
549
+ @contents ||= dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
531
550
  end
532
551
 
533
552
  # The message of the exception reports the content of podspec for the
@@ -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
@@ -92,9 +92,20 @@ module Bundler
92
92
  end
93
93
  end
94
94
 
95
+ # needed for `bundle fund`
96
+ def metadata
97
+ if @remote_specification
98
+ @remote_specification.metadata
99
+ elsif _local_specification
100
+ _local_specification.metadata
101
+ else
102
+ super
103
+ end
104
+ end
105
+
95
106
  def _local_specification
96
107
  return unless @loaded_from && File.exist?(local_specification_path)
97
- eval(File.read(local_specification_path)).tap do |spec|
108
+ eval(File.read(local_specification_path), nil, local_specification_path).tap do |spec|
98
109
  spec.loaded_from = @loaded_from
99
110
  end
100
111
  end
@@ -106,17 +117,30 @@ module Bundler
106
117
 
107
118
  private
108
119
 
120
+ def _remote_specification
121
+ @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
122
+ end
123
+
109
124
  def local_specification_path
110
125
  "#{base_dir}/specifications/#{full_name}.gemspec"
111
126
  end
112
127
 
113
128
  def parse_metadata(data)
114
- return unless data
129
+ unless data
130
+ @required_ruby_version = nil
131
+ @required_rubygems_version = nil
132
+ return
133
+ end
134
+
115
135
  data.each do |k, v|
116
136
  next unless v
117
137
  case k.to_s
118
138
  when "checksum"
119
- @checksum = v.last
139
+ begin
140
+ @checksum = Checksum.from_api(v.last, @spec_fetcher.uri)
141
+ rescue ArgumentError => e
142
+ raise ArgumentError, "Invalid checksum for #{full_name}: #{e.message}"
143
+ end
120
144
  when "rubygems"
121
145
  @required_rubygems_version = Gem::Requirement.new(v)
122
146
  when "ruby"
@@ -129,13 +153,6 @@ module Bundler
129
153
 
130
154
  def build_dependency(name, requirements)
131
155
  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
156
  end
140
157
  end
141
158
  end
data/lib/bundler/env.rb CHANGED
@@ -40,11 +40,11 @@ module Bundler
40
40
 
41
41
  out << "\n## Gemfile\n"
42
42
  gemfiles.each do |gemfile|
43
- out << "\n### #{Pathname.new(gemfile).relative_path_from(SharedHelpers.pwd)}\n\n"
43
+ out << "\n### #{SharedHelpers.relative_path_to(gemfile)}\n\n"
44
44
  out << "```ruby\n" << read_file(gemfile).chomp << "\n```\n"
45
45
  end
46
46
 
47
- out << "\n### #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}\n\n"
47
+ out << "\n### #{SharedHelpers.relative_path_to(Bundler.default_lockfile)}\n\n"
48
48
  out << "```\n" << read_file(Bundler.default_lockfile).chomp << "\n```\n"
49
49
  end
50
50
 
@@ -69,13 +69,11 @@ module Bundler
69
69
  end
70
70
 
71
71
  def self.ruby_version
72
- str = String.new(RUBY_VERSION)
73
- str << "p#{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
74
- str << " (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{RUBY_PLATFORM}]"
72
+ "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{Gem::Platform.local}]"
75
73
  end
76
74
 
77
75
  def self.git_version
78
- Bundler::Source::Git::GitProxy.new(nil, nil, nil).full_version
76
+ Bundler::Source::Git::GitProxy.new(nil, nil).full_version
79
77
  rescue Bundler::Source::Git::GitNotInstalledError
80
78
  "not installed"
81
79
  end
@@ -122,7 +120,7 @@ module Bundler
122
120
  specs = Bundler.rubygems.find_name(name)
123
121
  out << [" #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
124
122
  end
125
- if (exe = caller.last.split(":").first) && exe =~ %r{(exe|bin)/bundler?\z}
123
+ if (exe = caller_locations.last.absolute_path)&.match? %r{(exe|bin)/bundler?\z}
126
124
  shebang = File.read(exe).lines.first
127
125
  shebang.sub!(/^#!\s*/, "")
128
126
  unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")