bundler 2.2.27 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (353) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1328 -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 +7 -5
  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 +4 -4
  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 +2 -5
  19. data/lib/bundler/cli/doctor.rb +16 -9
  20. data/lib/bundler/cli/exec.rb +2 -1
  21. data/lib/bundler/cli/fund.rb +1 -1
  22. data/lib/bundler/cli/gem.rb +153 -40
  23. data/lib/bundler/cli/info.rb +27 -17
  24. data/lib/bundler/cli/init.rb +6 -2
  25. data/lib/bundler/cli/inject.rb +1 -1
  26. data/lib/bundler/cli/install.rb +34 -42
  27. data/lib/bundler/cli/issue.rb +5 -4
  28. data/lib/bundler/cli/lock.rb +54 -28
  29. data/lib/bundler/cli/open.rb +9 -9
  30. data/lib/bundler/cli/outdated.rb +34 -29
  31. data/lib/bundler/cli/platform.rb +8 -6
  32. data/lib/bundler/cli/plugin.rb +9 -15
  33. data/lib/bundler/cli/pristine.rb +38 -30
  34. data/lib/bundler/cli/remove.rb +1 -2
  35. data/lib/bundler/cli/show.rb +5 -5
  36. data/lib/bundler/cli/update.rb +12 -7
  37. data/lib/bundler/cli/viz.rb +1 -1
  38. data/lib/bundler/cli.rb +265 -313
  39. data/lib/bundler/compact_index_client/cache.rb +53 -67
  40. data/lib/bundler/compact_index_client/cache_file.rb +148 -0
  41. data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  42. data/lib/bundler/compact_index_client/parser.rb +84 -0
  43. data/lib/bundler/compact_index_client/updater.rb +73 -77
  44. data/lib/bundler/compact_index_client.rb +59 -87
  45. data/lib/bundler/constants.rb +9 -2
  46. data/lib/bundler/current_ruby.rb +12 -16
  47. data/lib/bundler/definition.rb +604 -347
  48. data/lib/bundler/dependency.rb +33 -71
  49. data/lib/bundler/digest.rb +71 -0
  50. data/lib/bundler/dsl.rb +136 -102
  51. data/lib/bundler/endpoint_specification.rb +42 -16
  52. data/lib/bundler/env.rb +5 -7
  53. data/lib/bundler/environment_preserver.rb +8 -22
  54. data/lib/bundler/errors.rb +113 -13
  55. data/lib/bundler/feature_flag.rb +1 -2
  56. data/lib/bundler/fetcher/base.rb +11 -11
  57. data/lib/bundler/fetcher/compact_index.rb +32 -52
  58. data/lib/bundler/fetcher/dependency.rb +3 -7
  59. data/lib/bundler/fetcher/downloader.rb +17 -16
  60. data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  61. data/lib/bundler/fetcher/index.rb +2 -29
  62. data/lib/bundler/fetcher.rb +98 -83
  63. data/lib/bundler/force_platform.rb +16 -0
  64. data/lib/bundler/friendly_errors.rb +29 -40
  65. data/lib/bundler/gem_helper.rb +12 -24
  66. data/lib/bundler/gem_helpers.rb +47 -7
  67. data/lib/bundler/gem_version_promoter.rb +68 -109
  68. data/lib/bundler/graph.rb +9 -9
  69. data/lib/bundler/index.rb +71 -79
  70. data/lib/bundler/injector.rb +25 -13
  71. data/lib/bundler/inline.rb +41 -28
  72. data/lib/bundler/installer/gem_installer.rb +22 -13
  73. data/lib/bundler/installer/parallel_installer.rb +19 -66
  74. data/lib/bundler/installer/standalone.rb +58 -17
  75. data/lib/bundler/installer.rb +31 -93
  76. data/lib/bundler/lazy_specification.rb +151 -72
  77. data/lib/bundler/lockfile_generator.rb +13 -4
  78. data/lib/bundler/lockfile_parser.rb +146 -71
  79. data/lib/bundler/man/bundle-add.1 +54 -44
  80. data/lib/bundler/man/bundle-add.1.ronn +62 -21
  81. data/lib/bundler/man/bundle-binstubs.1 +10 -19
  82. data/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  83. data/lib/bundler/man/bundle-cache.1 +38 -25
  84. data/lib/bundler/man/bundle-cache.1.ronn +40 -4
  85. data/lib/bundler/man/bundle-check.1 +7 -14
  86. data/lib/bundler/man/bundle-check.1.ronn +7 -2
  87. data/lib/bundler/man/bundle-clean.1 +4 -11
  88. data/lib/bundler/man/bundle-clean.1.ronn +1 -1
  89. data/lib/bundler/man/bundle-config.1 +48 -227
  90. data/lib/bundler/man/bundle-config.1.ronn +41 -34
  91. data/lib/bundler/man/bundle-console.1 +33 -0
  92. data/lib/bundler/man/bundle-console.1.ronn +39 -0
  93. data/lib/bundler/man/bundle-doctor.1 +5 -19
  94. data/lib/bundler/man/bundle-doctor.1.ronn +1 -1
  95. data/lib/bundler/man/bundle-env.1 +9 -0
  96. data/lib/bundler/man/bundle-env.1.ronn +10 -0
  97. data/lib/bundler/man/bundle-exec.1 +20 -78
  98. data/lib/bundler/man/bundle-exec.1.ronn +12 -10
  99. data/lib/bundler/man/bundle-fund.1 +22 -0
  100. data/lib/bundler/man/bundle-fund.1.ronn +25 -0
  101. data/lib/bundler/man/bundle-gem.1 +57 -72
  102. data/lib/bundler/man/bundle-gem.1.ronn +57 -9
  103. data/lib/bundler/man/bundle-help.1 +9 -0
  104. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  105. data/lib/bundler/man/bundle-info.1 +8 -11
  106. data/lib/bundler/man/bundle-info.1.ronn +9 -5
  107. data/lib/bundler/man/bundle-init.1 +7 -12
  108. data/lib/bundler/man/bundle-init.1.ronn +4 -1
  109. data/lib/bundler/man/bundle-inject.1 +17 -19
  110. data/lib/bundler/man/bundle-inject.1.ronn +12 -2
  111. data/lib/bundler/man/bundle-install.1 +43 -163
  112. data/lib/bundler/man/bundle-install.1.ronn +33 -51
  113. data/lib/bundler/man/bundle-issue.1 +45 -0
  114. data/lib/bundler/man/bundle-issue.1.ronn +37 -0
  115. data/lib/bundler/man/bundle-licenses.1 +9 -0
  116. data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  117. data/lib/bundler/man/bundle-list.1 +4 -19
  118. data/lib/bundler/man/bundle-list.1.ronn +4 -1
  119. data/lib/bundler/man/bundle-lock.1 +25 -34
  120. data/lib/bundler/man/bundle-lock.1.ronn +25 -4
  121. data/lib/bundler/man/bundle-open.1 +18 -18
  122. data/lib/bundler/man/bundle-open.1.ronn +10 -1
  123. data/lib/bundler/man/bundle-outdated.1 +23 -75
  124. data/lib/bundler/man/bundle-outdated.1.ronn +21 -22
  125. data/lib/bundler/man/bundle-platform.1 +16 -28
  126. data/lib/bundler/man/bundle-platform.1.ronn +14 -7
  127. data/lib/bundler/man/bundle-plugin.1 +58 -0
  128. data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  129. data/lib/bundler/man/bundle-pristine.1 +5 -16
  130. data/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  131. data/lib/bundler/man/bundle-remove.1 +4 -14
  132. data/lib/bundler/man/bundle-remove.1.ronn +1 -1
  133. data/lib/bundler/man/bundle-show.1 +7 -11
  134. data/lib/bundler/man/bundle-show.1.ronn +4 -0
  135. data/lib/bundler/man/bundle-update.1 +31 -144
  136. data/lib/bundler/man/bundle-update.1.ronn +16 -7
  137. data/lib/bundler/man/bundle-version.1 +22 -0
  138. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  139. data/lib/bundler/man/bundle-viz.1 +9 -18
  140. data/lib/bundler/man/bundle-viz.1.ronn +9 -3
  141. data/lib/bundler/man/bundle.1 +17 -51
  142. data/lib/bundler/man/bundle.1.ronn +12 -7
  143. data/lib/bundler/man/gemfile.5 +132 -346
  144. data/lib/bundler/man/gemfile.5.ronn +127 -86
  145. data/lib/bundler/man/index.txt +8 -0
  146. data/lib/bundler/match_metadata.rb +17 -0
  147. data/lib/bundler/match_platform.rb +1 -2
  148. data/lib/bundler/match_remote_metadata.rb +29 -0
  149. data/lib/bundler/materialization.rb +59 -0
  150. data/lib/bundler/mirror.rb +8 -10
  151. data/lib/bundler/plugin/api/source.rb +11 -14
  152. data/lib/bundler/plugin/events.rb +24 -0
  153. data/lib/bundler/plugin/index.rb +13 -5
  154. data/lib/bundler/plugin/installer/git.rb +0 -4
  155. data/lib/bundler/plugin/installer/path.rb +18 -0
  156. data/lib/bundler/plugin/installer/rubygems.rb +0 -8
  157. data/lib/bundler/plugin/installer.rb +43 -20
  158. data/lib/bundler/plugin/source_list.rb +4 -4
  159. data/lib/bundler/plugin.rb +35 -7
  160. data/lib/bundler/process_lock.rb +10 -14
  161. data/lib/bundler/remote_specification.rb +17 -6
  162. data/lib/bundler/resolver/base.rb +117 -0
  163. data/lib/bundler/resolver/candidate.rb +82 -0
  164. data/lib/bundler/resolver/incompatibility.rb +15 -0
  165. data/lib/bundler/resolver/package.rb +90 -0
  166. data/lib/bundler/resolver/root.rb +25 -0
  167. data/lib/bundler/resolver/spec_group.rb +54 -66
  168. data/lib/bundler/resolver.rb +440 -306
  169. data/lib/bundler/retry.rb +2 -2
  170. data/lib/bundler/ruby_dsl.rb +42 -7
  171. data/lib/bundler/ruby_version.rb +22 -22
  172. data/lib/bundler/rubygems_ext.rb +323 -84
  173. data/lib/bundler/rubygems_gem_installer.rb +93 -65
  174. data/lib/bundler/rubygems_integration.rb +89 -237
  175. data/lib/bundler/runtime.rb +30 -20
  176. data/lib/bundler/safe_marshal.rb +31 -0
  177. data/lib/bundler/self_manager.rb +205 -0
  178. data/lib/bundler/settings.rb +145 -58
  179. data/lib/bundler/setup.rb +13 -1
  180. data/lib/bundler/shared_helpers.rb +94 -51
  181. data/lib/bundler/source/git/git_proxy.rb +283 -82
  182. data/lib/bundler/source/git.rb +187 -78
  183. data/lib/bundler/source/metadata.rb +16 -16
  184. data/lib/bundler/source/path/installer.rb +1 -22
  185. data/lib/bundler/source/path.rb +17 -27
  186. data/lib/bundler/source/rubygems/remote.rb +1 -1
  187. data/lib/bundler/source/rubygems.rb +165 -245
  188. data/lib/bundler/source/rubygems_aggregate.rb +1 -1
  189. data/lib/bundler/source.rb +7 -6
  190. data/lib/bundler/source_list.rb +41 -33
  191. data/lib/bundler/source_map.rb +15 -2
  192. data/lib/bundler/spec_set.rb +193 -58
  193. data/lib/bundler/stub_specification.rb +39 -7
  194. data/lib/bundler/templates/Executable +3 -5
  195. data/lib/bundler/templates/Executable.bundler +7 -12
  196. data/lib/bundler/templates/Executable.standalone +4 -4
  197. data/lib/bundler/templates/Gemfile +0 -2
  198. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  199. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  200. data/lib/bundler/templates/newgem/Gemfile.tt +5 -2
  201. data/lib/bundler/templates/newgem/README.md.tt +12 -12
  202. data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
  203. data/lib/bundler/templates/newgem/bin/console.tt +0 -4
  204. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  205. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  206. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  207. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  208. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  209. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  210. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +20 -10
  211. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  212. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  213. data/lib/bundler/templates/newgem/newgem.gemspec.tt +26 -18
  214. data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  215. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  216. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  217. data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  218. data/lib/bundler/ui/rg_proxy.rb +1 -1
  219. data/lib/bundler/ui/shell.rb +61 -16
  220. data/lib/bundler/ui/silent.rb +33 -6
  221. data/lib/bundler/uri_credentials_filter.rb +3 -3
  222. data/lib/bundler/uri_normalizer.rb +23 -0
  223. data/lib/bundler/vendor/.document +1 -0
  224. data/lib/bundler/vendor/connection_pool/.document +1 -0
  225. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  226. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  227. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  228. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  229. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
  230. data/lib/bundler/vendor/fileutils/.document +1 -0
  231. data/lib/bundler/vendor/fileutils/COPYING +56 -0
  232. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -418
  233. data/lib/bundler/vendor/net-http-persistent/.document +1 -0
  234. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  235. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  236. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  237. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  238. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +102 -64
  239. data/lib/bundler/vendor/pub_grub/.document +1 -0
  240. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  241. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  242. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  243. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  244. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  245. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  246. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  247. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  248. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  249. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  250. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  251. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  252. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  253. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  254. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  255. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  256. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  257. data/lib/bundler/vendor/securerandom/.document +1 -0
  258. data/lib/bundler/vendor/securerandom/COPYING +56 -0
  259. data/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  260. data/lib/bundler/vendor/thor/.document +1 -0
  261. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  262. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  263. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  264. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  265. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +15 -19
  266. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
  267. data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
  268. data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  269. data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  270. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
  271. data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
  272. data/lib/bundler/vendor/thor/lib/thor/group.rb +12 -1
  273. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  274. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  275. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
  276. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  277. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +28 -9
  278. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +65 -8
  279. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  280. data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  281. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +56 -162
  282. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
  283. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  284. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -46
  285. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  286. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  287. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  288. data/lib/bundler/vendor/thor/lib/thor/shell.rb +2 -2
  289. data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
  290. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  291. data/lib/bundler/vendor/thor/lib/thor.rb +166 -8
  292. data/lib/bundler/vendor/tsort/.document +1 -0
  293. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  294. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  295. data/lib/bundler/vendor/uri/.document +1 -0
  296. data/lib/bundler/vendor/uri/COPYING +56 -0
  297. data/lib/bundler/vendor/uri/lib/uri/common.rb +351 -219
  298. data/lib/bundler/vendor/uri/lib/uri/file.rb +10 -4
  299. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +3 -3
  300. data/lib/bundler/vendor/uri/lib/uri/generic.rb +49 -39
  301. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
  302. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
  303. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
  304. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  305. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
  306. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +26 -26
  307. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +131 -50
  308. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  309. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  310. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  311. data/lib/bundler/vendor/uri/lib/uri.rb +12 -12
  312. data/lib/bundler/vendored_net_http.rb +23 -0
  313. data/lib/bundler/vendored_persistent.rb +0 -36
  314. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  315. data/lib/bundler/vendored_securerandom.rb +12 -0
  316. data/lib/bundler/vendored_timeout.rb +12 -0
  317. data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
  318. data/lib/bundler/vendored_uri.rb +18 -1
  319. data/lib/bundler/version.rb +5 -1
  320. data/lib/bundler/vlad.rb +1 -1
  321. data/lib/bundler/worker.rb +7 -9
  322. data/lib/bundler/yaml_serializer.rb +22 -13
  323. data/lib/bundler.rb +176 -151
  324. metadata +98 -41
  325. data/lib/bundler/dep_proxy.rb +0 -55
  326. data/lib/bundler/gemdeps.rb +0 -29
  327. data/lib/bundler/psyched_yaml.rb +0 -22
  328. data/lib/bundler/templates/gems.rb +0 -8
  329. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  330. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  331. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  332. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  333. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  334. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  335. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  336. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  337. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  338. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  339. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  340. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  341. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  342. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  343. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  344. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  345. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  346. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  347. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  348. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  349. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  350. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  351. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  352. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  353. data/lib/bundler/version_ranges.rb +0 -122
