bundler 1.17.2 → 2.2.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (322) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2095 -1251
  3. data/LICENSE.md +18 -19
  4. data/README.md +10 -11
  5. data/bundler.gemspec +10 -28
  6. data/exe/bundle +22 -3
  7. data/lib/bundler/build_metadata.rb +4 -12
  8. data/lib/bundler/capistrano.rb +4 -4
  9. data/lib/bundler/cli/add.rb +28 -16
  10. data/lib/bundler/cli/binstubs.rb +6 -2
  11. data/lib/bundler/cli/cache.rb +24 -17
  12. data/lib/bundler/cli/check.rb +4 -2
  13. data/lib/bundler/cli/clean.rb +1 -1
  14. data/lib/bundler/cli/common.rb +39 -13
  15. data/lib/bundler/cli/config.rb +161 -86
  16. data/lib/bundler/cli/console.rb +1 -1
  17. data/lib/bundler/cli/doctor.rb +20 -9
  18. data/lib/bundler/cli/exec.rb +8 -25
  19. data/lib/bundler/cli/fund.rb +36 -0
  20. data/lib/bundler/cli/gem.rb +213 -32
  21. data/lib/bundler/cli/info.rb +42 -7
  22. data/lib/bundler/cli/init.rb +2 -2
  23. data/lib/bundler/cli/inject.rb +1 -1
  24. data/lib/bundler/cli/install.rb +34 -44
  25. data/lib/bundler/cli/issue.rb +8 -7
  26. data/lib/bundler/cli/list.rb +19 -11
  27. data/lib/bundler/cli/lock.rb +5 -1
  28. data/lib/bundler/cli/open.rb +11 -8
  29. data/lib/bundler/cli/outdated.rb +142 -118
  30. data/lib/bundler/cli/plugin.rb +19 -2
  31. data/lib/bundler/cli/pristine.rb +6 -1
  32. data/lib/bundler/cli/remove.rb +1 -2
  33. data/lib/bundler/cli/show.rb +2 -2
  34. data/lib/bundler/cli/update.rb +43 -16
  35. data/lib/bundler/cli.rb +211 -150
  36. data/lib/bundler/compact_index_client/cache.rb +6 -14
  37. data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  38. data/lib/bundler/compact_index_client/updater.rb +15 -28
  39. data/lib/bundler/compact_index_client.rb +28 -12
  40. data/lib/bundler/current_ruby.rb +14 -11
  41. data/lib/bundler/definition.rb +207 -368
  42. data/lib/bundler/dep_proxy.rb +16 -9
  43. data/lib/bundler/dependency.rb +19 -14
  44. data/lib/bundler/deployment.rb +1 -1
  45. data/lib/bundler/digest.rb +71 -0
  46. data/lib/bundler/dsl.rb +81 -81
  47. data/lib/bundler/endpoint_specification.rb +1 -1
  48. data/lib/bundler/env.rb +9 -14
  49. data/lib/bundler/environment_preserver.rb +29 -3
  50. data/lib/bundler/errors.rb +20 -3
  51. data/lib/bundler/feature_flag.rb +14 -33
  52. data/lib/bundler/fetcher/base.rb +1 -1
  53. data/lib/bundler/fetcher/compact_index.rb +28 -14
  54. data/lib/bundler/fetcher/dependency.rb +1 -1
  55. data/lib/bundler/fetcher/downloader.rb +14 -8
  56. data/lib/bundler/fetcher/index.rb +8 -8
  57. data/lib/bundler/fetcher.rb +22 -17
  58. data/lib/bundler/friendly_errors.rb +29 -48
  59. data/lib/bundler/gem_helper.rb +79 -43
  60. data/lib/bundler/gem_helpers.rb +38 -29
  61. data/lib/bundler/gem_tasks.rb +1 -1
  62. data/lib/bundler/gem_version_promoter.rb +5 -5
  63. data/lib/bundler/graph.rb +3 -3
  64. data/lib/bundler/index.rb +9 -9
  65. data/lib/bundler/injector.rb +33 -13
  66. data/lib/bundler/inline.rb +41 -30
  67. data/lib/bundler/installer/gem_installer.rb +9 -18
  68. data/lib/bundler/installer/parallel_installer.rb +50 -33
  69. data/lib/bundler/installer/standalone.rb +30 -11
  70. data/lib/bundler/installer.rb +39 -66
  71. data/lib/bundler/lazy_specification.rb +63 -28
  72. data/lib/bundler/lockfile_generator.rb +1 -1
  73. data/lib/bundler/lockfile_parser.rb +19 -52
  74. data/lib/bundler/{ssl_certs → man}/.document +0 -0
  75. data/{man → lib/bundler/man}/bundle-add.1 +10 -2
  76. data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
  77. data/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  78. data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  79. data/lib/bundler/man/bundle-cache.1 +55 -0
  80. data/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
  81. data/{man → lib/bundler/man}/bundle-check.1 +1 -1
  82. data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  83. data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  84. data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  85. data/{man → lib/bundler/man}/bundle-config.1 +59 -60
  86. data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +77 -78
  87. data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  88. data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  89. data/{man → lib/bundler/man}/bundle-exec.1 +2 -2
  90. data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  91. data/{man → lib/bundler/man}/bundle-gem.1 +38 -3
  92. data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +46 -7
  93. data/{man → lib/bundler/man}/bundle-info.1 +1 -1
  94. data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  95. data/{man → lib/bundler/man}/bundle-init.1 +2 -2
  96. data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
  97. data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  98. data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  99. data/{man → lib/bundler/man}/bundle-install.1 +37 -7
  100. data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
  101. data/{man → lib/bundler/man}/bundle-list.1 +7 -7
  102. data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  103. data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  104. data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  105. data/{man → lib/bundler/man}/bundle-open.1 +1 -1
  106. data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  107. data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  108. data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  109. data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  110. data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  111. data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  112. data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  113. data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  114. data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  115. data/{man → lib/bundler/man}/bundle-show.1 +1 -1
  116. data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  117. data/{man → lib/bundler/man}/bundle-update.1 +7 -7
  118. data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +6 -6
  119. data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  120. data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  121. data/{man → lib/bundler/man}/bundle.1 +7 -3
  122. data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +5 -2
  123. data/{man → lib/bundler/man}/gemfile.5 +44 -21
  124. data/{man → lib/bundler/man}/gemfile.5.ronn +24 -20
  125. data/{man → lib/bundler/man}/index.txt +1 -1
  126. data/lib/bundler/match_platform.rb +1 -1
  127. data/lib/bundler/mirror.rb +5 -5
  128. data/lib/bundler/plugin/api/source.rb +27 -7
  129. data/lib/bundler/plugin/api.rb +1 -1
  130. data/lib/bundler/plugin/dsl.rb +1 -1
  131. data/lib/bundler/plugin/index.rb +27 -4
  132. data/lib/bundler/plugin/installer/rubygems.rb +1 -1
  133. data/lib/bundler/plugin/installer.rb +35 -22
  134. data/lib/bundler/plugin/source_list.rb +5 -1
  135. data/lib/bundler/plugin.rb +100 -42
  136. data/lib/bundler/psyched_yaml.rb +0 -15
  137. data/lib/bundler/remote_specification.rb +5 -4
  138. data/lib/bundler/resolver/spec_group.rb +57 -53
  139. data/lib/bundler/resolver.rb +127 -113
  140. data/lib/bundler/retry.rb +4 -4
  141. data/lib/bundler/ruby_version.rb +5 -20
  142. data/lib/bundler/rubygems_ext.rb +103 -79
  143. data/lib/bundler/rubygems_gem_installer.rb +69 -8
  144. data/lib/bundler/rubygems_integration.rb +181 -446
  145. data/lib/bundler/runtime.rb +24 -34
  146. data/lib/bundler/settings.rb +159 -110
  147. data/lib/bundler/setup.rb +11 -12
  148. data/lib/bundler/shared_helpers.rb +56 -90
  149. data/lib/bundler/similarity_detector.rb +3 -3
  150. data/lib/bundler/source/git/git_proxy.rb +106 -105
  151. data/lib/bundler/source/git.rb +66 -39
  152. data/lib/bundler/source/metadata.rb +9 -9
  153. data/lib/bundler/source/path/installer.rb +10 -10
  154. data/lib/bundler/source/path.rb +23 -12
  155. data/lib/bundler/source/rubygems/remote.rb +3 -4
  156. data/lib/bundler/source/rubygems.rb +136 -120
  157. data/lib/bundler/source/rubygems_aggregate.rb +68 -0
  158. data/lib/bundler/source.rb +27 -6
  159. data/lib/bundler/source_list.rb +101 -66
  160. data/lib/bundler/source_map.rb +58 -0
  161. data/lib/bundler/spec_set.rb +49 -53
  162. data/lib/bundler/stub_specification.rb +40 -34
  163. data/lib/bundler/templates/Executable.bundler +24 -15
  164. data/lib/bundler/templates/Gemfile +1 -1
  165. data/lib/bundler/templates/gems.rb +1 -1
  166. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  167. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  168. data/lib/bundler/templates/newgem/Gemfile.tt +19 -2
  169. data/lib/bundler/templates/newgem/README.md.tt +7 -5
  170. data/lib/bundler/templates/newgem/Rakefile.tt +23 -5
  171. data/lib/bundler/templates/newgem/bin/console.tt +1 -0
  172. data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  173. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  174. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +27 -0
  175. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  176. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  177. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  178. data/lib/bundler/templates/newgem/newgem.gemspec.tt +29 -40
  179. data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  180. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  181. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  182. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  183. data/lib/bundler/templates/newgem/standard.yml.tt +2 -0
  184. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  185. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  186. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  187. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  188. data/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  189. data/lib/bundler/ui/rg_proxy.rb +1 -1
  190. data/lib/bundler/ui/shell.rb +7 -11
  191. data/lib/bundler/ui.rb +3 -3
  192. data/lib/bundler/uri_credentials_filter.rb +10 -4
  193. data/lib/bundler/vendor/.document +1 -0
  194. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  195. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  196. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  197. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
  198. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +126 -0
  199. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  200. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
  201. data/lib/bundler/vendor/molinillo/LICENSE +9 -0
  202. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  203. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  204. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  205. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  206. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  207. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  208. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  209. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
  210. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
  211. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +38 -6
  212. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
  213. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  214. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
  215. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
  216. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  217. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
  218. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  219. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  220. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  221. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  222. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  223. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  224. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  225. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  226. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  227. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +20 -9
  228. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
  229. data/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
  230. data/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  231. data/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  232. data/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
  233. data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  234. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  235. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  236. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  237. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  238. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  239. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  240. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  241. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +21 -5
  242. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  243. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  244. data/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  245. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
  246. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  247. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  248. data/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  249. data/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  250. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  251. data/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  252. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  253. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  254. data/lib/bundler/vendor/tsort/lib/tsort.rb +453 -0
  255. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  256. data/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
  257. data/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
  258. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  259. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
  260. data/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
  261. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  262. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  263. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
  264. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
  265. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  266. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
  267. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  268. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  269. data/lib/bundler/vendored_fileutils.rb +1 -6
  270. data/lib/bundler/vendored_molinillo.rb +1 -1
  271. data/lib/bundler/vendored_persistent.rb +7 -12
  272. data/lib/bundler/vendored_thor.rb +2 -2
  273. data/lib/bundler/vendored_tmpdir.rb +4 -0
  274. data/lib/bundler/vendored_tsort.rb +4 -0
  275. data/lib/bundler/vendored_uri.rb +4 -0
  276. data/lib/bundler/version.rb +1 -20
  277. data/lib/bundler/version_ranges.rb +51 -5
  278. data/lib/bundler/vlad.rb +2 -2
  279. data/lib/bundler/worker.rb +21 -8
  280. data/lib/bundler/yaml_serializer.rb +3 -4
  281. data/lib/bundler.rb +248 -118
  282. metadata +115 -190
  283. data/exe/bundle_ruby +0 -60
  284. data/lib/bundler/cli/package.rb +0 -49
  285. data/lib/bundler/compatibility_guard.rb +0 -14
  286. data/lib/bundler/gem_remote_fetcher.rb +0 -43
  287. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  288. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  289. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  290. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  291. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  292. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  293. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  294. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  295. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  296. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  297. data/man/bundle-add.1.txt +0 -52
  298. data/man/bundle-binstubs.1.txt +0 -48
  299. data/man/bundle-check.1.txt +0 -33
  300. data/man/bundle-clean.1.txt +0 -26
  301. data/man/bundle-config.1.txt +0 -529
  302. data/man/bundle-doctor.1.txt +0 -44
  303. data/man/bundle-exec.1.txt +0 -178
  304. data/man/bundle-gem.1.txt +0 -91
  305. data/man/bundle-info.1.txt +0 -21
  306. data/man/bundle-init.1.txt +0 -34
  307. data/man/bundle-inject.1.txt +0 -32
  308. data/man/bundle-install.1.txt +0 -396
  309. data/man/bundle-list.1.txt +0 -43
  310. data/man/bundle-lock.1.txt +0 -93
  311. data/man/bundle-open.1.txt +0 -29
  312. data/man/bundle-outdated.1.txt +0 -131
  313. data/man/bundle-package.1 +0 -55
  314. data/man/bundle-package.1.txt +0 -79
  315. data/man/bundle-platform.1.txt +0 -57
  316. data/man/bundle-pristine.1.txt +0 -44
  317. data/man/bundle-remove.1.txt +0 -34
  318. data/man/bundle-show.1.txt +0 -27
  319. data/man/bundle-update.1.txt +0 -391
  320. data/man/bundle-viz.1.txt +0 -39
  321. data/man/bundle.1.txt +0 -113
  322. data/man/gemfile.5.txt +0 -653
