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
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rbconfig"
4
+
5
+ module Bundler
6
+ class CLI::Issue
7
+ def run
8
+ Bundler.ui.info <<-EOS.gsub(/^ {8}/, "")
9
+ Did you find an issue with Bundler? Before filing a new issue,
10
+ be sure to check out these resources:
11
+
12
+ 1. Check out our troubleshooting guide for quick fixes to common issues:
13
+ https://github.com/bundler/bundler/blob/master/doc/TROUBLESHOOTING.md
14
+
15
+ 2. Instructions for common Bundler uses can be found on the documentation
16
+ site: http://bundler.io/
17
+
18
+ 3. Information about each Bundler command can be found in the Bundler
19
+ man pages: http://bundler.io/man/bundle.1.html
20
+
21
+ Hopefully the troubleshooting steps above resolved your problem! If things
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/bundler/bundler/blob/master/doc/contributing/ISSUES.md
26
+
27
+ EOS
28
+
29
+ Bundler.ui.info Bundler::Env.report
30
+
31
+ Bundler.ui.info "\n## Bundle Doctor"
32
+ doctor
33
+ end
34
+
35
+ def doctor
36
+ require "bundler/cli/doctor"
37
+ Bundler::CLI::Doctor.new({}).run
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::List
5
+ def initialize(options)
6
+ @options = options
7
+ end
8
+
9
+ def run
10
+ raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @options["only-group"] && @options["without-group"]
11
+
12
+ raise InvalidOption, "The `--name-only` and `--paths` options cannot be used together" if @options["name-only"] && @options[:paths]
13
+
14
+ specs = if @options["only-group"] || @options["without-group"]
15
+ filtered_specs_by_groups
16
+ else
17
+ Bundler.load.specs
18
+ end.reject {|s| s.name == "bundler" }.sort_by(&:name)
19
+
20
+ return Bundler.ui.info "No gems in the Gemfile" if specs.empty?
21
+
22
+ return specs.each {|s| Bundler.ui.info s.name } if @options["name-only"]
23
+ return specs.each {|s| Bundler.ui.info s.full_gem_path } if @options["paths"]
24
+
25
+ Bundler.ui.info "Gems included by the bundle:"
26
+
27
+ specs.each {|s| Bundler.ui.info " * #{s.name} (#{s.version}#{s.git_version})" }
28
+
29
+ Bundler.ui.info "Use `bundle info` to print more detailed information about a gem"
30
+ end
31
+
32
+ private
33
+
34
+ def verify_group_exists(groups)
35
+ raise InvalidOption, "`#{@options["without-group"]}` group could not be found." if @options["without-group"] && !groups.include?(@options["without-group"].to_sym)
36
+
37
+ raise InvalidOption, "`#{@options["only-group"]}` group could not be found." if @options["only-group"] && !groups.include?(@options["only-group"].to_sym)
38
+ end
39
+
40
+ def filtered_specs_by_groups
41
+ definition = Bundler.definition
42
+ groups = definition.groups
43
+
44
+ verify_group_exists(groups)
45
+
46
+ show_groups =
47
+ if @options["without-group"]
48
+ groups.reject {|g| g == @options["without-group"].to_sym }
49
+ elsif @options["only-group"]
50
+ groups.select {|g| g == @options["only-group"].to_sym }
51
+ else
52
+ groups
53
+ end.map(&:to_sym)
54
+
55
+ definition.specs_for(show_groups)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Lock
5
+ attr_reader :options
6
+
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ unless Bundler.default_gemfile
13
+ Bundler.ui.error "Unable to find a Gemfile to lock"
14
+ exit 1
15
+ end
16
+
17
+ print = options[:print]
18
+ ui = Bundler.ui
19
+ Bundler.ui = UI::Silent.new if print
20
+
21
+ Bundler::Fetcher.disable_endpoint = options["full-index"]
22
+
23
+ update = options[:update]
24
+ if update.is_a?(Array) # unlocking specific gems
25
+ Bundler::CLI::Common.ensure_all_gems_in_lockfile!(update)
26
+ update = { :gems => update, :lock_shared_dependencies => options[:conservative] }
27
+ end
28
+ definition = Bundler.definition(update)
29
+
30
+ Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options) if options[:update]
31
+
32
+ options["remove-platform"].each do |platform|
33
+ definition.remove_platform(platform)
34
+ end
35
+
36
+ options["add-platform"].each do |platform_string|
37
+ platform = Gem::Platform.new(platform_string)
38
+ if platform.to_s == "unknown"
39
+ Bundler.ui.warn "The platform `#{platform_string}` is unknown to RubyGems " \
40
+ "and adding it will likely lead to resolution errors"
41
+ end
42
+ definition.add_platform(platform)
43
+ end
44
+
45
+ if definition.platforms.empty?
46
+ raise InvalidOption, "Removing all platforms from the bundle is not allowed"
47
+ end
48
+
49
+ definition.resolve_remotely! unless options[:local]
50
+
51
+ if print
52
+ puts definition.to_lock
53
+ else
54
+ file = options[:lockfile]
55
+ file = file ? File.expand_path(file) : Bundler.default_lockfile
56
+ puts "Writing lockfile to #{file}"
57
+ definition.lock(file)
58
+ end
59
+
60
+ Bundler.ui = ui
61
+ end
62
+ end
63
+ end
@@ -1,5 +1,6 @@
1
- require 'bundler/cli/common'
2
- require 'shellwords'
1
+ # frozen_string_literal: true
2
+
3
+ require "shellwords"
3
4
 
