bundler 2.2.29 → 2.5.16

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -20,10 +20,6 @@ module Bundler
20
20
  end
21
21
  end
22
22
 
23
- def version_message(spec)
24
- "#{spec.name} #{spec.version}"
25
- end
26
-
27
23
  def root
28
24
  Plugin.root
29
25
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module Plugin
5
+ class Installer
6
+ class Path < Bundler::Source::Path
7
+ def root
8
+ SharedHelpers.in_bundle? ? Bundler.root : Plugin.root
9
+ end
10
+
11
+ def generate_bin(spec, disable_extensions = false)
12
+ # Need to find a way without code duplication
13
+ # For now, we can ignore this
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -4,16 +4,8 @@ module Bundler
4
4
  module Plugin
5
5
  class Installer
6
6
  class Rubygems < Bundler::Source::Rubygems
7
- def version_message(spec)
8
- "#{spec.name} #{spec.version}"
9
- end
10
-
11
7
  private
12
8
 
13
- def requires_sudo?
14
- false # Will change on implementation of project level plugins
15
- end
16
-
17
9
  def rubygems_dir
18
10
  Plugin.root
19
11
  end
@@ -10,6 +10,7 @@ module Bundler
10
10
  class Installer
11
11
  autoload :Rubygems, File.expand_path("installer/rubygems", __dir__)
12
12
  autoload :Git, File.expand_path("installer/git", __dir__)
13
+ autoload :Path, File.expand_path("installer/path", __dir__)
13
14
 
14
15
  def install(names, options)
15
16
  check_sources_consistency!(options)
@@ -18,10 +19,10 @@ module Bundler
18
19
 
19
20
  if options[:git]
20
21
  install_git(names, version, options)
21
- elsif options[:local_git]
22
- install_local_git(names, version, options)
22
+ elsif options[:path]
23
+ install_path(names, version, options[:path])
23
24
  else
24
- sources = options[:source] || Bundler.rubygems.sources
25
+ sources = options[:source] || Gem.sources
25
26
  install_rubygems(names, version, sources)
26
27
  end
27
28
  end
@@ -45,20 +46,40 @@ module Bundler
45
46
  if options.key?(:git) && options.key?(:local_git)
46
47
  raise InvalidOption, "Remote and local plugin git sources can't be both specified"
47
48
  end
49
+
50
+ # back-compat; local_git is an alias for git
51
+ if options.key?(:local_git)
52
+ Bundler::SharedHelpers.major_deprecation(2, "--local_git is deprecated, use --git")
53
+ options[:git] = options.delete(:local_git)
54
+ end
55
+
56
+ if (options.keys & [:source, :git, :path]).length > 1
57
+ raise InvalidOption, "Only one of --source, --git, or --path may be specified"
58
+ end
59
+
60
+ if (options.key?(:branch) || options.key?(:ref)) && !options.key?(:git)
61
+ raise InvalidOption, "--#{options.key?(:branch) ? "branch" : "ref"} can only be used with git sources"
62
+ end
63
+
64
+ if options.key?(:branch) && options.key?(:ref)
65
+ raise InvalidOption, "--branch and --ref can't be both specified"
66
+ end
48
67
  end
49
68
 
50
69
  def install_git(names, version, options)
51
- uri = options.delete(:git)
52
- options["uri"] = uri
70
+ source_list = SourceList.new
71
+ source = source_list.add_git_source({ "uri" => options[:git],
72
+ "branch" => options[:branch],
73
+ "ref" => options[:ref] })
53
74
 
54
- install_all_sources(names, version, options, options[:source])
75
+ install_all_sources(names, version, source_list, source)
55
76
  end
56
77
 
57
- def install_local_git(names, version, options)
58
- uri = options.delete(:local_git)
59
- options["uri"] = uri
78
+ def install_path(names, version, path)
79
+ source_list = SourceList.new
80
+ source = source_list.add_path_source({ "path" => path, "root_path" => SharedHelpers.pwd })
60
81
 
61
- install_all_sources(names, version, options, options[:source])
82
+ install_all_sources(names, version, source_list, source)
62
83
  end
63
84
 
64
85
  # Installs the plugin from rubygems source and returns the path where the
@@ -70,21 +91,23 @@ module Bundler
70
91
  #