@@ -8,7 +8,7 @@ module Bundler
8
8
  "#{spec.name} #{spec.version}"
9
9
  end
10
10
 
11
- private
11
+ private
12
12
 
13
13
  def requires_sudo?
14
14
  false # Will change on implementation of project level plugins
@@ -8,18 +8,21 @@ module Bundler
8
8
  # are heavily dependent on the Gemfile.
9
9
  module Plugin
10
10
  class Installer
11
- autoload :Rubygems, "bundler/plugin/installer/rubygems"
12
- autoload :Git, "bundler/plugin/installer/git"
11
+ autoload :Rubygems, File.expand_path("installer/rubygems", __dir__)
12
+ autoload :Git, File.expand_path("installer/git", __dir__)
13
13
 
14
14
  def install(names, options)
15
+ check_sources_consistency!(options)
16
+
15
17
  version = options[:version] || [">= 0"]
16
- Bundler.settings.temporary(:lockfile_uses_separate_rubygems_sources => false, :disable_multisource => false) do
17
- if options[:git]
18
- install_git(names, version, options)
19
- else
20
- sources = options[:source] || Bundler.rubygems.sources
21
- install_rubygems(names, version, sources)
22
- end
18
+
19
+ if options[:git]
20
+ install_git(names, version, options)
21
+ elsif options[:local_git]
22
+ install_local_git(names, version, options)
23
+ else
24
+ sources = options[:source] || Bundler.rubygems.sources
25
+ install_rubygems(names, version, sources)
23
26
  end
