bundler 1.9.0 → 1.17.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bundler might be problematic. Click here for more details.

Files changed (328) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1157 -6
  3. data/README.md +33 -6
  4. data/bundler.gemspec +51 -18
  5. data/exe/bundle +31 -0
  6. data/{bin → exe}/bundle_ruby +10 -6
  7. data/exe/bundler +4 -0
  8. data/lib/bundler.rb +326 -207
  9. data/lib/bundler/build_metadata.rb +53 -0
  10. data/lib/bundler/capistrano.rb +9 -3
  11. data/lib/bundler/cli.rb +522 -141
  12. data/lib/bundler/cli/add.rb +35 -0
  13. data/lib/bundler/cli/binstubs.rb +22 -11
  14. data/lib/bundler/cli/cache.rb +7 -6
  15. data/lib/bundler/cli/check.rb +11 -8
  16. data/lib/bundler/cli/clean.rb +7 -8
  17. data/lib/bundler/cli/common.rb +53 -7
  18. data/lib/bundler/cli/config.rb +84 -49
  19. data/lib/bundler/cli/console.rb +13 -8
  20. data/lib/bundler/cli/doctor.rb +140 -0
  21. data/lib/bundler/cli/exec.rb +77 -16
  22. data/lib/bundler/cli/gem.rb +120 -52
  23. data/lib/bundler/cli/info.rb +50 -0
  24. data/lib/bundler/cli/init.rb +21 -7
  25. data/lib/bundler/cli/inject.rb +37 -10
  26. data/lib/bundler/cli/install.rb +139 -78
  27. data/lib/bundler/cli/issue.rb +40 -0
  28. data/lib/bundler/cli/list.rb +58 -0
  29. data/lib/bundler/cli/lock.rb +63 -0
  30. data/lib/bundler/cli/open.rb +9 -6
  31. data/lib/bundler/cli/outdated.rb +221 -35
  32. data/lib/bundler/cli/package.rb +11 -7
  33. data/lib/bundler/cli/platform.rb +7 -4
  34. data/lib/bundler/cli/plugin.rb +24 -0
  35. data/lib/bundler/cli/pristine.rb +47 -0
  36. data/lib/bundler/cli/remove.rb +18 -0
  37. data/lib/bundler/cli/show.rb +11 -10
  38. data/lib/bundler/cli/update.rb +47 -29
  39. data/lib/bundler/cli/viz.rb +12 -8
  40. data/lib/bundler/compact_index_client.rb +109 -0
  41. data/lib/bundler/compact_index_client/cache.rb +118 -0
  42. data/lib/bundler/compact_index_client/updater.rb +116 -0
  43. data/lib/bundler/compatibility_guard.rb +14 -0
  44. data/lib/bundler/constants.rb +3 -1
  45. data/lib/bundler/current_ruby.rb +47 -137
  46. data/lib/bundler/definition.rb +599 -230
  47. data/lib/bundler/dep_proxy.rb +15 -10
  48. data/lib/bundler/dependency.rb +54 -25
  49. data/lib/bundler/deployment.rb +12 -2
  50. data/lib/bundler/deprecate.rb +33 -4
  51. data/lib/bundler/dsl.rb +383 -99
  52. data/lib/bundler/endpoint_specification.rb +72 -7
  53. data/lib/bundler/env.rb +121 -41
  54. data/lib/bundler/environment_preserver.rb +59 -0
  55. data/lib/bundler/errors.rb +158 -0
  56. data/lib/bundler/feature_flag.rb +74 -0
  57. data/lib/bundler/fetcher.rb +171 -280
  58. data/lib/bundler/fetcher/base.rb +52 -0
  59. data/lib/bundler/fetcher/compact_index.rb +126 -0
  60. data/lib/bundler/fetcher/dependency.rb +82 -0
  61. data/lib/bundler/fetcher/downloader.rb +84 -0
  62. data/lib/bundler/fetcher/index.rb +52 -0
  63. data/lib/bundler/friendly_errors.rb +113 -58
  64. data/lib/bundler/gem_helper.rb +73 -46
  65. data/lib/bundler/gem_helpers.rb +85 -9
  66. data/lib/bundler/gem_remote_fetcher.rb +43 -0
  67. data/lib/bundler/gem_tasks.rb +6 -1
  68. data/lib/bundler/gem_version_promoter.rb +190 -0
  69. data/lib/bundler/gemdeps.rb +29 -0
  70. data/lib/bundler/graph.rb +32 -49
  71. data/lib/bundler/index.rb +79 -67
  72. data/lib/bundler/injector.rb +219 -30
  73. data/lib/bundler/inline.rb +74 -0
  74. data/lib/bundler/installer.rb +191 -206
  75. data/lib/bundler/installer/gem_installer.rb +85 -0
  76. data/lib/bundler/installer/parallel_installer.rb +233 -0
  77. data/lib/bundler/installer/standalone.rb +53 -0
  78. data/lib/bundler/lazy_specification.rb +53 -13
  79. data/lib/bundler/lockfile_generator.rb +95 -0
  80. data/lib/bundler/lockfile_parser.rb +157 -62
  81. data/lib/bundler/match_platform.rb +15 -4
  82. data/lib/bundler/mirror.rb +223 -0
  83. data/lib/bundler/plugin.rb +292 -0
  84. data/lib/bundler/plugin/api.rb +81 -0
  85. data/lib/bundler/plugin/api/source.rb +306 -0
  86. data/lib/bundler/plugin/dsl.rb +53 -0
  87. data/lib/bundler/plugin/events.rb +61 -0
  88. data/lib/bundler/plugin/index.rb +162 -0
  89. data/lib/bundler/plugin/installer.rb +96 -0
  90. data/lib/bundler/plugin/installer/git.rb +38 -0
  91. data/lib/bundler/plugin/installer/rubygems.rb +27 -0
  92. data/lib/bundler/plugin/source_list.rb +27 -0
  93. data/lib/bundler/process_lock.rb +24 -0
  94. data/lib/bundler/psyched_yaml.rb +17 -6
  95. data/lib/bundler/remote_specification.rb +68 -11
  96. data/lib/bundler/resolver.rb +263 -229
  97. data/lib/bundler/resolver/spec_group.rb +106 -0
  98. data/lib/bundler/retry.rb +25 -19
  99. data/lib/bundler/ruby_dsl.rb +9 -2
  100. data/lib/bundler/ruby_version.rb +101 -66
  101. data/lib/bundler/rubygems_ext.rb +77 -37
  102. data/lib/bundler/rubygems_gem_installer.rb +106 -0
  103. data/lib/bundler/rubygems_integration.rb +450 -163
  104. data/lib/bundler/runtime.rb +133 -103
  105. data/lib/bundler/settings.rb +344 -83
  106. data/lib/bundler/settings/validator.rb +102 -0
  107. data/lib/bundler/setup.rb +7 -3
  108. data/lib/bundler/shared_helpers.rb +284 -54
  109. data/lib/bundler/similarity_detector.rb +21 -21
  110. data/lib/bundler/source.rb +68 -15
  111. data/lib/bundler/source/gemspec.rb +18 -0
  112. data/lib/bundler/source/git.rb +90 -55
  113. data/lib/bundler/source/git/git_proxy.rb +135 -35
  114. data/lib/bundler/source/metadata.rb +62 -0
  115. data/lib/bundler/source/path.rb +84 -61
  116. data/lib/bundler/source/path/installer.rb +53 -17
  117. data/lib/bundler/source/rubygems.rb +282 -122
  118. data/lib/bundler/source/rubygems/remote.rb +69 -0
  119. data/lib/bundler/source_list.rb +107 -22
  120. data/lib/bundler/spec_set.rb +83 -45
  121. data/lib/bundler/ssl_certs/certificate_manager.rb +8 -7
  122. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
  123. data/lib/bundler/ssl_certs/{DigiCertHighAssuranceEVRootCA.pem → rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem} +0 -0
  124. data/lib/bundler/ssl_certs/{AddTrustExternalCARoot-2048.pem → rubygems.org/AddTrustExternalCARoot.pem} +0 -0
  125. data/lib/bundler/stub_specification.rb +108 -0
  126. data/lib/bundler/templates/.document +1 -0
  127. data/lib/bundler/templates/Executable +19 -6
  128. data/lib/bundler/templates/Executable.bundler +105 -0
  129. data/lib/bundler/templates/Executable.standalone +6 -4
  130. data/lib/bundler/templates/Gemfile +4 -1
  131. data/lib/bundler/templates/gems.rb +8 -0
  132. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +68 -7
  133. data/lib/bundler/templates/newgem/Gemfile.tt +4 -2
  134. data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
  135. data/lib/bundler/templates/newgem/README.md.tt +19 -11
  136. data/lib/bundler/templates/newgem/Rakefile.tt +10 -6
  137. data/lib/bundler/templates/newgem/bin/console.tt +1 -1
  138. data/lib/bundler/templates/newgem/bin/setup.tt +2 -1
  139. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
  140. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
  141. data/lib/bundler/templates/newgem/gitignore.tt +5 -1
  142. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -6
  143. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
  144. data/lib/bundler/templates/newgem/newgem.gemspec.tt +31 -15
  145. data/lib/bundler/templates/newgem/rspec.tt +1 -0
  146. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +3 -5
  147. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -2
  148. data/lib/bundler/templates/newgem/test/{test_newgem.rb.tt → newgem_test.rb.tt} +2 -2
  149. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +4 -0
  150. data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
  151. data/lib/bundler/ui.rb +5 -3
  152. data/lib/bundler/ui/rg_proxy.rb +5 -7
  153. data/lib/bundler/ui/shell.rb +69 -18
  154. data/lib/bundler/ui/silent.rb +26 -1
  155. data/lib/bundler/uri_credentials_filter.rb +37 -0
  156. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
  157. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
  158. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  159. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  160. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
  161. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +223 -0
  162. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  163. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  164. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  165. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  166. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  167. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  168. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  169. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  170. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +136 -0
  171. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
  172. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  173. data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/specification_provider.rb +11 -0
  174. data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/ui.rb +6 -2
  175. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
  176. data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/resolver.rb +6 -3
  177. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
  178. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
  179. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +27 -24
  180. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
  181. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor.rb +47 -22
  182. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions.rb +31 -29
  183. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_file.rb +3 -2
  184. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_link.rb +3 -2
  185. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/directory.rb +3 -3
  186. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/empty_directory.rb +16 -8
  187. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/file_manipulation.rb +66 -18
  188. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/inject_into_file.rb +18 -16
  189. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/base.rb +67 -44
  190. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/command.rb +13 -11
  191. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
  192. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +12 -0
  193. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
  194. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/error.rb +3 -3
  195. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/group.rb +14 -14
  196. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/invocation.rb +4 -5
  197. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor.rb +2 -2
  198. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/basic.rb +2 -0
  199. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/readline.rb +0 -0
  200. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  201. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/argument.rb +4 -7
  202. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/arguments.rb +16 -16
  203. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/option.rb +42 -21
  204. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/options.rb +13 -10
  205. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/rake_compat.rb +1 -1
  206. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/runner.rb +35 -33
  207. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell.rb +4 -4
  208. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/basic.rb +49 -33
  209. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/color.rb +2 -2
  210. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/html.rb +5 -5
  211. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/util.rb +8 -7
  212. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/version.rb +1 -1
  213. data/lib/bundler/vendored_fileutils.rb +9 -0
  214. data/lib/bundler/vendored_molinillo.rb +4 -5
  215. data/lib/bundler/vendored_persistent.rb +45 -4
  216. data/lib/bundler/vendored_thor.rb +8 -5
  217. data/lib/bundler/version.rb +23 -1
  218. data/lib/bundler/version_ranges.rb +76 -0
  219. data/lib/bundler/vlad.rb +8 -2
  220. data/lib/bundler/worker.rb +39 -6
  221. data/lib/bundler/yaml_serializer.rb +90 -0
  222. data/man/bundle-add.1 +58 -0
  223. data/man/bundle-add.1.txt +52 -0
  224. data/man/bundle-add.ronn +40 -0
  225. data/man/bundle-binstubs.1 +40 -0
  226. data/man/bundle-binstubs.1.txt +48 -0
  227. data/man/bundle-binstubs.ronn +43 -0
  228. data/man/bundle-check.1 +31 -0
  229. data/man/bundle-check.1.txt +33 -0
  230. data/man/bundle-check.ronn +26 -0
  231. data/man/bundle-clean.1 +24 -0
  232. data/man/bundle-clean.1.txt +26 -0
  233. data/man/bundle-clean.ronn +18 -0
  234. data/man/bundle-config.1 +497 -0
  235. data/man/bundle-config.1.txt +529 -0
  236. data/man/bundle-config.ronn +256 -31
  237. data/man/bundle-doctor.1 +44 -0
  238. data/man/bundle-doctor.1.txt +44 -0
  239. data/man/bundle-doctor.ronn +33 -0
  240. data/man/bundle-exec.1 +165 -0
  241. data/man/bundle-exec.1.txt +178 -0
  242. data/man/bundle-exec.ronn +19 -3
  243. data/man/bundle-gem.1 +80 -0
  244. data/man/bundle-gem.1.txt +91 -0
  245. data/man/bundle-gem.ronn +78 -0
  246. data/man/bundle-info.1 +20 -0
  247. data/man/bundle-info.1.txt +21 -0
  248. data/man/bundle-info.ronn +17 -0
  249. data/man/bundle-init.1 +25 -0
  250. data/man/bundle-init.1.txt +34 -0
  251. data/man/bundle-init.ronn +29 -0
  252. data/man/bundle-inject.1 +33 -0
  253. data/man/bundle-inject.1.txt +32 -0
  254. data/man/bundle-inject.ronn +22 -0
  255. data/man/bundle-install.1 +308 -0
  256. data/man/bundle-install.1.txt +396 -0
  257. data/man/bundle-install.ronn +64 -67
  258. data/man/bundle-list.1 +50 -0
  259. data/man/bundle-list.1.txt +43 -0
  260. data/man/bundle-list.ronn +33 -0
  261. data/man/bundle-lock.1 +84 -0
  262. data/man/bundle-lock.1.txt +93 -0
  263. data/man/bundle-lock.ronn +94 -0
  264. data/man/bundle-open.1 +32 -0
  265. data/man/bundle-open.1.txt +29 -0
  266. data/man/bundle-open.ronn +19 -0
  267. data/man/bundle-outdated.1 +155 -0
  268. data/man/bundle-outdated.1.txt +131 -0
  269. data/man/bundle-outdated.ronn +111 -0
  270. data/man/bundle-package.1 +55 -0
  271. data/man/bundle-package.1.txt +79 -0
  272. data/man/bundle-package.ronn +14 -8
  273. data/man/bundle-platform.1 +61 -0
  274. data/man/bundle-platform.1.txt +57 -0
  275. data/man/bundle-platform.ronn +1 -1
  276. data/man/bundle-pristine.1 +34 -0
  277. data/man/bundle-pristine.1.txt +44 -0
  278. data/man/bundle-pristine.ronn +34 -0
  279. data/man/bundle-remove.1 +31 -0
  280. data/man/bundle-remove.1.txt +34 -0
  281. data/man/bundle-remove.ronn +23 -0
  282. data/man/bundle-show.1 +23 -0
  283. data/man/bundle-show.1.txt +27 -0
  284. data/man/bundle-show.ronn +21 -0
  285. data/man/bundle-update.1 +394 -0
  286. data/man/bundle-update.1.txt +391 -0
  287. data/man/bundle-update.ronn +180 -18
  288. data/man/bundle-viz.1 +39 -0
  289. data/man/bundle-viz.1.txt +39 -0
  290. data/man/bundle-viz.ronn +30 -0
  291. data/man/bundle.1 +136 -0
  292. data/man/bundle.1.txt +116 -0
  293. data/man/bundle.ronn +46 -33
  294. data/man/gemfile.5 +689 -0
  295. data/man/gemfile.5.ronn +127 -79
  296. data/man/gemfile.5.txt +653 -0
  297. data/man/index.txt +25 -7
  298. metadata +242 -95
  299. data/.gitignore +0 -16
  300. data/.rspec +0 -3
  301. data/.travis.yml +0 -110
  302. data/CODE_OF_CONDUCT.md +0 -40
  303. data/CONTRIBUTING.md +0 -32
  304. data/DEVELOPMENT.md +0 -119
  305. data/ISSUES.md +0 -96
  306. data/Rakefile +0 -302
  307. data/UPGRADING.md +0 -103
  308. data/bin/bundle +0 -21
  309. data/bin/bundler +0 -21
  310. data/lib/bundler/anonymizable_uri.rb +0 -32
  311. data/lib/bundler/environment.rb +0 -42
  312. data/lib/bundler/gem_installer.rb +0 -9
  313. data/lib/bundler/gem_path_manipulation.rb +0 -8
  314. data/lib/bundler/ssl_certs/AddTrustExternalCARoot.pem +0 -32
  315. data/lib/bundler/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  316. data/lib/bundler/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  317. data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  318. data/lib/bundler/templates/newgem/.travis.yml.tt +0 -3
  319. data/lib/bundler/templates/newgem/test/minitest_helper.rb.tt +0 -4
  320. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo.rb +0 -5
  321. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/dependency_graph.rb +0 -266
  322. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/errors.rb +0 -69
  323. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/gem_metadata.rb +0 -3
  324. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/resolution.rb +0 -412
  325. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/state.rb +0 -43
  326. data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/io_binary_read.rb +0 -10
  327. data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/ordered_hash.rb +0 -98
  328. data/lib/bundler/vendor/thor-0.19.1/lib/thor/parser.rb +0 -4
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  class CLI::Package
3
5
  attr_reader :options
