bundler 1.15.2 → 2.4.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (424) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +2861 -1117
  3. data/LICENSE.md +18 -19
  4. data/README.md +22 -17
  5. data/bundler.gemspec +23 -27
  6. data/exe/bundle +27 -12
  7. data/exe/bundler +1 -1
  8. data/lib/bundler/.document +1 -0
  9. data/lib/bundler/build_metadata.rb +45 -0
  10. data/lib/bundler/capistrano.rb +7 -2
  11. data/lib/bundler/cli/add.rb +33 -12
  12. data/lib/bundler/cli/binstubs.rb +25 -9
  13. data/lib/bundler/cli/cache.rb +25 -17
  14. data/lib/bundler/cli/check.rb +8 -8
  15. data/lib/bundler/cli/clean.rb +6 -7
  16. data/lib/bundler/cli/common.rb +52 -15
  17. data/lib/bundler/cli/config.rb +171 -86
  18. data/lib/bundler/cli/console.rb +5 -4
  19. data/lib/bundler/cli/doctor.rb +72 -8
  20. data/lib/bundler/cli/exec.rb +13 -29
  21. data/lib/bundler/cli/fund.rb +36 -0
  22. data/lib/bundler/cli/gem.rb +266 -48
  23. data/lib/bundler/cli/info.rb +52 -9
  24. data/lib/bundler/cli/init.rb +22 -6
  25. data/lib/bundler/cli/inject.rb +2 -1
  26. data/lib/bundler/cli/install.rb +74 -99
  27. data/lib/bundler/cli/issue.rb +9 -8
  28. data/lib/bundler/cli/list.rb +66 -0
  29. data/lib/bundler/cli/lock.rb +11 -5
  30. data/lib/bundler/cli/open.rb +14 -9
  31. data/lib/bundler/cli/outdated.rb +165 -123
  32. data/lib/bundler/cli/platform.rb +3 -2
  33. data/lib/bundler/cli/plugin.rb +20 -2
  34. data/lib/bundler/cli/pristine.rb +25 -6
  35. data/lib/bundler/cli/remove.rb +17 -0
  36. data/lib/bundler/cli/show.rb +3 -4
  37. data/lib/bundler/cli/update.rb +71 -12
  38. data/lib/bundler/cli/viz.rb +2 -1
  39. data/lib/bundler/cli.rb +394 -152
  40. data/lib/bundler/compact_index_client/cache.rb +8 -26
  41. data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/lib/bundler/compact_index_client/updater.rb +62 -51
  43. data/lib/bundler/compact_index_client.rb +29 -18
  44. data/lib/bundler/constants.rb +2 -1
  45. data/lib/bundler/current_ruby.rb +36 -13
  46. data/lib/bundler/definition.rb +417 -434
  47. data/lib/bundler/dependency.rb +34 -76
  48. data/lib/bundler/deployment.rb +2 -2
  49. data/lib/bundler/deprecate.rb +15 -3
  50. data/lib/bundler/digest.rb +71 -0
  51. data/lib/bundler/dsl.rb +135 -116
  52. data/lib/bundler/endpoint_specification.rb +26 -15
  53. data/lib/bundler/env.rb +95 -39
  54. data/lib/bundler/environment_preserver.rb +56 -8
  55. data/lib/bundler/errors.rb +32 -14
  56. data/lib/bundler/feature_flag.rb +29 -7
  57. data/lib/bundler/fetcher/base.rb +8 -9
  58. data/lib/bundler/fetcher/compact_index.rb +47 -49
  59. data/lib/bundler/fetcher/dependency.rb +5 -8
  60. data/lib/bundler/fetcher/downloader.rb +26 -17
  61. data/lib/bundler/fetcher/index.rb +5 -30
  62. data/lib/bundler/fetcher.rb +51 -46
  63. data/lib/bundler/force_platform.rb +18 -0
  64. data/lib/bundler/friendly_errors.rb +53 -53
  65. data/lib/bundler/gem_helper.rb +95 -50
  66. data/lib/bundler/gem_helpers.rb +45 -28
  67. data/lib/bundler/gem_tasks.rb +2 -1
  68. data/lib/bundler/gem_version_promoter.rb +60 -90
  69. data/lib/bundler/graph.rb +6 -5
  70. data/lib/bundler/index.rb +23 -61
  71. data/lib/bundler/injector.rb +228 -32
  72. data/lib/bundler/inline.rb +29 -32
  73. data/lib/bundler/installer/gem_installer.rb +24 -16
  74. data/lib/bundler/installer/parallel_installer.rb +94 -71
  75. data/lib/bundler/installer/standalone.rb +63 -12
  76. data/lib/bundler/installer.rb +128 -94
  77. data/lib/bundler/lazy_specification.rb +89 -52
  78. data/lib/bundler/lockfile_generator.rb +95 -0
  79. data/lib/bundler/lockfile_parser.rb +40 -66
  80. data/lib/bundler/man/bundle-add.1 +82 -0
  81. data/lib/bundler/man/bundle-add.1.ronn +58 -0
  82. data/lib/bundler/man/bundle-binstubs.1 +42 -0
  83. data/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
  84. data/lib/bundler/man/bundle-cache.1 +61 -0
  85. data/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +26 -14
  86. data/{man → lib/bundler/man}/bundle-check.1 +4 -4
  87. data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +3 -3
  88. data/{man → lib/bundler/man}/bundle-clean.1 +2 -2
  89. data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  90. data/{man → lib/bundler/man}/bundle-config.1 +175 -57
  91. data/lib/bundler/man/bundle-config.1.ronn +408 -0
  92. data/lib/bundler/man/bundle-console.1 +53 -0
  93. data/lib/bundler/man/bundle-console.1.ronn +44 -0
  94. data/lib/bundler/man/bundle-doctor.1 +44 -0
  95. data/lib/bundler/man/bundle-doctor.1.ronn +33 -0
  96. data/{man → lib/bundler/man}/bundle-exec.1 +11 -8
  97. data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +16 -9
  98. data/lib/bundler/man/bundle-gem.1 +105 -0
  99. data/lib/bundler/man/bundle-gem.1.ronn +117 -0
  100. data/lib/bundler/man/bundle-help.1 +13 -0
  101. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  102. data/{man → lib/bundler/man}/bundle-info.1 +1 -1
  103. data/lib/bundler/man/bundle-init.1 +29 -0
  104. data/lib/bundler/man/bundle-init.1.ronn +31 -0
  105. data/{man → lib/bundler/man}/bundle-inject.1 +7 -4
  106. data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +5 -3
  107. data/{man → lib/bundler/man}/bundle-install.1 +63 -55
  108. data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +81 -68
  109. data/lib/bundler/man/bundle-list.1 +50 -0
  110. data/lib/bundler/man/bundle-list.1.ronn +33 -0
  111. data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  112. data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +1 -1
  113. data/{man → lib/bundler/man}/bundle-open.1 +22 -2
  114. data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
  115. data/{man → lib/bundler/man}/bundle-outdated.1 +8 -11
  116. data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +7 -12
  117. data/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  118. data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  119. data/lib/bundler/man/bundle-plugin.1 +81 -0
  120. data/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  121. data/lib/bundler/man/bundle-pristine.1 +34 -0
  122. data/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  123. data/lib/bundler/man/bundle-remove.1 +31 -0
  124. data/lib/bundler/man/bundle-remove.1.ronn +23 -0
  125. data/{man → lib/bundler/man}/bundle-show.1 +3 -3
  126. data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +3 -2
  127. data/{man → lib/bundler/man}/bundle-update.1 +17 -13
  128. data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +27 -22
  129. data/lib/bundler/man/bundle-version.1 +35 -0
  130. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  131. data/{man → lib/bundler/man}/bundle-viz.1 +10 -7
  132. data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +8 -6
  133. data/{man → lib/bundler/man}/bundle.1 +44 -31
  134. data/lib/bundler/man/bundle.1.ronn +116 -0
  135. data/{man → lib/bundler/man}/gemfile.5 +153 -83
  136. data/{man → lib/bundler/man}/gemfile.5.ronn +156 -93
  137. data/lib/bundler/man/index.txt +29 -0
  138. data/lib/bundler/match_metadata.rb +13 -0
  139. data/lib/bundler/match_platform.rb +2 -2
  140. data/lib/bundler/match_remote_metadata.rb +29 -0
  141. data/lib/bundler/mirror.rb +16 -15
  142. data/lib/bundler/plugin/api/source.rb +35 -14
  143. data/lib/bundler/plugin/api.rb +1 -1
  144. data/lib/bundler/plugin/dsl.rb +1 -1
  145. data/lib/bundler/plugin/events.rb +61 -0
  146. data/lib/bundler/plugin/index.rb +38 -10
  147. data/lib/bundler/plugin/installer/git.rb +0 -4
  148. data/lib/bundler/plugin/installer/rubygems.rb +1 -9
  149. data/lib/bundler/plugin/installer.rb +35 -18
  150. data/lib/bundler/plugin/source_list.rb +11 -8
  151. data/lib/bundler/plugin.rb +115 -47
  152. data/lib/bundler/process_lock.rb +24 -0
  153. data/lib/bundler/remote_specification.rb +12 -8
  154. data/lib/bundler/resolver/base.rb +107 -0
  155. data/lib/bundler/resolver/candidate.rb +94 -0
  156. data/lib/bundler/resolver/incompatibility.rb +15 -0
  157. data/lib/bundler/resolver/package.rb +72 -0
  158. data/lib/bundler/resolver/root.rb +25 -0
  159. data/lib/bundler/resolver/spec_group.rb +82 -0
  160. data/lib/bundler/resolver.rb +327 -324
  161. data/lib/bundler/retry.rb +5 -4
  162. data/lib/bundler/ruby_dsl.rb +2 -1
  163. data/lib/bundler/ruby_version.rb +11 -38
  164. data/lib/bundler/rubygems_ext.rb +236 -90
  165. data/lib/bundler/rubygems_gem_installer.rb +104 -8
  166. data/lib/bundler/rubygems_integration.rb +204 -501
  167. data/lib/bundler/runtime.rb +35 -48
  168. data/lib/bundler/self_manager.rb +168 -0
  169. data/lib/bundler/settings/validator.rb +102 -0
  170. data/lib/bundler/settings.rb +309 -142
  171. data/lib/bundler/setup.rb +15 -12
  172. data/lib/bundler/shared_helpers.rb +147 -83
  173. data/lib/bundler/similarity_detector.rb +4 -3
  174. data/lib/bundler/source/gemspec.rb +1 -0
  175. data/lib/bundler/source/git/git_proxy.rb +281 -125
  176. data/lib/bundler/source/git.rb +102 -73
  177. data/lib/bundler/source/metadata.rb +62 -0
  178. data/lib/bundler/source/path/installer.rb +13 -32
  179. data/lib/bundler/source/path.rb +36 -25
  180. data/lib/bundler/source/rubygems/remote.rb +9 -4
  181. data/lib/bundler/source/rubygems.rb +273 -226
  182. data/lib/bundler/source/rubygems_aggregate.rb +68 -0
  183. data/lib/bundler/source.rb +65 -9
  184. data/lib/bundler/source_list.rb +138 -33
  185. data/lib/bundler/source_map.rb +71 -0
  186. data/lib/bundler/spec_set.rb +101 -72
  187. data/lib/bundler/stub_specification.rb +45 -36
  188. data/lib/bundler/templates/.document +1 -0
  189. data/lib/bundler/templates/Executable +13 -3
  190. data/lib/bundler/templates/Executable.bundler +109 -0
  191. data/lib/bundler/templates/Executable.standalone +4 -4
  192. data/lib/bundler/templates/Gemfile +1 -2
  193. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  194. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  195. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  196. data/lib/bundler/templates/newgem/Gemfile.tt +22 -2
  197. data/lib/bundler/templates/newgem/README.md.tt +14 -16
  198. data/lib/bundler/templates/newgem/Rakefile.tt +43 -5
  199. data/lib/bundler/templates/newgem/bin/console.tt +1 -4
  200. data/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  201. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  202. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  203. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  204. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  205. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  206. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  207. data/lib/bundler/templates/newgem/gitignore.tt +3 -1
  208. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  209. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  210. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +5 -2
  211. data/lib/bundler/templates/newgem/newgem.gemspec.tt +39 -35
  212. data/lib/bundler/templates/newgem/rspec.tt +1 -0
  213. data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  214. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  215. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -1
  216. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  217. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  218. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  219. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  220. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  221. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  222. data/lib/bundler/ui/rg_proxy.rb +2 -1
  223. data/lib/bundler/ui/shell.rb +49 -17
  224. data/lib/bundler/ui/silent.rb +22 -5
  225. data/lib/bundler/ui.rb +4 -3
  226. data/lib/bundler/uri_credentials_filter.rb +11 -4
  227. data/lib/bundler/uri_normalizer.rb +23 -0
  228. data/lib/bundler/vendor/.document +1 -0
  229. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  230. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  231. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  232. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  233. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  234. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  235. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +2706 -0
  236. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  237. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  238. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  239. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  240. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  241. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  242. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  243. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  244. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  245. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  246. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  247. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  248. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  249. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  250. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  251. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  252. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  253. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  254. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  255. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  256. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  257. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  258. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  259. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +2 -1
  260. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +4 -2
  261. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  262. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +9 -1
  263. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +64 -16
  264. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +27 -11
  265. data/lib/bundler/vendor/thor/lib/thor/actions.rb +38 -16
  266. data/lib/bundler/vendor/thor/lib/thor/base.rb +84 -41
  267. data/lib/bundler/vendor/thor/lib/thor/command.rb +30 -21
  268. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +18 -0
  269. data/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
  270. data/lib/bundler/vendor/thor/lib/thor/group.rb +4 -4
  271. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  272. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
  273. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  274. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  275. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  276. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  277. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +22 -9
  278. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +45 -10
  279. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  280. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  281. data/lib/bundler/vendor/thor/lib/thor/runner.rb +17 -14
  282. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +97 -21
  283. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  284. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  285. data/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  286. data/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  287. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  288. data/lib/bundler/vendor/thor/lib/thor.rb +39 -15
  289. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  290. data/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  291. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  292. data/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  293. data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  294. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  295. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  296. data/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  297. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  298. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  299. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  300. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  301. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  302. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  303. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  304. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  305. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  306. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  307. data/lib/bundler/vendored_fileutils.rb +4 -0
  308. data/lib/bundler/vendored_persistent.rb +6 -8
  309. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +2 -1
  310. data/lib/bundler/vendored_thor.rb +3 -2
  311. data/lib/bundler/vendored_tsort.rb +4 -0
  312. data/lib/bundler/vendored_uri.rb +4 -0
  313. data/lib/bundler/version.rb +8 -19
  314. data/lib/bundler/vlad.rb +6 -1
  315. data/lib/bundler/worker.rb +26 -14
  316. data/lib/bundler/yaml_serializer.rb +6 -7
  317. data/lib/bundler.rb +336 -199
  318. metadata +174 -236
  319. data/.codeclimate.yml +0 -25
  320. data/.gitignore +0 -18
  321. data/.rspec +0 -3
  322. data/.rubocop.yml +0 -131
  323. data/.rubocop_todo.yml +0 -418
  324. data/.travis.yml +0 -122
  325. data/CODE_OF_CONDUCT.md +0 -42
  326. data/CONTRIBUTING.md +0 -17
  327. data/Rakefile +0 -338
  328. data/bin/rake +0 -19
  329. data/bin/rspec +0 -15
  330. data/bin/rubocop +0 -17
  331. data/bin/with_rubygems +0 -39
  332. data/doc/README.md +0 -30
  333. data/doc/TROUBLESHOOTING.md +0 -64
  334. data/doc/contributing/BUG_TRIAGE.md +0 -36
  335. data/doc/contributing/COMMUNITY.md +0 -13
  336. data/doc/contributing/GETTING_HELP.md +0 -11
  337. data/doc/contributing/HOW_YOU_CAN_HELP.md +0 -27
  338. data/doc/contributing/ISSUES.md +0 -51
  339. data/doc/contributing/README.md +0 -38
  340. data/doc/development/NEW_FEATURES.md +0 -10
  341. data/doc/development/PULL_REQUESTS.md +0 -40
  342. data/doc/development/README.md +0 -19
  343. data/doc/development/RELEASING.md +0 -9
  344. data/doc/development/SETUP.md +0 -27
  345. data/doc/documentation/README.md +0 -29
  346. data/doc/documentation/VISION.md +0 -26
  347. data/doc/documentation/WRITING.md +0 -54
  348. data/exe/bundle_ruby +0 -59
  349. data/lib/bundler/cli/package.rb +0 -46
  350. data/lib/bundler/dep_proxy.rb +0 -46
  351. data/lib/bundler/gem_remote_fetcher.rb +0 -42
  352. data/lib/bundler/gemdeps.rb +0 -28
  353. data/lib/bundler/psyched_yaml.rb +0 -27
  354. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -65
  355. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  356. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  357. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  358. data/lib/bundler/templates/newgem/.travis.yml.tt +0 -5
  359. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -3
  360. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  361. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -50
  362. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -80
  363. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -35
  364. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -65
  365. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -61
  366. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -62
  367. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -60
  368. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -125
  369. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -45
  370. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -35
  371. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -125
  372. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -222
  373. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -75
  374. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -5
  375. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -100
  376. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -65
  377. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -494
  378. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -45
  379. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -54
  380. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -10
  381. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  382. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  383. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  384. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  385. data/lib/bundler/version_ranges.rb +0 -75
  386. data/man/bundle-add.1 +0 -43
  387. data/man/bundle-add.1.txt +0 -40
  388. data/man/bundle-add.ronn +0 -29
  389. data/man/bundle-binstubs.1 +0 -30
  390. data/man/bundle-binstubs.1.txt +0 -33
  391. data/man/bundle-binstubs.ronn +0 -29
  392. data/man/bundle-check.1.txt +0 -32
  393. data/man/bundle-clean.1.txt +0 -26
  394. data/man/bundle-config.1.txt +0 -418
  395. data/man/bundle-config.ronn +0 -318
  396. data/man/bundle-exec.1.txt +0 -171
  397. data/man/bundle-gem.1 +0 -80
  398. data/man/bundle-gem.1.txt +0 -90
  399. data/man/bundle-gem.ronn +0 -77
  400. data/man/bundle-info.1.txt +0 -21
  401. data/man/bundle-init.1 +0 -20
  402. data/man/bundle-init.1.txt +0 -24
  403. data/man/bundle-init.ronn +0 -18
  404. data/man/bundle-inject.1.txt +0 -32
  405. data/man/bundle-install.1.txt +0 -385
  406. data/man/bundle-lock.1.txt +0 -93
  407. data/man/bundle-open.1.txt +0 -29
  408. data/man/bundle-outdated.1.txt +0 -127
  409. data/man/bundle-package.1 +0 -52
  410. data/man/bundle-package.1.txt +0 -74
  411. data/man/bundle-platform.1.txt +0 -57
  412. data/man/bundle-pristine.1 +0 -16
  413. data/man/bundle-pristine.1.txt +0 -21
  414. data/man/bundle-pristine.ronn +0 -13
  415. data/man/bundle-show.1.txt +0 -25
  416. data/man/bundle-update.1.txt +0 -388
  417. data/man/bundle-viz.1.txt +0 -37
  418. data/man/bundle.1.txt +0 -110
  419. data/man/bundle.ronn +0 -105
  420. data/man/gemfile.5.txt +0 -600
  421. data/man/index.txt +0 -15
  422. data/task/release.rake +0 -116
  423. /data/lib/bundler/{ssl_certs → man}/.document +0 -0
  424. /data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