4
5
  module Bundler
5
6
  class CLI::Open
@@ -10,14 +11,16 @@ module Bundler
10
11
  end
11
12
 
12
13
  def run
13
- editor = [ENV['BUNDLER_EDITOR'], ENV['VISUAL'], ENV['EDITOR']].find{|e| !e.nil? && !e.empty? }
14
+ editor = [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? }
14
15
  return Bundler.ui.info("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") unless editor
15
- path = Bundler::CLI::Common.select_spec(name, :regex_match).full_gem_path
16
+ return unless spec = Bundler::CLI::Common.select_spec(name, :regex_match)
17
+ path = spec.full_gem_path
16
18
  Dir.chdir(path) do
17
19
  command = Shellwords.split(editor) + [path]
18
- system(*command) || Bundler.ui.info("Could not run '#{command.join(' ')}'")
20
+ Bundler.with_original_env do
21
+ system(*command)
22
+ end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
19
23
  end
20
24
  end
21
-
22
25
  end
23
26
  end
@@ -1,80 +1,266 @@
1
- require 'bundler/cli/common'
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Bundler
4
4
  class CLI::Outdated
5
5
  attr_reader :options, :gems
6
+
6
7
  def initialize(options, gems)
7
8
  @options = options
8
9
  @gems = gems
9
10
  end
10
11
 
11
12
  def run
13
+ check_for_deployment_mode
14
+
12
15
  sources = Array(options[:source])
13
16
 
14
17
  gems.each do |gem_name|
15
18
  Bundler::CLI::Common.select_spec(gem_name)
16
19
  end
17
20
 
18
- Bundler.definition.validate_ruby!
19
- current_specs = Bundler.ui.silence { Bundler.load.specs }
21
+ Bundler.definition.validate_runtime!
22
+ current_specs = Bundler.ui.silence { Bundler.definition.resolve }
20
23
  current_dependencies = {}
21
- Bundler.ui.silence { Bundler.load.dependencies.each { |dep| current_dependencies[dep.name] = dep } }
24
+ Bundler.ui.silence do
25
+ Bundler.load.dependencies.each do |dep|
26
+ current_dependencies[dep.name] = dep
27
+ end
28
+ end
22
29
 
23
- if gems.empty? && sources.empty?
30
+ definition = if gems.empty? && sources.empty?
24
31
  # We're doing a full update
25
- definition = Bundler.definition(true)
32
+ Bundler.definition(true)
26
33
  else
27
- definition = Bundler.definition(:gems => gems, :sources => sources)
34
+ Bundler.definition(:gems => gems, :sources => sources)
35
+ end
36
+
37
+ Bundler::CLI::Common.configure_gem_version_promoter(
38
+ Bundler.definition,
39
+ options
40
+ )
41
+
42
+ # the patch level options imply strict is also true. It wouldn't make
43
+ # sense otherwise.
44
+ strict = options[:strict] ||
45
+ Bundler::CLI::Common.patch_level_options(options).any?
46
+
47
+ filter_options_patch = options.keys &
48
+ %w[filter-major filter-minor filter-patch]
49
+
50
+ definition_resolution = proc do
51
+ options[:local] ? definition.resolve_with_cache! : definition.resolve_remotely!
52
+ end
53
+
54
+ if options[:parseable]
55
+ Bundler.ui.silence(&definition_resolution)
56
+ else
57
+ definition_resolution.call
28
58
  end
29
- options["local"] ? definition.resolve_with_cache! : definition.resolve_remotely!
30
59
 
31
60
  Bundler.ui.info ""
61
+ outdated_gems_by_groups = {}
62
+ outdated_gems_list = []
32
63
 