@@ -12,22 +12,33 @@ module Bundler
12
12
 
13
13
  warn_if_root
14
14
 
15
- Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
15
+ if options[:local]
16
+ Bundler.self_manager.restart_with_locked_bundler_if_needed
17
+ else
18
+ Bundler.self_manager.install_locked_bundler_and_restart_with_it_if_needed
19
+ end
20
+
21
+ Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Gem.freebsd_platform?
16
22
 
17
23
  # Disable color in deployment mode
18
24
  Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]
19
25
 
26
+ if target_rbconfig_path = options[:"target-rbconfig"]
27
+ Bundler.rubygems.set_target_rbconfig(target_rbconfig_path)
28
+ end
29
+
20
30
  check_for_options_conflicts
21
31
 
22
32
  check_trust_policy
23
33
 
24
34
  if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
25
35
  unless Bundler.default_lockfile.exist?
26
- flag = "--deployment flag" if options[:deployment]
27
- flag ||= "--frozen flag" if options[:frozen]
28
- flag ||= "deployment setting"
29
- raise ProductionError, "The #{flag} requires a #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}. Please make " \
30
- "sure you have checked your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} into version control " \
36
+ flag = "--deployment flag" if options[:deployment]
37
+ flag ||= "--frozen flag" if options[:frozen]
38
+ flag ||= "deployment setting" if Bundler.settings[:deployment]
39
+ flag ||= "frozen setting" if Bundler.settings[:frozen]
40
+ raise ProductionError, "The #{flag} requires a lockfile. Please make " \
41
+ "sure you have checked your #{SharedHelpers.relative_lockfile_path} into version control " \
31
42
  "before deploying."