data/lib/bundler/dsl.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require "bundler/dependency"
3
- require "bundler/ruby_dsl"
2
+
3
+ require_relative "dependency"
4
+ require_relative "ruby_dsl"
4
5
 
5
6
  module Bundler
6
7
  class Dsl
@@ -14,6 +15,11 @@ module Bundler
14
15
 
15
16
  VALID_PLATFORMS = Bundler::Dependency::PLATFORM_MAP.keys.freeze
16
17
 
18
+ VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
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
22
+
17
23
  attr_reader :gemspecs
18
24
  attr_accessor :dependencies
19
25
 
@@ -30,16 +36,18 @@ module Bundler
30
36
  @ruby_version = nil
31
37
  @gemspecs = []
32
38
  @gemfile = nil
39
+ @gemfiles = []
33
40
  add_git_sources
34
41
  end
35
42
 
36
43
  def eval_gemfile(gemfile, contents = nil)
37
- expanded_gemfile_path = Pathname.new(gemfile).expand_path
44
+ expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile && @gemfile.parent)
38
45
  original_gemfile = @gemfile
39
46
  @gemfile = expanded_gemfile_path
40
- contents ||= Bundler.read_file(gemfile.to_s)
41
- instance_eval(contents.dup.untaint, gemfile.to_s, 1)
42
- rescue Exception => e
47
+ @gemfiles << expanded_gemfile_path
48
+ contents ||= Bundler.read_file(@gemfile.to_s)
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
43
51
  message = "There was an error " \