@@ -8,22 +10,22 @@ module Bundler
8
10
 
9
11
  def run
10
12
  Bundler.ui.level = "error" if options[:quiet]
11
- Bundler.settings[:path] = File.expand_path(options[:path]) if options[:path]
12
- Bundler.settings[:cache_all_platforms] = options["all-platforms"] if options.key?("all-platforms")
13
- Bundler.settings[:cache_path] = options["cache-path"] if options.key?("cache-path")
13
+ Bundler.settings.set_command_option_if_given :path, options[:path]
14
+ Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
15
+ Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]
14
16
 
15
17
  setup_cache_all
16
18
  install
17
19
 
18
20
  # TODO: move cache contents here now that all bundles are locked
19
- custom_path = Pathname.new(options[:path]) if options[:path]
21
+ custom_path = Bundler.settings[:path] if options[:path]
20
22
  Bundler.load.cache(custom_path)
21
23
  end
22
24
 
23
25
  private
24
26
 
25
27
  def install
26
- require 'bundler/cli/install'
28
+ require "bundler/cli/install"
27
29
  options = self.options.dup
28
30
  if Bundler.settings[:cache_all_platforms]
29
31
  options["local"] = false
@@ -33,9 +35,11 @@ module Bundler
33
35
  end
34
36
 
35
37
  def setup_cache_all