71
92
  # @return [Hash] map of names to the specs of plugins installed
72
93
  def install_rubygems(names, version, sources)
73
- install_all_sources(names, version, nil, sources)
74
- end
75
-
76
- def install_all_sources(names, version, git_source_options, rubygems_source)
77
94
  source_list = SourceList.new
78
95
 
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
96
+ Array(sources).each {|remote| source_list.add_global_rubygems_remote(remote) }
81
97
 
82
- deps = names.map {|name| Dependency.new name, version }
98
+ install_all_sources(names, version, source_list)
99
+ end
100
+
101
+ def install_all_sources(names, version, source_list, source = nil)
102
+ deps = names.map {|name| Dependency.new(name, version, { "source" => source }) }
83
103
 
84
104
  Bundler.configure_gem_home_and_path(Plugin.root)
85
105
 
86
- definition = Definition.new(nil, deps, source_list, true)
87
- install_definition(definition)
106
+ Bundler.settings.temporary(deployment: false, frozen: false) do
107
+ definition = Definition.new(nil, deps, source_list, true)
108
+
109
+ install_definition(definition)
110
+ end
88
111
  end
89
112
 
90
113
  # Installs the plugins and deps from the provided specs and returns map of
@@ -9,6 +9,10 @@ module Bundler
9
9
  add_source_to_list Plugin::Installer::Git.new(options), git_sources
10
10
  end
11
11
 
12
+ def add_path_source(options = {})
13
+ add_source_to_list Plugin::Installer::Path.new(options), path_sources
14
+ end
15
+
12
16
  def add_rubygems_source(options = {})
13
17
  add_source_to_list Plugin::Installer::Rubygems.new(options), @rubygems_sources
14
18
  end
@@ -17,10 +21,6 @@ module Bundler
17
21
  path_sources + git_sources + rubygems_sources + [metadata_source]
18
22
  end
19
23
 
20
- def default_source
21
- git_sources.first || global_rubygems_source
22
- end
23
-
24
24
  private
25
25
 
26
26
  def rubygems_aggregate_class
@@ -15,7 +15,7 @@ module Bundler
15
15
  class UnknownSourceError < PluginError; end
16
16
  class PluginInstallError < PluginError; end
17
17
 
18
- PLUGIN_FILE_NAME = "plugins.rb".freeze
18
+ PLUGIN_FILE_NAME = "plugins.rb"
19
19
 
20
20
  module_function
21
21
 
@@ -36,6 +36,8 @@ module Bundler
36
36
  # @param [Hash] options various parameters as described in description.
37
37
  # Refer to cli/plugin for available options
38
38
  def install(names, options)
39
+ raise InvalidOption, "You cannot specify `--branch` and `--ref` at the same time." if options["branch"] && options["ref"]
40
+
39
41
  specs = Installer.new.install(names, options)
40
42
 
41
43
  save_plugins names, specs
@@ -60,7 +62,8 @@ module Bundler
60
62
  if names.any?
61
63
  names.each do |name|
62
64
  if index.installed?(name)
63
- Bundler.rm_rf(index.plugin_path(name))
65
+ path = index.plugin_path(name).to_s
66
+ Bundler.rm_rf(path) if index.installed_in_plugin_root?(name)
64
67
  index.unregister_plugin(name)
65
68
  Bundler.ui.info "Uninstalled plugin #{name}"
66
69
  else
@@ -98,7 +101,7 @@ module Bundler
98
101
  # @param [Pathname] gemfile path
99
102
  # @param [Proc] block that can be evaluated for (inline) Gemfile
100
103
  def gemfile_install(gemfile = nil, &inline)
101
- Bundler.settings.temporary(:frozen => false, :deployment => false) do
104
+ Bundler.settings.temporary(frozen: false, deployment: false) do
102
105
  builder = DSL.new
103
106
  if block_given?
104
107
  builder.instance_eval(&inline)
@@ -195,7 +198,7 @@ module Bundler
195
198
  # @param [Hash] The options that are present in the lock file
196
199
  # @return [API::Source] the instance of the class that handles the source
197
200
  # type passed in locked_opts
198
- def source_from_lock(locked_opts)
201
+ def from_lock(locked_opts)
199
202
  src = source(locked_opts["type"])
200
203
 
201
204
  src.new(locked_opts.merge("uri" => locked_opts["remote"]))