44
52
  "#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
45
53
  "`#{File.basename gemfile.to_s}`: #{e.message}"
@@ -57,9 +65,8 @@ module Bundler
57
65
  development_group = opts[:development_group] || :development
58
66
  expanded_path = gemfile_root.join(path)
59
67
 
60
- 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
61
69
  gemspecs.reject! {|s| s.name != name } if name
62
- Index.sort_specs(gemspecs)
63
70
  specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
64
71
 
65
72
  case specs_by_name_and_version.size
@@ -69,8 +76,7 @@ module Bundler
69
76
 
70
77
  @gemspecs << spec
71
78
 
72
- gem_platforms = Bundler::Dependency::REVERSE_PLATFORM_MAP[Bundler::GemHelpers.generic_local_platform]
73
- gem spec.name, :name => spec.name, :path => path, :glob => glob, :platforms => gem_platforms
79
+ gem spec.name, :name => spec.name, :path => path, :glob => glob
74
80
 
75
81
  group(development_group) do
76
82
  spec.development_dependencies.each do |dep|
@@ -87,6 +93,7 @@ module Bundler
87
93
 
88
94
  def gem(name, *args)
89
95
  options = args.last.is_a?(Hash) ? args.pop.dup : {}
96
+ options["gemfile"] = @gemfile
90
97
  version = args || [">= 0"]