32
43
  end
33
44
 
@@ -49,7 +60,8 @@ module Bundler
49
60
 
50
61
  if options["binstubs"]
51
62
  Bundler::SharedHelpers.major_deprecation 2,
52
- "The --binstubs option will be removed in favor of `bundle binstubs --all`"
63
+ "The --binstubs option will be removed in favor of `bundle binstubs --all`",
64
+ removed_message: "The --binstubs option have been removed in favor of `bundle binstubs --all`"
53
65
  end
54
66
 
55
67
  Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
@@ -59,7 +71,7 @@ module Bundler
59
71
 
60
72
  installer = Installer.install(Bundler.root, definition, options)
61
73
 
62
- Bundler.settings.temporary(:cache_all_platforms => options[:local] ? false : Bundler.settings[:cache_all_platforms]) do
74
+ Bundler.settings.temporary(cache_all_platforms: options[:local] ? false : Bundler.settings[:cache_all_platforms]) do
63
75
  Bundler.load.cache(nil, options[:local]) if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
64
76
  end
65
77
 
@@ -92,9 +104,8 @@ module Bundler
92
104
 
93
105
  def warn_if_root
94
106
  return if Bundler.settings[:silence_root_warning] || Gem.win_platform? || !Process.uid.zero?
95
- Bundler.ui.warn "Don't run Bundler as root. Bundler can ask for sudo " \
96
- "if it is needed, and installing your bundle as root will break this " \
97
- "application for all non-root users on this machine.", :wrap => true
107
+ Bundler.ui.warn "Don't run Bundler as root. Installing your bundle as root " \
108
+ "will break this application for all non-root users on this machine.", wrap: true
98
109
  end