@@ -225,7 +228,7 @@ module Bundler
225
228
  plugins = index.hook_plugins(event)
226
229
  return unless plugins.any?
227
230
 
228
- (plugins - @loaded_plugin_names).each {|name| load_plugin(name) }
231
+ plugins.each {|name| load_plugin(name) }
229
232
 
230
233
  @hooks_by_event[event].each {|blk| blk.call(*args, &arg_blk) }
231
234
  end
@@ -237,6 +240,11 @@ module Bundler
237
240
  Index.new.installed?(plugin)
238
241
  end
239
242
 
243
+ # @return [true, false] whether the plugin is loaded
244
+ def loaded?(plugin)
245
+ @loaded_plugin_names.include?(plugin)
246
+ end
247
+
240
248
  # Post installation processing and registering with index
241
249
  #
242
250
  # @param [Array<String>] plugins list to be installed
@@ -299,7 +307,7 @@ module Bundler
299
307
  @hooks_by_event = Hash.new {|h, k| h[k] = [] }
300
308
 
301
309
  load_paths = spec.load_paths
302
- Bundler.rubygems.add_to_load_path(load_paths)
310
+ Gem.add_to_load_path(*load_paths)
303
311
  path = Pathname.new spec.full_gem_path
304
312
 
305
313
  begin
@@ -327,13 +335,14 @@ module Bundler
327
335
  # @param [String] name of the plugin
328
336
  def load_plugin(name)
329
337
  return unless name && !name.empty?
338
+ return if loaded?(name)
330
339
 
331
340
  # Need to ensure before this that plugin root where the rest of gems
332
341
  # are installed to be on load path to support plugin deps. Currently not
333
342
  # done to avoid conflicts
334
343
  path = index.plugin_path(name)
335
344
 
336
- Bundler.rubygems.add_to_load_path(index.load_paths(name))
345
+ Gem.add_to_load_path(*index.load_paths(name))
337
346
 
338
347
  load path.join(PLUGIN_FILE_NAME)
339
348
 
@@ -12,7 +12,7 @@ module Bundler
12
12
  yield
13
13
  f.flock(File::LOCK_UN)
14
14
  end
15
- rescue Errno::EACCES, Errno::ENOLCK, *[SharedHelpers.const_get_safely(:ENOTSUP, Errno)].compact
15
+ rescue Errno::EACCES, Errno::ENOLCK, Errno::ENOTSUP, Errno::EPERM, Errno::EROFS
16
16
  # In the case the user does not have access to
17
17
  # create the lock file or is using NFS where
18
18
  # locks are not available we skip locking.
@@ -6,6 +6,7 @@ module Bundler
6
6
  # be seeded with what we're given from the source's abbreviated index - the
7
7
  # full specification will only be fetched when necessary.
8
8
  class RemoteSpecification
9
+ include MatchRemoteMetadata
9
10
  include MatchPlatform
10
11
  include Comparable
11
12
 
@@ -16,7 +17,8 @@ module Bundler
16
17
  def initialize(name, version, platform, spec_fetcher)
17
18
  @name = name
18
19
  @version = Gem::Version.create version
19
- @platform = platform
20
+ @original_platform = platform || Gem::Platform::RUBY
21
+ @platform = Gem::Platform.new(platform)
20
22
  @spec_fetcher = spec_fetcher
21
23
  @dependencies = nil
22
24
  end
@@ -28,10 +30,10 @@ module Bundler
28
30
  end
29
31
 
30
32
  def full_name
31
- if platform == Gem::Platform::RUBY || platform.nil?
33
+ @full_name ||= if @platform == Gem::Platform::RUBY
32
34
  "#{@name}-#{@version}"
33
35
  else
34
- "#{@name}-#{@version}-#{platform}"
36
+ "#{@name}-#{@version}-#{@platform}"
35
37
  end
36
38
  end
37
39
 
@@ -86,6 +88,10 @@ module Bundler
86
88
  end
87
89
  end
88
90
 
91
+ def runtime_dependencies
92
+ dependencies.select(&:runtime?)
93
+ end
94
+
89
95
  def git_version
90
96
  return unless loaded_from && source.is_a?(Bundler::Source::Git)
91
97
  " #{source.revision[0..6]}"