91
98
 
92
99
  normalize_options(name, version, options)
@@ -95,29 +102,37 @@ module Bundler
95
102
 
96
103
  # if there's already a dependency with this name we try to prefer one
97
104
  if current = @dependencies.find {|d| d.name == dep.name }
98
- if current.requirement != dep.requirement
99
- if current.type == :development
100
- @dependencies.delete current
101
- else
105
+ deleted_dep = @dependencies.delete(current) if current.type == :development
106
+
107
+ unless deleted_dep
108
+ if current.requirement != dep.requirement
102
109
  return if dep.type == :development
103
- raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
104
- "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})"
105
- end
106
110
 
107
- else
108
- Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
109
- "You should probably keep only one of them.\n" \
110
- "While it's not a problem now, it could cause errors if you change the version of one of them later."
111
- end
111
+ update_prompt = ""
112
112
 
113
- if current.source != dep.source
114
- if current.type == :development
115
- @dependencies.delete current
116
- else
113
+ if File.basename(@gemfile) == Injector::INJECTED_GEMS
114
+ if dep.requirements_list.include?(">= 0") && !current.requirements_list.include?(">= 0")
115
+ update_prompt = ". Gem already added"
116
+ else
117
+ update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"
118
+
119
+ 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")
120
+ end
121
+ end
122
+
123
+ raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
124
+ "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
125
+ "#{update_prompt}"
126
+ elsif current.source != dep.source
117
127
  return if dep.type == :development