33
- out_count = 0
34
64
  # Loop through the current specs
35
- gemfile_specs, dependency_specs = current_specs.partition { |spec| current_dependencies.has_key? spec.name }
36
- [gemfile_specs.sort_by(&:name), dependency_specs.sort_by(&:name)].flatten.each do |current_spec|
65
+ gemfile_specs, dependency_specs = current_specs.partition do |spec|
66
+ current_dependencies.key? spec.name
67
+ end
68
+
69
+ specs = if options["only-explicit"]
70
+ gemfile_specs
71
+ else
72
+ gemfile_specs + dependency_specs
73
+ end
74
+
75
+ specs.sort_by(&:name).each do |current_spec|
37
76
  next if !gems.empty? && !gems.include?(current_spec.name)
38
77
 
39
78
  dependency = current_dependencies[current_spec.name]
79
+ active_spec = retrieve_active_spec(strict, definition, current_spec)
40
80
 
41
- if options["strict"]
42
- active_spec = definition.specs.detect { |spec| spec.name == current_spec.name }
43
- else
44
- active_spec = definition.index[current_spec.name].sort_by { |b| b.version }
45
- if !current_spec.version.prerelease? && !options[:pre] && active_spec.size > 1
46
- active_spec = active_spec.delete_if { |b| b.respond_to?(:version) && b.version.prerelease? }
47
- end
48
- active_spec = active_spec.last
49
- end
50
81
  next if active_spec.nil?
82
+ if filter_options_patch.any?
83
+ update_present = update_present_via_semver_portions(current_spec, active_spec, options)
84
+ next unless update_present
85
+ end
51
86
 
52
87
  gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version)
53
- git_outdated = current_spec.git_version != active_spec.git_version
54
- if gem_outdated || git_outdated
55
- if out_count == 0
56
- if options["pre"]
57
- Bundler.ui.info "Outdated gems included in the bundle (including pre-releases):"
88
+ next unless gem_outdated || (current_spec.git_version != active_spec.git_version)
89
+ groups = nil
90
+ if dependency && !options[:parseable]
91
+ groups = dependency.groups.join(", ")
92
+ end
93
+
94
+ outdated_gems_list << { :active_spec => active_spec,
95
+ :current_spec => current_spec,
96
+ :dependency => dependency,
97
+ :groups => groups }
98
+
99
+ outdated_gems_by_groups[groups] ||= []
100
+ outdated_gems_by_groups[groups] << { :active_spec => active_spec,
101
+ :current_spec => current_spec,
102
+ :dependency => dependency,
103
+ :groups => groups }
104
+ end
105
+
106
+ if outdated_gems_list.empty?
107
+ display_nothing_outdated_message(filter_options_patch)
108
+ else
109
+ unless options[:parseable]
110
+ if options[:pre]
111
+ Bundler.ui.info "Outdated gems included in the bundle (including " \
112
+ "pre-releases):"
113
+ else
114
+ Bundler.ui.info "Outdated gems included in the bundle:"
115
+ end
116
+ end
117
+
118
+ options_include_groups = [:group, :groups].select do |v|
119
+ options.keys.include?(v.to_s)
120
+ end
121
+
122
+ if options_include_groups.any?
123
+ ordered_groups = outdated_gems_by_groups.keys.compact.sort
124
+ [nil, ordered_groups].flatten.each do |groups|
125
+ gems = outdated_gems_by_groups[groups]
126
+ contains_group = if groups
127
+ groups.split(",").include?(options[:group])
58
128
  else
59
- Bundler.ui.info "Outdated gems included in the bundle:"
129
+ options[:group] == "group"
130
+ end
131
+
132
+ next if (!options[:groups] && !contains_group) || gems.nil?
133
+
134
+ unless options[:parseable]
135
+ if groups
136
+ Bundler.ui.info "===== Group #{groups} ====="
137
+ else
138
+ Bundler.ui.info "===== Without group ====="
139
+ end
140
+ end
141
+
142
+ gems.each do |gem|
143
+ print_gem(
144
+ gem[:current_spec],
145
+ gem[:active_spec],
146
+ gem[:dependency],
147
+ groups,
148
+ options_include_groups.any?
149
+ )
60
150
  end
61
151
  end
152
+ else
153
+ outdated_gems_list.each do |gem|
154
+ print_gem(
155
+ gem[:current_spec],
156
+ gem[:active_spec],
157
+ gem[:dependency],
158
+ gem[:groups],
159
+ options_include_groups.any?
160
+ )
161
+ end
162
+ end
163
+
164
+ exit 1
165
+ end
166
+ end
167
+
168
+ private
62
169
 