@@ -98,9 +104,9 @@ module Bundler
98
104
  end
99
105
 
100
106
  def _remote_specification
101
- @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
107
+ @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @original_platform])
102
108
  @_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \
103
- " missing from the server! Try installing with `--full-index` as a workaround.")
109
+ " missing from the server!")
104
110
  end
105
111
 
106
112
  def method_missing(method, *args, &blk)
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "package"
4
+
5
+ module Bundler
6
+ class Resolver
7
+ class Base
8
+ attr_reader :packages, :requirements, :source_requirements
9
+
10
+ def initialize(source_requirements, dependencies, base, platforms, options)
11
+ @source_requirements = source_requirements
12
+
13
+ @base = base
14
+
15
+ @packages = Hash.new do |hash, name|
16
+ hash[name] = Package.new(name, platforms, **options)
17
+ end
18
+
19
+ @requirements = dependencies.map do |dep|
20
+ dep_platforms = dep.gem_platforms(platforms)
21
+
22
+ # Dependencies scoped to external platforms are ignored
23
+ next if dep_platforms.empty?
24
+
25
+ name = dep.name
26
+
27
+ @packages[name] = Package.new(name, dep_platforms, **options.merge(dependency: dep))
28
+
29
+ dep
30
+ end.compact
31
+ end
32
+
33
+ def specs_compatible_with(result)
34
+ @base.specs_compatible_with(result)
35
+ end
36
+
37
+ def [](name)
38
+ @base[name]
39
+ end
40
+
41
+ def delete(specs)
42
+ @base.delete(specs)
43
+ end
44
+
45
+ def get_package(name)
46
+ @packages[name]
47
+ end
48
+
49
+ def base_requirements
50
+ @base_requirements ||= build_base_requirements
51
+ end
52
+
53
+ def unlock_names(names)
54
+ indirect_pins = indirect_pins(names)
55
+
56
+ if indirect_pins.any?
57
+ loosen_names(indirect_pins)
58
+ else
59
+ pins = pins(names)
60
+
61
+ if pins.any?
62
+ loosen_names(pins)
63
+ else
64
+ unrestrict_names(names)
65
+ end
66
+ end
67
+ end
68
+
69
+ def include_prereleases(names)
70
+ names.each do |name|
71
+ get_package(name).consider_prereleases!
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ def indirect_pins(names)
78
+ names.select {|name| @base_requirements[name].exact? && @requirements.none? {|dep| dep.name == name } }
79
+ end
80
+
81
+ def pins(names)
82
+ names.select {|name| @base_requirements[name].exact? }
83
+ end
84
+
85
+ def loosen_names(names)
86
+ names.each do |name|
87
+ version = @base_requirements[name].requirements.first[1]
88
+
89
+ @base_requirements[name] = Gem::Requirement.new(">= #{version}")
90
+
91
+ @base.delete_by_name(name)
92
+ end
93
+ end
94
+
95
+ def unrestrict_names(names)
96
+ names.each do |name|
97
+ @base_requirements.delete(name)
98
+ end
99
+ end
100
+
101
+ def build_base_requirements
102
+ base_requirements = {}
103
+ @base.each do |ls|
104
+ req = Gem::Requirement.new(ls.version)
105
+ base_requirements[ls.name] = req
106
+ end
107
+ base_requirements
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "spec_group"
4
+
5
+ module Bundler
6
+ class Resolver
7
+ #
8
+ # This class is a PubGrub compatible "Version" class that takes Bundler
9
+ # resolution complexities into account.
10
+ #
11
+ # Each Resolver::Candidate has a underlying `Gem::Version` plus a set of
12
+ # platforms. For example, 1.1.0-x86_64-linux is a different resolution candidate
13
+ # from 1.1.0 (generic). This is because different platform variants of the
14
+ # same gem version can bring different dependencies, so they need to be
15
+ # considered separately.
16
+ #
17
+ # Some candidates may also keep some information explicitly about the
18
+ # package they refer to. These candidates are referred to as "canonical" and
19
+ # are used when materializing resolution results back into RubyGems
20
+ # specifications that can be installed, written to lock files, and so on.
21
+ #
22
+ class Candidate
23
+ include Comparable
24
+
25
+ attr_reader :version
26
+
27
+ def initialize(version, group: nil, priority: -1)
28
+ @spec_group = group || SpecGroup.new([])
29
+ @version = Gem::Version.new(version)
30
+ @priority = priority
31
+ end
32
+
33
+ def dependencies
34
+ @spec_group.dependencies
35
+ end
36
+
37
+ def to_specs(package)
38
+ return [] if package.meta?
39
+
40
+ @spec_group.to_specs(package.force_ruby_platform?)
41
+ end
42
+
43
+ def prerelease?
44
+ @version.prerelease?
45
+ end
46
+
47
+ def segments
48
+ @version.segments
49
+ end
50
+
51
+ def sort_obj
52
+ [@version, @priority]
53
+ end
54
+
55
+ def <=>(other)
56
+ return unless other.is_a?(self.class)
57
+
58
+ sort_obj <=> other.sort_obj
59
+ end
60
+
61
+ def ==(other)
62
+ return unless other.is_a?(self.class)
63
+
64
+ sort_obj == other.sort_obj
65
+ end
66
+
67
+ def eql?(other)
68
+ return unless other.is_a?(self.class)
69
+
70
+ sort_obj.eql?(other.sort_obj)
71
+ end
72
+
73
+ def hash
74
+ sort_obj.hash
75
+ end
76
+
77
+ def to_s
78
+ @version.to_s
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class Resolver
5
+ class Incompatibility < PubGrub::Incompatibility
6
+ attr_reader :extended_explanation
7
+
8
+ def initialize(terms, cause:, custom_explanation: nil, extended_explanation: nil)
9
+ @extended_explanation = extended_explanation
10
+
11
+ super(terms, cause: cause, custom_explanation: custom_explanation)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class Resolver
5
+ #
6
+ # Represents a gem being resolved, in a format PubGrub likes.
7
+ #
8
+ # The class holds the following information:
9
+ #
10
+ # * Platforms this gem will be resolved on.
11
+ # * The locked version of this gem resolution should favor (if any).
12
+ # * Whether the gem should be unlocked to its latest version.
13
+ # * The dependency explicit set in the Gemfile for this gem (if any).
14
+ #
15
+ class Package
16
+ attr_reader :name, :platforms, :dependency, :locked_version
17
+
18
+ def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, dependency: nil)
19
+ @name = name
20
+ @platforms = platforms
21
+ @locked_version = locked_specs[name].first&.version
22
+ @unlock = unlock
23
+ @dependency = dependency || Dependency.new(name, @locked_version)
24
+ @top_level = !dependency.nil?
25
+ @prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore
26
+ end
27
+
28
+ def platform_specs(specs)
29
+ platforms.map {|platform| GemHelpers.select_best_platform_match(specs, platform, prefer_locked: !unlock?) }
30
+ end
31
+
32
+ def to_s
33
+ @name.delete("\0")
34
+ end
35
+
36
+ def root?
37
+ false
38
+ end
39
+
40
+ def top_level?
41
+ @top_level
42
+ end
43
+
44
+ def meta?
45
+ @name.end_with?("\0")
46
+ end
47
+
48
+ def ==(other)
49
+ self.class == other.class && @name == other.name
50
+ end
51
+
52
+ def hash
53
+ @name.hash
54
+ end
55
+
56
+ def unlock?
57
+ @unlock.empty? || @unlock.include?(name)
58
+ end
59
+
60
+ def ignores_prereleases?
61
+ @prerelease == :ignore
62
+ end
63
+
64
+ def prerelease_specified?
65
+ @prerelease == :consider_first
66
+ end
67
+
68
+ def consider_prereleases!
69
+ @prerelease = :consider_last
70
+ end
71
+
72
+ def force_ruby_platform?
73
+ @dependency.force_ruby_platform
74
+ end
75
+
76
+ def current_platform?
77
+ @dependency.current_platform?
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "package"
4
+
5
+ module Bundler
6
+ class Resolver
7
+ #
8
+ # Represents the Gemfile from the resolver's perspective. It's the root
9
+ # package and Gemfile entries depend on it.
10
+ #
11
+ class Root < Package
12
+ def initialize(name)
13
+ @name = name
14
+ end
15
+
16
+ def meta?
17
+ true
18
+ end
19
+
20
+ def root?
21
+ true
22
+ end
23
+ end
24
+ end
25
+ end