118
128
  raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
119
129
  "You specified that #{dep.name} (#{dep.requirement}) should come from " \
120
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."
121
136
  end
122
137
  end
123
138
  end
@@ -128,10 +143,12 @@ module Bundler
128
143
  def source(source, *args, &blk)
129
144
  options = args.last.is_a?(Hash) ? args.pop.dup : {}
130
145
  options = normalize_hash(options)
146
+ source = normalize_source(source)
147
+
131
148
  if options.key?("type")
132
149
  options["type"] = options["type"].to_s
133
150
  unless Plugin.source?(options["type"])
134
- raise "No sources available for #{options["type"]}"
151
+ raise InvalidOption, "No plugin sources available for #{options["type"]}"
135
152
  end
136
153
 
137
154
  unless block_given?
@@ -141,12 +158,9 @@ module Bundler
141
158
  source_opts = options.merge("uri" => source)
142
159
  with_source(@sources.add_plugin_source(options["type"], source_opts), &blk)
143
160
  elsif block_given?
144
- source = normalize_source(source)
145
161
  with_source(@sources.add_rubygems_source("remotes" => source), &blk)
146
162
  else
147
- source = normalize_source(source)
148
- check_primary_source_safety(@sources)
149
- @sources.add_rubygems_remote(source)
163
+ @sources.add_global_rubygems_remote(source)
150
164
  end