36
- Bundler.settings[:cache_all] = options[:all] if options.key?("all")
38
+ all = options.fetch(:all, Bundler.feature_flag.cache_command_is_package? || nil)
39
+
40
+ Bundler.settings.set_command_option_if_given :cache_all, all
37
41
 
38
- if Bundler.definition.has_local_dependencies? && !Bundler.settings[:cache_all]
42
+ if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
39
43
  Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
40
44
  "to package them as well, please pass the --all flag. This will be the default " \
41
45
  "on Bundler 2.0."
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  class CLI::Platform
3
5
  attr_reader :options
@@ -7,8 +9,10 @@ module Bundler
7
9
 
8
10
  def run
9
11
  platforms, ruby_version = Bundler.ui.silence do
10
- [ Bundler.definition.platforms.map {|p| "* #{p}" },
11
- Bundler.definition.ruby_version ]
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]
12
16
  end
13
17
  output = []
14
18
 
@@ -26,7 +30,7 @@ module Bundler
26
30
  output << "Your Gemfile specifies a Ruby version requirement:\n* #{ruby_version}"
27
31
 
28
32
  begin
29
- Bundler.definition.validate_ruby!
33
+ Bundler.definition.validate_runtime!
30
34
  output << "Your current platform satisfies the Ruby version requirement."