24
27
  end
25
28
 
@@ -36,24 +39,26 @@ module Bundler
36
39
  install_from_specs specs
37
40
  end
38
41
 
39
- private
42
+ private
43
+
44
+ def check_sources_consistency!(options)
45
+ if options.key?(:git) && options.key?(:local_git)
46
+ raise InvalidOption, "Remote and local plugin git sources can't be both specified"
47
+ end
48
+ end
40
49
 
41
50
  def install_git(names, version, options)
42
51
  uri = options.delete(:git)
43
52
  options["uri"] = uri
44
53
 
45
- source_list = SourceList.new
46
- source_list.add_git_source(options)
47
-
48
- # To support both sources
49
- if options[:source]
50
- source_list.add_rubygems_source("remotes" => options[:source])
51
- end
54
+ install_all_sources(names, version, options, options[:source])
55
+ end
52
56
 
53
- deps = names.map {|name| Dependency.new name, version }
57
+ def install_local_git(names, version, options)
58
+ uri = options.delete(:local_git)
59
+ options["uri"] = uri
54
60
 
55
- definition = Definition.new(nil, deps, source_list, true)
56
- install_definition(definition)
61
+ install_all_sources(names, version, options, options[:source])
57
62
  end
58
63
 
59
64
  # Installs the plugin from rubygems source and returns the path where the