151
165
  end
152
166
 
@@ -169,6 +183,9 @@ module Bundler
169
183
  "root_path" => gemfile_root,
170
184
  "gemspec" => gemspecs.find {|g| g.name == options["name"] }
171
185
  )
186
+
187
+ source_options["global"] = true unless block_given?
188
+
172
189
  source = @sources.add_path_source(source_options)
173
190
  with_source(source, &blk)
174
191
  end
@@ -197,16 +214,17 @@ module Bundler
197
214
  end
198
215
 
199
216
  def to_definition(lockfile, unlock)
200
- Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups)
217
+ check_primary_source_safety
218
+ Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups, @gemfiles)
201
219
  end
202
220
 
203
221
  def group(*args, &blk)
204
- opts = Hash === args.last ? args.pop.dup : {}
205
- normalize_group_options(opts, args)
222
+ options = args.last.is_a?(Hash) ? args.pop.dup : {}
223
+ normalize_group_options(options, args)
206
224
 
207
225
  @groups.concat args
208
226
 
209
- if opts["optional"]
227
+ if options["optional"]
210
228
  optional_groups = args - @optional_groups
211
229
  @optional_groups.concat optional_groups
212
230
  end
@@ -216,9 +234,9 @@ module Bundler
216
234
  args.each { @groups.pop }
217
235
  end
218
236
 
219
- def install_if(*args, &blk)
237
+ def install_if(*args)
220
238
  @install_conditionals.concat args
221
- blk.call
239
+ yield
222
240
  ensure
223
241
  args.each { @install_conditionals.pop }
224
242
  end
@@ -247,43 +265,34 @@ module Bundler
247
265
  raise GemfileError, "Undefined local variable or method `#{name}' for Gemfile"
248
266
  end
249
267
 
250
- private
268
+ def check_primary_source_safety
269
+ check_path_source_safety
270
+ check_rubygems_source_safety
271
+ end
272
+
273
+ private
251
274
 
252
275
  def add_git_sources
253
276
  git_source(:github) do |repo_name|
254
- # It would be better to use https instead of the git protocol, but this
255
- # can break deployment of existing locked bundles when switching between
256
- # different versions of Bundler. The change will be made in 2.0, which
257
- # does not guarantee compatibility with the 1.x series.
258
- #
259
- # See https://github.com/bundler/bundler/pull/2569 for discussion
260
- #
261
- # This can be overridden by adding this code to your Gemfiles:
262
- #
263
- # git_source(:github) do |repo_name|
264
- # repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
265
- # "https://github.com/#{repo_name}.git"
266
- # end
267
- repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
268
- # TODO: 2.0 upgrade this setting to the default
269
- if Bundler.settings["github.https"]
270
- "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
+ }
271
284
  else
272
- warn_github_source_change(repo_name)
273
- "git://github.com/#{repo_name}.git"
285
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
286
+ "https://github.com/#{repo_name}.git"
274
287
  end
275
288
  end
276
289
 
277
- # TODO: 2.0 remove this deprecated git source
278
290
  git_source(:gist) do |repo_name|
279
- warn_deprecated_git_source(:gist, 'https://gist.github.com/#{repo_name}.git')
280
291
  "https://gist.github.com/#{repo_name}.git"
281
292
  end
282
293
 
283
- # TODO: 2.0 remove this deprecated git source
284
294
  git_source(:bitbucket) do |repo_name|
285
- user_name, repo_name = repo_name.split "/"
286
- warn_deprecated_git_source(:bitbucket, 'https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git')
295
+ user_name, repo_name = repo_name.split("/")
287
296
  repo_name ||= user_name
288
297
  "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
289
298
  end
@@ -308,16 +317,17 @@ module Bundler
308
317
  end
309
318
 
310
319
  def valid_keys
311
- @valid_keys ||= %w(group groups git path glob name branch ref tag require submodules platform platforms type source install_if)
320
+ @valid_keys ||= VALID_KEYS
312
321
  end
313
322
 
314
323
  def normalize_options(name, version, opts)
315
324
  if name.is_a?(Symbol)
316
325
  raise GemfileError, %(You need to specify gem names as Strings. Use 'gem "#{name}"' instead)
317
326
  end
318
- if name =~ /\s/
327
+ if /\s/.match?(name)
319
328
  raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
320
329
  end
330
+ raise GemfileError, %(an empty gem name is not valid) if name.empty?
321
331
 
322
332
  normalize_hash(opts)
323
333
 
@@ -352,10 +362,14 @@ module Bundler
352
362
 
353
363
  git_name = (git_names & opts.keys).last
354
364
  if @git_sources[git_name]