99
110
 
100
111
  def dependencies_count_for(definition)
@@ -133,46 +144,27 @@ module Bundler
133
144
  end
134
145
 
135
146
  def normalize_groups
136
- options[:with] &&= options[:with].join(":").tr(" ", ":").split(":")
137
- options[:without] &&= options[:without].join(":").tr(" ", ":").split(":")
138
-
139
147
  check_for_group_conflicts_in_cli_options
140
148
 
141
- Bundler.settings.set_command_option :with, nil if options[:with] == []
142
- Bundler.settings.set_command_option :without, nil if options[:without] == []
143
-
144
- with = options.fetch(:with, [])
145
- with |= Bundler.settings[:with].map(&:to_s)
146
- with -= options[:without] if options[:without]
147
-
148
- without = options.fetch(:without, [])
149
- without |= Bundler.settings[:without].map(&:to_s)
150
- without -= options[:with] if options[:with]
151
-
152
- options[:with] = with
153
- options[:without] = without
154
-
155
- unless Bundler.settings[:without] == options[:without] && Bundler.settings[:with] == options[:with]
156
- # need to nil them out first to get around validation for backwards compatibility
157
- Bundler.settings.set_command_option :without, nil
158
- Bundler.settings.set_command_option :with, nil
159
- Bundler.settings.set_command_option :without, options[:without] - options[:with]
160
- Bundler.settings.set_command_option :with, options[:with]
161
- end
149
+ # need to nil them out first to get around validation for backwards compatibility
150
+ Bundler.settings.set_command_option :without, nil
151
+ Bundler.settings.set_command_option :with, nil
152
+ Bundler.settings.set_command_option :without, options[:without]
153
+ Bundler.settings.set_command_option :with, options[:with]
162
154
  end