31
35
  rescue RubyVersionMismatch => e
32
36
  output << e.message
@@ -38,6 +42,5 @@ module Bundler
38
42
 
39
43
  Bundler.ui.info output.join("\n\n")
40
44
  end
41
-
42
45
  end
43
46
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/vendored_thor"
4
+ module Bundler
5
+ class CLI::Plugin < Thor
6
+ desc "install PLUGINS", "Install the plugin from the source"
7
+ long_desc <<-D
8
+ Install plugins either from the rubygems source provided (with --source option) or from a git source provided with (--git option). If no sources are provided, it uses Gem.sources
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 "branch", :type => :string, :default => nil, :banner =>
17
+ "The git branch to checkout"
18
+ method_option "ref", :type => :string, :default => nil, :banner =>
19
+ "The git revision to check out"
20
+ def install(*plugins)
21
+ Bundler::Plugin.install(plugins, options)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Pristine
5
+ def initialize(gems)
6
+ @gems = gems
7
+ end
8
+
9
+ def run
10
+ CLI::Common.ensure_all_gems_in_lockfile!(@gems)
11
+ definition = Bundler.definition
12
+ definition.validate_runtime!
13
+ installer = Bundler::Installer.new(Bundler.root, definition)
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.")
27
+ next
28
+ end
29
+
30
+ FileUtils.rm_rf spec.full_gem_path
31
+ when Source::Git
32
+ source.remote!
33
+ if extension_cache_path = source.extension_cache_path(spec)
34
+ FileUtils.rm_rf extension_cache_path
35
+ end
36
+ FileUtils.rm_rf spec.extension_dir if spec.respond_to?(:extension_dir)
37
+ FileUtils.rm_rf spec.full_gem_path
38
+ else
39
+ Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
40
+ next
41
+ end
42
+
43
+ Bundler::GemInstaller.new(spec, installer, false, 0, true).install_from_spec
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Remove
5
+ def initialize(gems, options)
6
+ @gems = gems
7
+ @options = options
8
+ end
9
+
10
+ def run
11
+ raise InvalidOption, "Please specify gems to remove." if @gems.empty?
12
+
13
+ Injector.remove(@gems, {})
14
+
15
+ Installer.install(Bundler.root, Bundler.definition) if @options["install"]
16
+ end
17
+ end
18
+ end
@@ -1,4 +1,4 @@
1
- require 'bundler/cli/common'
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Bundler
4
4
  class CLI::Show