355
- 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
356
370
  end
357
371
 
358
- %w(git path).each do |type|
372
+ %w[git path].each do |type|
359
373
  next unless param = opts[type]
360
374
  if version.first && version.first =~ /^\s*=?\s*(\d[^\s]*)\s*$/
361
375
  options = opts.merge("name" => name, "version" => $1)
@@ -366,8 +380,8 @@ module Bundler
366
380
  opts["source"] = source
367
381
  end
368
382
 
369
- opts["source"] ||= @source
370
- opts["env"] ||= @env
383
+ opts["source"] ||= @source
384
+ opts["env"] ||= @env
371
385
  opts["platforms"] = platforms.dup
372
386
  opts["group"] = groups
373
387
  opts["should_include"] = install_if
@@ -377,7 +391,7 @@ module Bundler
377
391
  normalize_hash(opts)
378
392
 
379
393
  groups = groups.map {|group| ":#{group}" }.join(", ")
380
- validate_keys("group #{groups}", opts, %w(optional))
394
+ validate_keys("group #{groups}", opts, %w[optional])
381
395
 
382
396
  opts["optional"] ||= false
383
397
  end
@@ -390,25 +404,25 @@ module Bundler
390
404
  raise GemfileError, %(The `branch` option for `#{command}` is not allowed. Only gems with a git source can specify a branch)
391
405
  end
392
406
 
393
- if invalid_keys.any?
394
- message = String.new
395
- message << "You passed #{invalid_keys.map {|k| ":" + k }.join(", ")} "
396
- message << if invalid_keys.size > 1
397
- "as options for #{command}, but they are invalid."
398
- else
399
- "as an option for #{command}, but it is invalid."
400
- end
401
-
402
- message << " Valid options are: #{valid_keys.join(", ")}."
403
- message << " You may be able to resolve this by upgrading Bundler to the newest version."
404
- raise InvalidOption, message
407
+ return true unless invalid_keys.any?
408
+
409
+ message = String.new
410
+ message << "You passed #{invalid_keys.map {|k| ":" + k }.join(", ")} "
411
+ message << if invalid_keys.size > 1
412
+ "as options for #{command}, but they are invalid."
413
+ else
414
+ "as an option for #{command}, but it is invalid."
405
415
  end
416
+
417
+ message << " Valid options are: #{valid_keys.join(", ")}."
418
+ message << " You may be able to resolve this by upgrading Bundler to the newest version."
419
+ raise InvalidOption, message
406
420
  end
407
421
 
408
422
  def normalize_source(source)
409
423
  case source
410
424
  when :gemcutter, :rubygems, :rubyforge
411
- Bundler::SharedHelpers.major_deprecation "The source :#{source} is deprecated because HTTP " \
425
+ Bundler::SharedHelpers.major_deprecation 2, "The source :#{source} is deprecated because HTTP " \
412
426
  "requests are insecure.\nPlease change your source to 'https://" \
413
427
  "rubygems.org' if possible, or 'http://rubygems.org' if not."
414
428
  "http://rubygems.org"
@@ -419,40 +433,47 @@ module Bundler
419
433
  end
420
434
  end
421
435
 
422
- def check_primary_source_safety(source)
423
- return unless source.rubygems_primary_remotes.any?
436
+ def check_path_source_safety
437
+ return if @sources.global_path_source.nil?
424
438
 
425
- # TODO: 2.0 upgrade from setting to default
426
- if Bundler.settings[:disable_multisource]
427
- raise GemfileError, "Warning: this Gemfile contains multiple primary sources. " \
428
- "Each source after the first must include a block to indicate which gems " \
429
- "should come from that source. To downgrade this error to a warning, run " \
430
- "`bundle config --delete disable_multisource`"
431
- else
432
- Bundler::SharedHelpers.major_deprecation "Your Gemfile contains multiple primary sources. " \
433
- "Using `source` more than once without a block is a security risk, and " \
434
- "may result in installing unexpected gems. To resolve this warning, use " \
435
- "a block to indicate which gems should come from the secondary source. " \
436
- "To upgrade this warning to an error, run `bundle config " \
437
- "disable_multisource true`."
438
- end
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)
439
448
  end
440
449
 
441
- def warn_github_source_change(repo_name)
442
- # TODO: 2.0 remove deprecation
443
- Bundler::SharedHelpers.major_deprecation "The :github option uses the git: protocol, which is not secure. " \
444
- "Bundler 2.0 will use the https: protocol, which is secure. Enable this change now by " \
445
- "running `bundle config github.https true`."
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
446
456
  end
447
457
 