63
- spec_version = "#{active_spec.version}#{active_spec.git_version}"
64
- current_version = "#{current_spec.version}#{current_spec.git_version}"
65
- dependency_version = %|Gemfile specifies "#{dependency.requirement}"| if dependency && dependency.specific?
66
- Bundler.ui.info " * #{active_spec.name} (#{spec_version} > #{current_version}) #{dependency_version}".rstrip
67
- out_count += 1
170
+ def retrieve_active_spec(strict, definition, current_spec)
171
+ if strict
172
+ active_spec = definition.find_resolved_spec(current_spec)
173
+ else
174
+ active_specs = definition.find_indexed_specs(current_spec)
175
+ if !current_spec.version.prerelease? && !options[:pre] && active_specs.size > 1
176
+ active_specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? }
68
177
  end
69
- Bundler.ui.debug "from #{active_spec.loaded_from}"
178
+ active_spec = active_specs.last
179
+ end
180
+
181
+ active_spec
182
+ end
183
+
184
+ def display_nothing_outdated_message(filter_options_patch)
185
+ unless options[:parseable]
186
+ if filter_options_patch.any?
187
+ display = filter_options_patch.map do |o|
188
+ o.sub("filter-", "")
189
+ end.join(" or ")
190
+
191
+ Bundler.ui.info "No #{display} updates to display.\n"
192
+ else
193
+ Bundler.ui.info "Bundle up to date!\n"
194
+ end
195
+ end
196
+ end
197
+
198
+ def print_gem(current_spec, active_spec, dependency, groups, options_include_groups)
199
+ spec_version = "#{active_spec.version}#{active_spec.git_version}"
200
+ spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from
201
+ current_version = "#{current_spec.version}#{current_spec.git_version}"
202
+
203
+ if dependency && dependency.specific?
204
+ dependency_version = %(, requested #{dependency.requirement})
70
205
  end
71
206
 
72
- if out_count.zero?
73
- Bundler.ui.info "Bundle up to date!\n"
207
+ spec_outdated_info = "#{active_spec.name} (newest #{spec_version}, " \
208
+ "installed #{current_version}#{dependency_version})"
209
+
210
+ output_message = if options[:parseable]
211
+ spec_outdated_info.to_s
212
+ elsif options_include_groups || !groups
213
+ " * #{spec_outdated_info}"
74
214
  else
75
- exit 1
215
+ " * #{spec_outdated_info} in groups \"#{groups}\""
216
+ end
217
+
218
+ Bundler.ui.info output_message.rstrip
219
+ end
220
+
221
+ def check_for_deployment_mode
222
+ return unless Bundler.frozen_bundle?
223
+ suggested_command = if Bundler.settings.locations("frozen")[:global]
224
+ "bundle config --delete frozen"
225
+ elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
226
+ "bundle config --delete deployment"
227
+ else
228
+ "bundle install --no-deployment"
229
+ end
230
+ raise ProductionError, "You are trying to check outdated gems in " \
231
+ "deployment mode. Run `bundle outdated` elsewhere.\n" \
232
+ "\nIf this is a development machine, remove the " \
233
+ "#{Bundler.default_gemfile} freeze" \
234
+ "\nby running `#{suggested_command}`."
235
+ end
236
+
237
+ def update_present_via_semver_portions(current_spec, active_spec, options)
238
+ current_major = current_spec.version.segments.first
239
+ active_major = active_spec.version.segments.first
240
+
241
+ update_present = false
242
+ update_present = active_major > current_major if options["filter-major"]
243
+
244
+ if !update_present && (options["filter-minor"] || options["filter-patch"]) && current_major == active_major
245
+ current_minor = get_version_semver_portion_value(current_spec, 1)
246
+ active_minor = get_version_semver_portion_value(active_spec, 1)
247
+
248
+ update_present = active_minor > current_minor if options["filter-minor"]
249
+
250
+ if !update_present && options["filter-patch"] && current_minor == active_minor
251
+ current_patch = get_version_semver_portion_value(current_spec, 2)
252
+ active_patch = get_version_semver_portion_value(active_spec, 2)
253
+
254
+ update_present = active_patch > current_patch
255
+ end
76
256
  end
257
+
258
+ update_present
77
259
  end
78
260
 
261
+ def get_version_semver_portion_value(spec, version_portion_index)
262
+ version_section = spec.version.segments[version_portion_index, 1]
263
+ version_section.nil? ? 0 : (version_section.first || 0)
264
+ end
79
265
  end
80
266
  end