@@ -12,7 +12,7 @@ module Bundler
12
12
 
13
13
  def run
14
14
  Bundler.ui.silence do
15
- Bundler.definition.validate_ruby!
15
+ Bundler.definition.validate_runtime!
16
16
  Bundler.load.lock
17
17
  end
18
18
 
@@ -23,7 +23,7 @@ module Bundler
23
23
  spec = Bundler::CLI::Common.select_spec(gem_name, :regex_match)
24
24
  return unless spec
25
25
  path = spec.full_gem_path
26
- if !File.directory?(path)
26
+ unless File.directory?(path)
27
27
  Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at:"
28
28
  end
29
29
  end
@@ -31,19 +31,19 @@ module Bundler
31
31
  end
32
32
 
33
33
  if options[:paths]
34
- Bundler.load.specs.sort_by { |s| s.name }.map do |s|
34
+ Bundler.load.specs.sort_by(&:name).map do |s|
35
35
  Bundler.ui.info s.full_gem_path
36
36
  end
37
37
  else
38
38
  Bundler.ui.info "Gems included by the bundle:"
39
- Bundler.load.specs.sort_by { |s| s.name }.each do |s|
39
+ Bundler.load.specs.sort_by(&:name).each do |s|
40
40
  desc = " * #{s.name} (#{s.version}#{s.git_version})"