448
- def warn_deprecated_git_source(name, repo_string)
449
- # TODO: 2.0 remove deprecation
450
- Bundler::SharedHelpers.major_deprecation <<-EOS
451
- The :#{name} git source is deprecated, and will be removed in Bundler 2.0. Add this code to your Gemfile to ensure it continues to work:
452
- git_source(:#{name}) do |repo_name|
453
- "#{repo_string}"
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\"."
454
463
  end
455
- EOS
464
+
465
+ def multiple_global_source_warning
466
+ if Bundler.feature_flag.bundler_3_mode?
467
+ msg = "This Gemfile contains multiple global sources. " \
468
+ "Each source after the first must include a block to indicate which gems " \
469
+ "should come from that source"
470
+ raise GemfileEvalError, msg
471
+ else
472
+ Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple global sources. " \
473
+ "Using `source` more than once without a block is a security risk, and " \
474
+ "may result in installing unexpected gems. To resolve this warning, use " \
475
+ "a block to indicate which gems should come from the secondary source."
476
+ end
456
477
  end
457
478
 
458
479
  class DSLError < GemfileError
@@ -489,9 +510,7 @@ The :#{name} git source is deprecated, and will be removed in Bundler 2.0. Add t
489
510
  # be raised.
490
511
  #
491
512
  def contents
492
- @contents ||= begin
493
- dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
494
- end
513
+ @contents ||= dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
495
514
  end
496
515
 
497
516
  # The message of the exception reports the content of podspec for the
@@ -530,7 +549,7 @@ The :#{name} git source is deprecated, and will be removed in Bundler 2.0. Add t
530
549
  lines = contents.lines.to_a
531
550
  indent = " # "
532
551
  indicator = indent.tr("#", ">")
533
- first_line = (line_numer.zero?)
552
+ first_line = line_numer.zero?
534
553
  last_line = (line_numer == (lines.count - 1))
535
554
 
536
555
  m << "\n"
@@ -544,13 +563,13 @@ The :#{name} git source is deprecated, and will be removed in Bundler 2.0. Add t
544
563
  end
545
564
  end
546
565
 
547
- private
566
+ private
548
567
 
549
568
  def parse_line_number_from_description
550
569
  description = self.description
551
570
  if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path.to_s}):\d+)/
552
571
  trace_line = Regexp.last_match[1]
553
- description = description.sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
572
+ description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
554
573
  end
555
574
  [trace_line, description]
556
575
  end
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  # used for Creating Specifications from the Gemcutter Endpoint
4
5
  class EndpointSpecification < Gem::Specification
5
- ILLFORMED_MESSAGE = 'Ill-formed requirement ["#<YAML::Syck::DefaultKey'.freeze
6
- include MatchPlatform
6
+ include MatchRemoteMetadata
7
7
 
8
- attr_reader :name, :version, :platform, :required_rubygems_version, :required_ruby_version, :checksum
8
+ attr_reader :name, :version, :platform, :checksum
9
9
  attr_accessor :source, :remote, :dependencies
10
10
 
11
- def initialize(name, version, platform, dependencies, metadata = nil)
11
+ def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
12
+ super()
12
13
  @name = name
13
14
  @version = Gem::Version.create version
14
- @platform = platform
15
+ @platform = Gem::Platform.new(platform)
16
+ @spec_fetcher = spec_fetcher
15
17
  @dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }
16
18
 
19
+ @loaded_from = nil
20
+ @remote_specification = nil
21
+
17
22
  parse_metadata(metadata)
18
23
  end
19
24
 
@@ -71,6 +76,8 @@ module Bundler
71
76
  @remote_specification.post_install_message
72
77
  elsif _local_specification
73
78
  _local_specification.post_install_message
79
+ else
80
+ super
74
81
  end
75
82
  end
76
83
 
@@ -80,6 +87,8 @@ module Bundler
80
87
  @remote_specification.extensions
81
88
  elsif _local_specification
82
89
  _local_specification.extensions
90
+ else
91
+ super
83
92
  end
84
93
  end
85
94
 
@@ -95,14 +104,23 @@ module Bundler
95
104
  @remote_specification = spec
96
105
  end
97
106
 
98
- private
107
+ private
108
+
109
+ def _remote_specification
110
+ @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
111
+ end
99
112
 
100
113
  def local_specification_path
101
114
  "#{base_dir}/specifications/#{full_name}.gemspec"
102
115
  end
103
116
 
104
117
  def parse_metadata(data)
105
- return unless data
118
+ unless data
119
+ @required_ruby_version = nil
120
+ @required_rubygems_version = nil
121
+ return
122
+ end
123
+
106
124
  data.each do |k, v|
107
125
  next unless v
108
126
  case k.to_s
@@ -114,19 +132,12 @@ module Bundler
114
132
  @required_ruby_version = Gem::Requirement.new(v)
115
133
  end
116
134
  end
117
- rescue => e
135
+ rescue StandardError => e
118
136
  raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}"
119
137
  end
120
138
 
121
139
  def build_dependency(name, requirements)
122
140
  Gem::Dependency.new(name, requirements)
123
- rescue ArgumentError => e
124
- raise unless e.message.include?(ILLFORMED_MESSAGE)
125
- puts # we shouldn't print the error message on the "fetching info" status line
126
- raise GemspecError,
127
- "Unfortunately, the gem #{name} (#{version}) has an invalid " \
128
- "gemspec.\nPlease ask the gem author to yank the bad version to fix " \
129
- "this issue. For more information, see http://bit.ly/syck-defaultkey."
130
141
  end
131
142
  end
132
143
  end