163
155
 
164
156
  def normalize_settings
165
157
  Bundler.settings.set_command_option :path, nil if options[:system]
166
- Bundler.settings.temporary(:path_relative_to_cwd => false) do
167
- Bundler.settings.set_command_option :path, "vendor/bundle" if Bundler.settings[:deployment] && Bundler.settings[:path].nil?
168
- end
169
158
  Bundler.settings.set_command_option_if_given :path, options[:path]
170
- Bundler.settings.temporary(:path_relative_to_cwd => false) do
171
- Bundler.settings.set_command_option :path, "bundle" if options["standalone"] && Bundler.settings[:path].nil?
159
+
160
+ if options["standalone"] && Bundler.settings[:path].nil? && !options["local"]
161
+ Bundler.settings.temporary(path_relative_to_cwd: false) do
162
+ Bundler.settings.set_command_option :path, "bundle"
163
+ end
172
164
  end
173
165
 
174
166
  bin_option = options["binstubs"]
175
- bin_option = nil if bin_option && bin_option.empty?
167
+ bin_option = nil if bin_option&.empty?
176
168
  Bundler.settings.set_command_option :bin, bin_option if options["binstubs"]
177
169
 
178
170
  Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
@@ -185,7 +177,7 @@ module Bundler
185
177
 
186
178
  Bundler.settings.set_command_option_if_given :clean, options["clean"]
187
179
 
188
- normalize_groups
180
+ normalize_groups if options[:without] || options[:with]
189
181
 
190
182
  options[:force] = options[:redownload]
191
183
  end
@@ -5,7 +5,7 @@ require "rbconfig"
5
5
  module Bundler
6
6
  class CLI::Issue
7
7
  def run
8
- Bundler.ui.info <<-EOS.gsub(/^ {8}/, "")
8
+ Bundler.ui.info <<~EOS
9
9
  Did you find an issue with Bundler? Before filing a new issue,
10
10
  be sure to check out these resources:
11
11
 
@@ -20,9 +20,10 @@ module Bundler
20
20
 
21
21
  Hopefully the troubleshooting steps above resolved your problem! If things
22
22
  still aren't working the way you expect them to, please let us know so
23
- that we can diagnose and help fix the problem you're having. Please
24
- view the Filing Issues guide for more information:
25
- https://github.com/rubygems/rubygems/blob/master/bundler/doc/contributing/ISSUES.md
23
+ that we can diagnose and help fix the problem you're having, by filling
24
+ in the new issue form located at
25
+ https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md,
26
+ and copy and pasting the information below.
26
27
 
27
28
  EOS
28
29
 
@@ -14,54 +14,80 @@ module Bundler
14
14
  exit 1
15
15
  end
16
16
 
17
+ check_for_conflicting_options
18
+
17
19
  print = options[:print]
18
- ui = Bundler.ui
19
- Bundler.ui = UI::Silent.new if print
20
+ previous_output_stream = Bundler.ui.output_stream
21
+ Bundler.ui.output_stream = :stderr if print
20
22
 
21
23
  Bundler::Fetcher.disable_endpoint = options["full-index"]
22
24
 
23
25
  update = options[:update]
24
26
  conservative = options[:conservative]
27
+ bundler = options[:bundler]
25
28
 
26
29
  if update.is_a?(Array) # unlocking specific gems
27
30
  Bundler::CLI::Common.ensure_all_gems_in_lockfile!(update)
28
- update = { :gems => update, :conservative => conservative }
29
- elsif update
30
- update = { :conservative => conservative } if conservative
31
+ update = { gems: update, conservative: conservative }
32
+ elsif update && conservative
33
+ update = { conservative: conservative }
34
+ elsif update && bundler
35
+ update = { bundler: bundler }
31
36
  end
32
- definition = Bundler.definition(update)
33
37
 
34
- Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options) if options[:update]
38
+ file = options[:lockfile]
39
+ file = file ? Pathname.new(file).expand_path : Bundler.default_lockfile
35
40
 
36
- options["remove-platform"].each do |platform|
37
- definition.remove_platform(platform)
38
- end
41
+ Bundler.settings.temporary(frozen: false) do
42
+ definition = Bundler.definition(update, file)
43
+ definition.add_checksums if options["add-checksums"]
39
44
 
40
- options["add-platform"].each do |platform_string|
41
- platform = Gem::Platform.new(platform_string)
42
- if platform.to_s == "unknown"
43
- Bundler.ui.warn "The platform `#{platform_string}` is unknown to RubyGems " \
44
- "and adding it will likely lead to resolution errors"
45
+ Bundler::CLI::Common.configure_gem_version_promoter(definition, options) if options[:update]
46
+
47
+ options["remove-platform"].each do |platform|
48
+ definition.remove_platform(platform)
49
+ end
50
+
51
+ options["add-platform"].each do |platform_string|
52
+ platform = Gem::Platform.new(platform_string)
53
+ if platform.to_s == "unknown"
54
+ Bundler.ui.error "The platform `#{platform_string}` is unknown to RubyGems and can't be added to the lockfile."
55
+ exit 1
56
+ end
57
+ definition.add_platform(platform)
58
+ end
59
+
60
+ if definition.platforms.empty?
61
+ raise InvalidOption, "Removing all platforms from the bundle is not allowed"
45
62
  end