@@ -65,10 +70,18 @@ module Bundler
65
70
  #
66
71
  # @return [Hash] map of names to the specs of plugins installed
67
72
  def install_rubygems(names, version, sources)
68
- deps = names.map {|name| Dependency.new name, version }
73
+ install_all_sources(names, version, nil, sources)
74
+ end
69
75
 
76
+ def install_all_sources(names, version, git_source_options, rubygems_source)
70
77
  source_list = SourceList.new
71
- source_list.add_rubygems_source("remotes" => sources)
78
+
79
+ source_list.add_git_source(git_source_options) if git_source_options
80
+ Array(rubygems_source).each {|remote| source_list.add_global_rubygems_remote(remote) } if rubygems_source
81
+
82
+ deps = names.map {|name| Dependency.new name, version }
83
+
84
+ Bundler.configure_gem_home_and_path(Plugin.root)
72
85
 
73
86
  definition = Definition.new(nil, deps, source_list, true)
74
87
  install_definition(definition)
@@ -17,7 +17,11 @@ module Bundler
17
17
  path_sources + git_sources + rubygems_sources + [metadata_source]
18
18
  end
19
19
 
20
- private
20
+ def default_source
21
+ git_sources.first || global_rubygems_source
22
+ end
23
+
24
+ private
21
25
 
22
26
  def rubygems_aggregate_class
23
27
  Plugin::Installer::Rubygems
@@ -1,22 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/plugin/api"
3
+ require_relative "plugin/api"
4
4
 