41
41
  if @verbose
42
- latest = latest_specs.find { |l| l.name == s.name }
43
- Bundler.ui.info <<-END.gsub(/^ +/, '')
42
+ latest = latest_specs.find {|l| l.name == s.name }
43
+ Bundler.ui.info <<-END.gsub(/^ +/, "")
44
44
  #{desc}
45
- \tSummary: #{s.summary || 'No description available.'}
46
- \tHomepage: #{s.homepage || 'No website available.'}
45
+ \tSummary: #{s.summary || "No description available."}
46
+ \tHomepage: #{s.homepage || "No website available."}
47
47
  \tStatus: #{outdated?(s, latest) ? "Outdated - #{s.version} < #{latest.version}" : "Up to date"}
48
48
  END
49
49
  else
@@ -53,7 +53,7 @@ module Bundler
53
53
  end
54
54
  end
55
55
 
56
- private
56
+ private
57
57
 
58
58
  def fetch_latest_specs
59
59
  definition = Bundler.definition(true)
@@ -63,6 +63,7 @@ module Bundler
63
63
  else
64
64
  definition.resolve_with_cache!
65
65
  end
66
+ Bundler.reset!
66
67
  definition.specs
67
68
  end
68
69
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  class CLI::Update
3
5
  attr_reader :options, :gems
@@ -9,10 +11,23 @@ module Bundler
9
11
  def run
10
12
  Bundler.ui.level = "error" if options[:quiet]
11
13
 
14
+ Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
15
+
12
16
  sources = Array(options[:source])
13
17
  groups = Array(options[:group]).map(&:to_sym)
14
18
 
15
- if gems.empty? && sources.empty? && groups.empty?
19
+ full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !options[:bundler]
20
+
21
+ if full_update && !options[:all]
22
+ if Bundler.feature_flag.update_requires_all_flag?
23
+ raise InvalidOption, "To update everything, pass the `--all` flag."
24
+ end
25
+ SharedHelpers.major_deprecation 2, "Pass --all to `bundle update` to update everything"
26
+ elsif !full_update && options[:all]
27
+ raise InvalidOption, "Cannot specify --all along with specific options."
28
+ end
29
+
30
+ if full_update
16
31
  # We're doing a full update
17
32
  Bundler.definition(true)
18
33
  else
@@ -20,54 +35,57 @@ module Bundler
20
35
  raise GemfileLockNotFound, "This Bundle hasn't been installed yet. " \