46
- definition.add_platform(platform)
47
- end
48
63
 
49
- if definition.platforms.empty?
50
- raise InvalidOption, "Removing all platforms from the bundle is not allowed"
64
+ definition.remotely! unless options[:local]
65
+
66
+ if options["normalize-platforms"]
67
+ definition.normalize_platforms
68
+ end
69
+
70
+ if print
71
+ puts definition.to_lock
72
+ else
73
+ puts "Writing lockfile to #{file}"
74
+ definition.lock
75
+ end
51
76
  end
52
77
 
53
- definition.resolve_remotely! unless options[:local]
78
+ Bundler.ui.output_stream = previous_output_stream
79
+ end
80
+
81
+ private
54
82
 
55
- if print
56
- puts definition.to_lock
57
- else
58
- file = options[:lockfile]
59
- file = file ? File.expand_path(file) : Bundler.default_lockfile
60
- puts "Writing lockfile to #{file}"
61
- definition.lock(file)
83
+ def check_for_conflicting_options
84
+ if options["normalize-platforms"] && options["add-platform"].any?
85
+ raise InvalidOption, "--normalize-platforms can't be used with --add-platform"
62
86
  end
63
87
 
64
- Bundler.ui = ui
88
+ if options["normalize-platforms"] && options["remove-platform"].any?
89
+ raise InvalidOption, "--normalize-platforms can't be used with --remove-platform"
90
+ end
65
91
  end
66
92
  end
67
93
  end
@@ -2,27 +2,27 @@
2
2
 
3
3
  module Bundler
4
4
  class CLI::Open
5
- attr_reader :options, :name
5
+ attr_reader :options, :name, :path
6
6
  def initialize(options, name)
7
7
  @options = options
8
8
  @name = name
9
+ @path = options[:path] unless options[:path].nil?
9
10
  end
10
11
 
11
12
  def run
13
+ raise InvalidOption, "Cannot specify `--path` option without a value" if !@path.nil? && @path.empty?
12
14
  editor = [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? }
13
15
  return Bundler.ui.info("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") unless editor
14
16
  return unless spec = Bundler::CLI::Common.select_spec(name, :regex_match)
15
17
  if spec.default_gem?
16
18
  Bundler.ui.info "Unable to open #{name} because it's a default gem, so the directory it would normally be installed to does not exist."
17
19
  else
18
- path = spec.full_gem_path
19
- Dir.chdir(path) do
20
- require "shellwords"
21
- command = Shellwords.split(editor) + [path]
22
- Bundler.with_original_env do
23
- system(*command)
24
- end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
25
- end
20
+ root_path = spec.full_gem_path
21
+ require "shellwords"
22
+ command = Shellwords.split(editor) << File.join([root_path, path].compact)
23
+ Bundler.with_original_env do
24
+ system(*command, { chdir: root_path })
25
+ end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
26
26
  end
27
27
  end
28
28
  end
@@ -41,12 +41,12 @@ module Bundler
41
41
  # We're doing a full update
42
42
  Bundler.definition(true)
43
43
  else
44
- Bundler.definition(:gems => gems, :sources => sources)
44
+ Bundler.definition(gems: gems, sources: sources)
45
45
  end
46
46
 
47
47
  Bundler::CLI::Common.configure_gem_version_promoter(
48
48
  Bundler.definition,
49
- options
49
+ options.merge(strict: @strict)
50
50
  )
51
51
 
52
52
  definition_resolution = proc do
@@ -54,7 +54,7 @@ module Bundler
54
54
  end
55
55
 
56
56
  if options[:parseable]
57
- Bundler.ui.silence(&definition_resolution)
57
+ Bundler.ui.progress(&definition_resolution)
58
58
  else
59
59
  definition_resolution.call
60
60
  end
@@ -90,37 +90,33 @@ module Bundler
90
90
  end
91
91
 
92
92
  outdated_gems << {
93
- :active_spec => active_spec,
94
- :current_spec => current_spec,
95
- :dependency => dependency,
96
- :groups => groups,
93
+ active_spec: active_spec,
94
+ current_spec: current_spec,
95
+ dependency: dependency,
96
+ groups: groups,
97
97
  }
98
98
  end
99
99
 
100
- if outdated_gems.empty?
100
+ relevant_outdated_gems = if options_include_groups
101
+ outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems|
102
+ contains_group = groups.split(", ").include?(options[:group])
103
+ next unless options[:groups] || contains_group
104
+
105
+ gems
106
+ end.compact
107
+ else
108
+ outdated_gems
109
+ end
110
+
111
+ if relevant_outdated_gems.empty?
101
112
  unless options[:parseable]
102
113
  Bundler.ui.info(nothing_outdated_message)
103
114
  end
104
115
  else
105
- if options_include_groups
106
- relevant_outdated_gems = outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems|
107
- contains_group = groups.split(", ").include?(options[:group])
108
- next unless options[:groups] || contains_group
109
-
110
- gems
111
- end.compact
112
-
113
- if options[:parseable]
114
- relevant_outdated_gems.each do |gems|
115
- print_gems(gems)
116
- end
117
- else
118
- print_gems_table(relevant_outdated_gems)
119
- end
120
- elsif options[:parseable]
121
- print_gems(outdated_gems)
116
+ if options[:parseable]
117
+ print_gems(relevant_outdated_gems)
122
118
  else