5
5
  module Bundler
6
6
  module Plugin
7
- autoload :DSL, "bundler/plugin/dsl"
8
- autoload :Events, "bundler/plugin/events"
9
- autoload :Index, "bundler/plugin/index"
10
- autoload :Installer, "bundler/plugin/installer"
11
- autoload :SourceList, "bundler/plugin/source_list"
7
+ autoload :DSL, File.expand_path("plugin/dsl", __dir__)
8
+ autoload :Events, File.expand_path("plugin/events", __dir__)
9
+ autoload :Index, File.expand_path("plugin/index", __dir__)
10
+ autoload :Installer, File.expand_path("plugin/installer", __dir__)
11
+ autoload :SourceList, File.expand_path("plugin/source_list", __dir__)
12
12
 
13
13
  class MalformattedPlugin < PluginError; end
14
14
  class UndefinedCommandError < PluginError; end
15
15
  class UnknownSourceError < PluginError; end
16
+ class PluginInstallError < PluginError; end
16
17
 
17
18
  PLUGIN_FILE_NAME = "plugins.rb".freeze
18
19
 
19
- module_function
20
+ module_function
20
21
 
21
22
  def reset!
22
23
  instance_variables.each {|i| remove_instance_variable(i) }
@@ -38,13 +39,57 @@ module Bundler
38
39
  specs = Installer.new.install(names, options)
39
40
 
40
41
  save_plugins names, specs
41
- rescue PluginError => e
42
- if specs
43
- specs_to_delete = Hash[specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }]
44
- specs_to_delete.values.each {|spec| Bundler.rm_rf(spec.full_gem_path) }
42
+ rescue PluginError
43
+ specs_to_delete = specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }
44
+ specs_to_delete.each_value {|spec| Bundler.rm_rf(spec.full_gem_path) }
45
+
46
+ raise
47
+ end
48
+
49
+ # Uninstalls plugins by the given names
50
+ #
51
+ # @param [Array<String>] names the names of plugins to be uninstalled
52
+ def uninstall(names, options)
53
+ if names.empty? && !options[:all]
54
+ Bundler.ui.error "No plugins to uninstall. Specify at least 1 plugin to uninstall.\n"\
55
+ "Use --all option to uninstall all the installed plugins."
56
+ return
45
57
  end
46
58
 
47
- Bundler.ui.error "Failed to install plugin #{name}: #{e.message}\n #{e.backtrace.join("\n ")}"
59
+ names = index.installed_plugins if options[:all]
60
+ if names.any?
61
+ names.each do |name|
62
+ if index.installed?(name)
63
+ Bundler.rm_rf(index.plugin_path(name))
64
+ index.unregister_plugin(name)
65
+ Bundler.ui.info "Uninstalled plugin #{name}"
66
+ else
67
+ Bundler.ui.error "Plugin #{name} is not installed \n"
68
+ end
69
+ end
70
+ else
71
+ Bundler.ui.info "No plugins installed"
72
+ end
73
+ end
74
+
75
+ # List installed plugins and commands
76
+ #
77
+ def list
78
+ installed_plugins = index.installed_plugins
79
+ if installed_plugins.any?
80
+ output = String.new
81
+ installed_plugins.each do |plugin|
82
+ output << "#{plugin}\n"
83
+ output << "-----\n"
84
+ index.plugin_commands(plugin).each do |command|
85
+ output << " #{command}\n"
86
+ end
87
+ output << "\n"
88
+ end
89
+ else
90
+ output = "No plugins installed"
91
+ end
92
+ Bundler.ui.info output
48
93
  end
49
94
 
50
95
  # Evaluates the Gemfile with a limited DSL and installs the plugins
@@ -53,20 +98,23 @@ module Bundler
53
98
  # @param [Pathname] gemfile path
54
99
  # @param [Proc] block that can be evaluated for (inline) Gemfile
55
100
  def gemfile_install(gemfile = nil, &inline)
56
- builder = DSL.new
57
- if block_given?
58
- builder.instance_eval(&inline)
59
- else
60
- builder.eval_gemfile(gemfile)
101
+ Bundler.settings.temporary(:frozen => false, :deployment => false) do
102
+ builder = DSL.new
103
+ if block_given?
104
+ builder.instance_eval(&inline)
105
+ else
106
+ builder.eval_gemfile(gemfile)
107
+ end
108
+ builder.check_primary_source_safety
109
+ definition = builder.to_definition(nil, true)
110
+
111
+ return if definition.dependencies.empty?
112
+
113
+ plugins = definition.dependencies.map(&:name).reject {|p| index.installed? p }
114
+ installed_specs = Installer.new.install_definition(definition)
115
+
116
+ save_plugins plugins, installed_specs, builder.inferred_plugins
61
117
  end