21
36
  "Run `bundle install` to update and install the bundled gems."
22
37
  end
23
- # cycle through the requested gems, just to make sure they exist
24
- names = Bundler.locked_gems.specs.map{ |s| s.name }
25
- gems.each do |g|
26
- next if names.include?(g)
27
- require "bundler/cli/common"
28
- raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(g, names)
29
- end
38
+ Bundler::CLI::Common.ensure_all_gems_in_lockfile!(gems)
30
39
 
31
40
  if groups.any?
32
- specs = Bundler.definition.specs_for groups
33
- sources.concat(specs.map(&:name))
41
+ deps = Bundler.definition.dependencies.select {|d| (d.groups & groups).any? }
42
+ gems.concat(deps.map(&:name))
34
43
  end
35
44
 
36
- Bundler.definition(:gems => gems, :sources => sources)
45
+ Bundler.definition(:gems => gems, :sources => sources, :ruby => options[:ruby],
46
+ :lock_shared_dependencies => options[:conservative],
47
+ :bundler => options[:bundler])
37
48
  end
38
49
 
50
+ Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)
51
+
39
52
  Bundler::Fetcher.disable_endpoint = options["full-index"]
40
53
 
41
54
  opts = options.dup
42
55
  opts["update"] = true
43
56
  opts["local"] = options[:local]
44
57
 
45
- Bundler.settings[:jobs] = opts["jobs"] if opts["jobs"]
46
-
47
- # rubygems plugins sometimes hook into the gem install process
48
- Gem.load_env_plugins if Gem.respond_to?(:load_env_plugins)
58
+ Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]
49
59
 
50
- Bundler.definition.validate_ruby!
51
- Installer.install Bundler.root, Bundler.definition, opts
60
+ Bundler.definition.validate_runtime!
61
+ installer = Installer.install Bundler.root, Bundler.definition, opts
52
62
  Bundler.load.cache if Bundler.app_cache.exist?
53
63
 
54
- if Bundler.settings[:clean] && Bundler.settings[:path]
64
+ if CLI::Common.clean_after_install?
55
65
  require "bundler/cli/clean"
56
66
  Bundler::CLI::Clean.new(options).run
57
67
  end
58
68
 
59
- Bundler.ui.confirm "Bundle updated!"
60
- without_groups_messages
61
- end
62
-
63
- private
64
-
65
- def without_groups_messages
66
- if Bundler.settings.without.any?
67
- require "bundler/cli/common"
68
- Bundler.ui.confirm Bundler::CLI::Common.without_groups_message
69
+ if locked_gems = Bundler.definition.locked_gems
70
+ gems.each do |name|
71
+ locked_version = locked_gems.specs.find {|s| s.name == name }
72
+ locked_version &&= locked_version.version
73
+ next unless locked_version
74
+ new_version = Bundler.definition.specs[name].first
75
+ new_version &&= new_version.version
76
+ if !new_version
77
+ Bundler.ui.warn "Bundler attempted to update #{name} but it was removed from the bundle"
78
+ elsif new_version < locked_version
79
+ Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
80
+ elsif new_version == locked_version
81
+ Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
82
+ end
83
+ end
69
84
  end
70
- end
71
85
 
86
+ Bundler.ui.confirm "Bundle updated!"
87
+ Bundler::CLI::Common.output_without_groups_message
88
+ Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
89
+ end
72
90
  end
73
91
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  class CLI::Viz
3
5
  attr_reader :options, :gem_name
@@ -6,8 +8,14 @@ module Bundler
6
8
  end
7
9
 
8
10
  def run
9
- require 'graphviz'
11
+ # make sure we get the right `graphviz`. There is also a `graphviz`
12
+ # gem we're not built to support
13
+ gem "ruby-graphviz"
14
+ require "graphviz"
15
+
16
+ options[:without] = options[:without].join(":").tr(" ", ":").split(":")
10
17
  output_file = File.expand_path(options[:file])
18
+
11
19
  graph = Graph.new(Bundler.load, output_file, options[:version], options[:requirements], options[:format], options[:without])
12
20
  graph.viz
13
21
  rescue LoadError => e
@@ -15,13 +23,9 @@ module Bundler
15
23
  Bundler.ui.warn "Make sure you have the graphviz ruby gem. You can install it with:"
16
24
  Bundler.ui.warn "`gem install ruby-graphviz`"
17
25
  rescue StandardError => e