123
- print_gems_table(outdated_gems)
119
+ print_gems_table(relevant_outdated_gems)
124
120
  end
125
121
 
126
122
  exit 1
@@ -129,6 +125,12 @@ module Bundler
129
125
 
130
126
  private
131
127
 
128
+ def loaded_from_for(spec)
129
+ return unless spec.respond_to?(:loaded_from)
130
+
131
+ spec.loaded_from
132
+ end
133
+
132
134
  def groups_text(group_text, groups)
133
135
  "#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
134
136
  end
@@ -184,10 +186,13 @@ module Bundler
184
186
 
185
187
  def print_gem(current_spec, active_spec, dependency, groups)
186
188
  spec_version = "#{active_spec.version}#{active_spec.git_version}"
187
- spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from
189
+ if Bundler.ui.debug?
190
+ loaded_from = loaded_from_for(active_spec)
191
+ spec_version += " (from #{loaded_from})" if loaded_from
192
+ end
188
193
  current_version = "#{current_spec.version}#{current_spec.git_version}"
189
194
 
190
- if dependency && dependency.specific?
195
+ if dependency&.specific?
191
196
  dependency_version = %(, requested #{dependency.requirement})
192
197
  end
193
198
 
@@ -211,7 +216,7 @@ module Bundler
211
216
  dependency = dependency.requirement if dependency
212
217
 
213
218
  ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
214
- ret_val << active_spec.loaded_from.to_s if Bundler.ui.debug?
219
+ ret_val << loaded_from_for(active_spec).to_s if Bundler.ui.debug?
215
220
  ret_val
216
221
  end
217
222
 
@@ -8,12 +8,12 @@ module Bundler
8
8
  end
9
9
 
10
10
  def run
11
- platforms, ruby_version = Bundler.ui.silence do
12
- locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version
13
- gemfile_ruby_version = Bundler.definition.ruby_version && Bundler.definition.ruby_version.single_version_string
14
- [Bundler.definition.platforms.map {|p| "* #{p}" },
15
- locked_ruby_version || gemfile_ruby_version]
11
+ ruby_version = if Bundler.locked_gems
12
+ Bundler.locked_gems.ruby_version&.gsub(/p\d+\Z/, "")
13
+ else
14
+ Bundler.definition.ruby_version&.single_version_string
16
15
  end
16
+
17
17
  output = []
18
18
 
19
19
  if options[:ruby]
@@ -23,7 +23,9 @@ module Bundler
23
23
  output << "No ruby version specified"
24
24
  end
25
25
  else
26
- output << "Your platform is: #{RUBY_PLATFORM}"
26
+ platforms = Bundler.definition.platforms.map {|p| "* #{p}" }
27
+
28
+ output << "Your platform is: #{Gem::Platform.local}"
27
29
  output << "Your app has gems that work on these platforms:\n#{platforms.join("\n")}"
28
30
 
29
31
  if ruby_version
@@ -5,20 +5,15 @@ module Bundler
5
5
  class CLI::Plugin < Thor
6
6
  desc "install PLUGINS", "Install the plugin from the source"
7
7
  long_desc <<-D
8
- Install plugins either from the rubygems source provided (with --source option) or from a git source provided with --git (for remote repos) or --local_git (for local repos). If no sources are provided, it uses Gem.sources
8
+ Install plugins either from the rubygems source provided (with --source option), from a git source provided with --git, or a local path provided with --path. If no sources are provided, it uses Gem.sources
9
9
  D
10
- method_option "source", :type => :string, :default => nil, :banner =>
11
- "URL of the RubyGems source to fetch the plugin from"
12
- method_option "version", :type => :string, :default => nil, :banner =>
13
- "The version of the plugin to fetch"
14
- method_option "git", :type => :string, :default => nil, :banner =>
15
- "URL of the git repo to fetch from"
16
- method_option "local_git", :type => :string, :default => nil, :banner =>
17
- "Path of the local git repo to fetch from"
18
- method_option "branch", :type => :string, :default => nil, :banner =>
19
- "The git branch to checkout"
20
- method_option "ref", :type => :string, :default => nil, :banner =>
21
- "The git revision to check out"
10
+ method_option "source", type: :string, default: nil, banner: "URL of the RubyGems source to fetch the plugin from"
11
+ method_option "version", type: :string, default: nil, banner: "The version of the plugin to fetch"
12
+ method_option "git", type: :string, default: nil, banner: "URL of the git repo to fetch from"
13
+ method_option "local_git", type: :string, default: nil, banner: "Path of the local git repo to fetch from (deprecated)"
14
+ method_option "branch", type: :string, default: nil, banner: "The git branch to checkout"
15
+ method_option "ref", type: :string, default: nil, banner: "The git revision to check out"
16
+ method_option "path", type: :string, default: nil, banner: "Path of a local gem to directly use"
22
17
  def install(*plugins)
23
18
  Bundler::Plugin.install(plugins, options)
24
19
  end
@@ -27,8 +22,7 @@ module Bundler
27
22
  long_desc <<-D
28
23
  Uninstall given list of plugins. To uninstall all the plugins, use -all option.
29
24
  D
30
- method_option "all", :type => :boolean, :default => nil, :banner =>
31
- "Uninstall all the installed plugins. If no plugin is installed, then it does nothing."
25
+ method_option "all", type: :boolean, default: nil, banner: "Uninstall all the installed plugins. If no plugin is installed, then it does nothing."
32
26
  def uninstall(*plugins)
33
27
  Bundler::Plugin.uninstall(plugins, options)
34
28
  end
@@ -12,40 +12,48 @@ module Bundler
12
12
  definition.validate_runtime!
13
13
  installer = Bundler::Installer.new(Bundler.root, definition)
14
14
 
15
- Bundler.load.specs.each do |spec|
16
- next if spec.name == "bundler" # Source::Rubygems doesn't install bundler
17
- next if !@gems.empty? && !@gems.include?(spec.name)
18
-
19
- gem_name = "#{spec.name} (#{spec.version}#{spec.git_version})"
20
- gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY
21
-
22
- case source = spec.source
23
- when Source::Rubygems
24
- cached_gem = spec.cache_file
25
- unless File.exist?(cached_gem)
26
- Bundler.ui.error("Failed to pristine #{gem_name}. Cached gem #{cached_gem} does not exist.")
15
+ ProcessLock.lock do
16
+ installed_specs = definition.specs.reject do |spec|
17
+ next if spec.name == "bundler" # Source::Rubygems doesn't install bundler
18
+ next if !@gems.empty? && !@gems.include?(spec.name)
19
+
20
+ gem_name = "#{spec.name} (#{spec.version}#{spec.git_version})"
21
+ gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY
22
+
23
+ case source = spec.source
24
+ when Source::Rubygems
25
+ cached_gem = spec.cache_file
26
+ unless File.exist?(cached_gem)
27
+ Bundler.ui.error("Failed to pristine #{gem_name}. Cached gem #{cached_gem} does not exist.")
28
+ next
29
+ end
30
+
31
+ FileUtils.rm_rf spec.full_gem_path
32
+ when Source::Git
33
+ if source.local?
34
+ Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.")
35
+ next
36
+ end
37
+
38
+ source.remote!
39
+ if extension_cache_path = source.extension_cache_path(spec)
40
+ FileUtils.rm_rf extension_cache_path
41
+ end
42
+ FileUtils.rm_rf spec.extension_dir
43
+ FileUtils.rm_rf spec.full_gem_path
44
+ else
45
+ Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
27
46
  next
28
47
  end
29
48
 
30
- FileUtils.rm_rf spec.full_gem_path
31
- when Source::Git
32
- if source.local?
33
- Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.")
34
- next
35
- end
49
+ true
50
+ end.map(&:name)
36
51
 
37
- source.remote!
38
- if extension_cache_path = source.extension_cache_path(spec)
39
- FileUtils.rm_rf extension_cache_path
40
- end
41
- FileUtils.rm_rf spec.extension_dir
42
- FileUtils.rm_rf spec.full_gem_path
43
- else
44
- Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
45
- next
46
- end
47
-
48
- Bundler::GemInstaller.new(spec, installer, false, 0, true).install_from_spec
52
+ jobs = installer.send(:installation_parallelization)
53
+ pristine_count = definition.specs.count - installed_specs.count
54
+ # allow a pristining a single gem to skip the parallel worker
55
+ jobs = [jobs, pristine_count].min
56
+ ParallelInstaller.call(installer, definition.specs, jobs, false, true, skip: installed_specs)
49
57
  end
50
58
  end
51
59
  end
@@ -11,8 +11,7 @@ module Bundler
11
11
  raise InvalidOption, "Please specify gems to remove." if @gems.empty?
12
12
 
13
13
  Injector.remove(@gems, {})
14
-
15
- Installer.install(Bundler.root, Bundler.definition) if @options["install"]
14
+ Installer.install(Bundler.root, Bundler.definition)
16
15
  end
17
16
  end
18
17
  end
@@ -18,7 +18,7 @@ module Bundler
18
18
 
19
19
  if gem_name
20
20
  if gem_name == "bundler"
21
- path = File.expand_path("../../../..", __FILE__)
21
+ path = File.expand_path("../../..", __dir__)
22
22
  else
23
23
  spec = Bundler::CLI::Common.select_spec(gem_name, :regex_match)
24
24
  return unless spec
@@ -40,8 +40,8 @@ module Bundler
40
40
  desc = " * #{s.name} (#{s.version}#{s.git_version})"
41
41
  if @verbose
42
42
  latest = latest_specs.find {|l| l.name == s.name }
43
- Bundler.ui.info <<-END.gsub(/^ +/, "")
44
- #{desc}
43
+ Bundler.ui.info <<~END
44
+ #{desc.lstrip}
45
45
  \tSummary: #{s.summary || "No description available."}
46
46
  \tHomepage: #{s.homepage || "No website available."}
47
47
  \tStatus: #{outdated?(s, latest) ? "Outdated - #{s.version} < #{latest.version}" : "Up to date"}
@@ -59,9 +59,9 @@ module Bundler
59
59
  definition = Bundler.definition(true)
60
60
  if options[:outdated]
61
61
  Bundler.ui.info "Fetching remote specs for outdated check...\n\n"
62
- Bundler.ui.silence { definition.resolve_remotely! }
62
+ Bundler.ui.silence { definition.remotely! }
63
63
  else
64
- definition.resolve_with_cache!
64
+ definition.with_cache!
65
65
  end
66
66
  Bundler.reset!
67
67
  definition.specs