62
- definition = builder.to_definition(nil, true)
63
-
64
- return if definition.dependencies.empty?
65
-
66
- plugins = definition.dependencies.map(&:name).reject {|p| index.installed? p }
67
- installed_specs = Installer.new.install_definition(definition)
68
-
69
- save_plugins plugins, installed_specs, builder.inferred_plugins
70
118
  rescue RuntimeError => e
71
119
  unless e.is_a?(GemfileError)
72
120
  Bundler.ui.error "Failed to install plugin: #{e.message}\n #{e.backtrace[0]}"
@@ -116,7 +164,7 @@ module Bundler
116
164
  end
117
165
 
118
166
  # To be called from Cli class to pass the command and argument to
119
- # approriate plugin class
167
+ # appropriate plugin class
120
168
  def exec_command(command, args)
121
169
  raise UndefinedCommandError, "Command `#{command}` not found" unless command? command
122
170
 
@@ -135,7 +183,7 @@ module Bundler
135
183
  !index.source_plugin(name.to_s).nil?
136
184
  end
137
185
 
138
- # @return [Class] that handles the source. The calss includes API::Source
186
+ # @return [Class] that handles the source. The class includes API::Source
139
187
  def source(name)
140
188
  raise UnknownSourceError, "Source #{name} not found" unless source? name
141
189
 
@@ -197,10 +245,11 @@ module Bundler
197
245
  # @param [Array<String>] names of inferred source plugins that can be ignored
198
246
  def save_plugins(plugins, specs, optional_plugins = [])
199
247
  plugins.each do |name|
248
+ next if index.installed?(name)
249
+
200
250
  spec = specs[name]
201
- validate_plugin! Pathname.new(spec.full_gem_path)
202
- installed = register_plugin(name, spec, optional_plugins.include?(name))
203
- Bundler.ui.info "Installed plugin #{name}" if installed
251
+
252
+ save_plugin(name, spec, optional_plugins.include?(name))
204
253
  end
205
254
  end
206
255
 
@@ -215,6 +264,22 @@ module Bundler
215
264
  raise MalformattedPlugin, "#{PLUGIN_FILE_NAME} was not found in the plugin." unless plugin_file.file?
216
265
  end
217
266
 
267
+ # Validates and registers a plugin.
268
+ #
269
+ # @param [String] name the name of the plugin
270
+ # @param [Specification] spec of installed plugin
271
+ # @param [Boolean] optional_plugin, removed if there is conflict with any
272
+ # other plugin (used for default source plugins)
273
+ #
274
+ # @raise [PluginInstallError] if validation or registration raises any error
275
+ def save_plugin(name, spec, optional_plugin = false)
276
+ validate_plugin! Pathname.new(spec.full_gem_path)
277
+ installed = register_plugin(name, spec, optional_plugin)
278
+ Bundler.ui.info "Installed plugin #{name}" if installed
279
+ rescue PluginError => e
280
+ raise PluginInstallError, "Failed to install plugin `#{spec.name}`, due to #{e.class} (#{e.message})"
281
+ end
282
+
218
283
  # Runs the plugins.rb file in an isolated namespace, records the plugin
219
284
  # actions it registers for and then passes the data to index to be stored.
220
285
  #
@@ -234,7 +299,7 @@ module Bundler
234
299
  @hooks_by_event = Hash.new {|h, k| h[k] = [] }
235
300
 
236
301
  load_paths = spec.load_paths
237
- add_to_load_path(load_paths)
302
+ Bundler.rubygems.add_to_load_path(load_paths)
238
303
  path = Pathname.new spec.full_gem_path
239
304
 
240
305
  begin
@@ -261,12 +326,14 @@ module Bundler
261
326
  #
262
327
  # @param [String] name of the plugin
263
328
  def load_plugin(name)
329
+ return unless name && !name.empty?
330
+
264
331
  # Need to ensure before this that plugin root where the rest of gems
265
332
  # are installed to be on load path to support plugin deps. Currently not
266
333
  # done to avoid conflicts
267
334
  path = index.plugin_path(name)
268
335
 
269
- add_to_load_path(index.load_paths(name))
336
+ Bundler.rubygems.add_to_load_path(index.load_paths(name))
270
337
 
271
338
  load path.join(PLUGIN_FILE_NAME)
272
339
 
@@ -276,17 +343,8 @@ module Bundler
276
343
  raise