18
- if e.message =~ /GraphViz not installed or dot not in PATH/
19
- Bundler.ui.error e.message
20
- Bundler.ui.warn "Please install GraphViz. On a Mac with homebrew, you can run `brew install graphviz`."
21
- else
22
- raise
23
- end
26
+ raise unless e.message =~ /GraphViz not installed or dot not in PATH/
27
+ Bundler.ui.error e.message
28
+ Bundler.ui.warn "Please install GraphViz. On a Mac with Homebrew, you can run `brew install graphviz`."
24
29
  end
25
-
26
30
  end
27
31
  end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "set"
5
+
6
+ module Bundler
7
+ class CompactIndexClient
8
+ DEBUG_MUTEX = Mutex.new
9
+ def self.debug
10
+ return unless ENV["DEBUG_COMPACT_INDEX"]
11
+ DEBUG_MUTEX.synchronize { warn("[#{self}] #{yield}") }
12
+ end
13
+
14
+ class Error < StandardError; end
15
+
16
+ require "bundler/compact_index_client/cache"
17
+ require "bundler/compact_index_client/updater"
18
+
19
+ attr_reader :directory
20
+
21
+ # @return [Lambda] A lambda that takes an array of inputs and a block, and
22
+ # maps the inputs with the block in parallel.
23
+ #
24
+ attr_accessor :in_parallel
25
+
26
+ def initialize(directory, fetcher)
27
+ @directory = Pathname.new(directory)
28
+ @updater = Updater.new(fetcher)
29
+ @cache = Cache.new(@directory)
30
+ @endpoints = Set.new
31
+ @info_checksums_by_name = {}
32
+ @parsed_checksums = false
33
+ @mutex = Mutex.new
34
+ @in_parallel = lambda do |inputs, &blk|
35
+ inputs.map(&blk)
36
+ end
37
+ end
38
+
39
+ def names
40
+ Bundler::CompactIndexClient.debug { "/names" }
41
+ update(@cache.names_path, "names")
42
+ @cache.names
43
+ end
44
+
45
+ def versions
46
+ Bundler::CompactIndexClient.debug { "/versions" }
47
+ update(@cache.versions_path, "versions")
48
+ versions, @info_checksums_by_name = @cache.versions
49
+ versions
50
+ end
51
+
52
+ def dependencies(names)
53
+ Bundler::CompactIndexClient.debug { "dependencies(#{names})" }
54
+ in_parallel.call(names) do |name|
55
+ update_info(name)
56
+ @cache.dependencies(name).map {|d| d.unshift(name) }
57
+ end.flatten(1)
58
+ end
59
+
60
+ def spec(name, version, platform = nil)
61
+ Bundler::CompactIndexClient.debug { "spec(name = #{name}, version = #{version}, platform = #{platform})" }
62
+ update_info(name)
63
+ @cache.specific_dependency(name, version, platform)
64
+ end
65
+
66
+ def update_and_parse_checksums!
67
+ Bundler::CompactIndexClient.debug { "update_and_parse_checksums!" }
68
+ return @info_checksums_by_name if @parsed_checksums
69
+ update(@cache.versions_path, "versions")
70
+ @info_checksums_by_name = @cache.checksums
71
+ @parsed_checksums = true
72
+ end
73
+
74
+ private
75
+
76
+ def update(local_path, remote_path)
77
+ Bundler::CompactIndexClient.debug { "update(#{local_path}, #{remote_path})" }
78
+ unless synchronize { @endpoints.add?(remote_path) }
79
+ Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" }
80
+ return
81
+ end
82
+ @updater.update(local_path, url(remote_path))
83
+ end
84
+
85
+ def update_info(name)
86
+ Bundler::CompactIndexClient.debug { "update_info(#{name})" }
87
+ path = @cache.info_path(name)
88
+ checksum = @updater.checksum_for_file(path)
89
+ unless existing = @info_checksums_by_name[name]
90
+ Bundler::CompactIndexClient.debug { "skipping updating info for #{name} since it is missing from versions" }
91
+ return
92
+ end
93
+ if checksum == existing
94
+ Bundler::CompactIndexClient.debug { "skipping updating info for #{name} since the versions checksum matches the local checksum" }
95
+ return
96
+ end
97
+ Bundler::CompactIndexClient.debug { "updating info for #{name} since the versions checksum #{existing} != the local checksum #{checksum}" }
98
+ update(path, "info/#{name}")
99
+ end
100
+
101
+ def url(path)
102
+ path
103
+ end
104
+
105
+ def synchronize
106
+ @mutex.synchronize { yield }
107
+ end
108
+ end
109
+ end