277
344
  end
278
345
 
279
- def add_to_load_path(load_paths)
280
- if insert_index = Bundler.rubygems.load_path_insert_index
281
- $LOAD_PATH.insert(insert_index, *load_paths)
282
- else
283
- $LOAD_PATH.unshift(*load_paths)
284
- end
285
- end
286
-
287
346
  class << self
288
- private :load_plugin, :register_plugin, :save_plugins, :validate_plugin!,
289
- :add_to_load_path
347
+ private :load_plugin, :register_plugin, :save_plugins, :validate_plugin!
290
348
  end
291
349
  end
292
350
  end
@@ -1,11 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Psych could be a gem, so try to ask for it
4
- begin
5
- gem "psych"
6
- rescue LoadError
7
- end if defined?(gem)
8
-
9
3
  # Psych could be in the stdlib
10
4
  # but it's too late if Syck is already loaded
11
5
  begin
@@ -26,12 +20,3 @@ module Bundler
26
20
  YamlLibrarySyntaxError = ::ArgumentError
27
21
  end
28
22
  end
29
-
30
- require "bundler/deprecate"
31
- begin
32
- Bundler::Deprecate.skip_during do
33
- require "rubygems/safe_yaml"
34
- end
35
- rescue LoadError
36
- # it's OK if the file isn't there
37
- end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "uri"
4
-
5
3
  module Bundler
6
4
  # Represents a lazily loaded gem specification, where the full specification
7
5
  # is on the source server in rubygems' "quick" index. The proxy object is to
@@ -52,6 +50,8 @@ module Bundler
52
50
  # once the remote gem is downloaded, the backend specification will
53
51
  # be swapped out.
54
52
  def __swap__(spec)
53
+ raise APIResponseInvalidDependenciesError unless spec.dependencies.all? {|d| d.is_a?(Gem::Dependency) }
54
+
55
55
  SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
56
56
  @_remote_specification = spec
57
57
  end
@@ -78,7 +78,8 @@ module Bundler
78
78
  deps = method_missing(:dependencies)
79
79
 
80
80
  # allow us to handle when the specs dependencies are an array of array of string
81
- # see https://github.com/bundler/bundler/issues/5797
81
+ # in order to delay the crash to `#__swap__` where it results in a friendlier error
82
+ # see https://github.com/rubygems/bundler/issues/5797
82
83
  deps = deps.map {|d| d.is_a?(Gem::Dependency) ? d : Gem::Dependency.new(*d) }
83
84
 
84
85
  deps
@@ -90,7 +91,7 @@ module Bundler
90
91
  " #{source.revision[0..6]}"
91
92
  end
92
93
 
93
- private
94
+ private
94
95
 
95
96
  def to_ary
96
97
  nil
@@ -3,101 +3,105 @@
3
3
  module Bundler
4
4
  class Resolver
5
5
  class SpecGroup
6
- include GemHelpers
7
-
8
6
  attr_accessor :name, :version, :source
9
- attr_accessor :ignores_bundler_dependencies
7
+ attr_accessor :activated_platforms
8
+
9
+ def self.create_for(specs, all_platforms, specific_platform)
10
+ specific_platform_specs = specs[specific_platform]
11
+ return unless specific_platform_specs.any?
12
+
13
+ platforms = all_platforms.select {|p| specs[p].any? }
14
+
15
+ new(specific_platform_specs.first, specs, platforms)
16
+ end
10
17
 
11
- def initialize(all_specs)
12
- raise ArgumentError, "cannot initialize with an empty value" unless exemplary_spec = all_specs.first
18
+ def initialize(exemplary_spec, specs, relevant_platforms)
19
+ @exemplary_spec = exemplary_spec
13
20
  @name = exemplary_spec.name
14
21
  @version = exemplary_spec.version
15
22
  @source = exemplary_spec.source
16
23
 
17
- @activated_platforms = []
18
- @dependencies = nil
19
- @specs = Hash.new do |specs, platform|
20
- specs[platform] = select_best_platform_match(all_specs, platform)
24
+ @activated_platforms = relevant_platforms
25
+ @dependencies = Hash.new do |dependencies, platforms|
26
+ dependencies[platforms] = dependencies_for(platforms)
21
27
  end
22
- @ignores_bundler_dependencies = true
28
+ @specs = specs
23
29
  end
24
30
 
25
31
  def to_specs
26
- @activated_platforms.map do |p|
27
- next unless s = @specs[p]
28
- lazy_spec = LazySpecification.new(name, version, s.platform, source)
29
- lazy_spec.dependencies.replace s.dependencies
30
- lazy_spec
31
- end.compact
32
- end
33
-
34
- def activate_platform!(platform)
35
- return unless for?(platform)
36
- return if @activated_platforms.include?(platform)
37
- @activated_platforms << platform
38
- end
32
+ activated_platforms.map do |p|
33
+ specs = @specs[p]
34
+ next unless specs.any?
39
35
 
40
- def for?(platform)
41
- spec = @specs[platform]
42
- !spec.nil?
36
+ specs.map do |s|
37
+ lazy_spec = LazySpecification.new(name, version, s.platform, source)
38
+ lazy_spec.dependencies.replace s.dependencies
39
+ lazy_spec
40
+ end
41
+ end.flatten.compact.uniq
43
42
  end
44
43
 
45
44
  def to_s
46
- @to_s ||= "#{name} (#{version})"
45
+ activated_platforms_string = sorted_activated_platforms.join(", ")
46
+ "#{name} (#{version}) (#{activated_platforms_string})"
47
47
  end
48
48
 
49
49
  def dependencies_for_activated_platforms
50
- dependencies = @activated_platforms.map {|p| __dependencies[p] }
51
- metadata_dependencies = @activated_platforms.map do |platform|
52
- metadata_dependencies(@specs[platform], platform)
53
- end
54
- dependencies.concat(metadata_dependencies).flatten
50
+ @dependencies[activated_platforms]
55
51
  end
56
52
 
57
53
  def ==(other)
58
54
  return unless other.is_a?(SpecGroup)
59
55
  name == other.name &&
60
56
  version == other.version &&
57
+ sorted_activated_platforms == other.sorted_activated_platforms &&
61
58
  source == other.source
62
59
  end
63
60
 
64
61
  def eql?(other)
62
+ return unless other.is_a?(SpecGroup)
65
63
  name.eql?(other.name) &&
66
64
  version.eql?(other.version) &&
65
+ sorted_activated_platforms.eql?(other.sorted_activated_platforms) &&
67
66
  source.eql?(other.source)
68
67
  end
69
68
 
70
69
  def hash
71
- to_s.hash ^ source.hash
70
+ name.hash ^ version.hash ^ sorted_activated_platforms.hash ^ source.hash
72
71
  end
73
72
 
74
- private
75
-
76
- def __dependencies
77
- @dependencies = Hash.new do |dependencies, platform|
78
- dependencies[platform] = []
79
- if spec = @specs[platform]
80
- spec.dependencies.each do |dep|
81
- next if dep.type == :development
82
- next if @ignores_bundler_dependencies && dep.name == "bundler".freeze
83
- dependencies[platform] << DepProxy.new(dep, platform)
84
- end
85
- end
86
- dependencies[platform]
73
+ protected
74
+
75
+ def sorted_activated_platforms
76
+ activated_platforms.sort_by(&:to_s)
77
+ end
78
+
79
+ private
80
+
81
+ def dependencies_for(platforms)
82
+ platforms.map do |platform|
83
+ __dependencies(platform) + metadata_dependencies(platform)
84
+ end.flatten
85
+ end
86
+
87
+ def __dependencies(platform)
88
+ dependencies = []
89
+ @specs[platform].first.dependencies.each do |dep|
90
+ next if dep.type == :development
91
+ dependencies << DepProxy.get_proxy(dep, platform)
87
92
  end
93
+ dependencies
88
94
  end
89
95
 
90
- def metadata_dependencies(spec, platform)
91
- return [] unless spec
92
- # Only allow endpoint specifications since they won't hit the network to
93
- # fetch the full gemspec when calling required_ruby_version
94
- return [] if !spec.is_a?(EndpointSpecification) && !spec.is_a?(Gem::Specification)
96
+ def metadata_dependencies(platform)
97
+ spec = @specs[platform].first
98
+ return [] unless spec.is_a?(Gem::Specification)
95
99
  dependencies = []
96
100
  if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none?
97
- dependencies << DepProxy.new(Gem::Dependency.new("ruby\0", spec.required_ruby_version), platform)
101
+ dependencies << DepProxy.get_proxy(Gem::Dependency.new("Ruby\0", spec.required_ruby_version), platform)
98
102
  end
99
103
  if !spec.required_rubygems_version.nil? && !spec.required_rubygems_version.none?
100
- dependencies << DepProxy.new(Gem::Dependency.new("rubygems\0", spec.required_rubygems_version), platform)
104
+ dependencies << DepProxy.get_proxy(Gem::Dependency.new("RubyGems\0", spec.required_rubygems_version), platform)
101
105
  end
102
106
  dependencies
103
107
  end