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,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Add
5
+ def initialize(options, gems)
6
+ @gems = gems
7
+ @options = options
8
+ @options[:group] = @options[:group].split(",").map(&:strip) if !@options[:group].nil? && !@options[:group].empty?
9
+ end
10
+
11
+ def run
12
+ raise InvalidOption, "You can not specify `--strict` and `--optimistic` at the same time." if @options[:strict] && @options[:optimistic]
13
+
14
+ # raise error when no gems are specified
15
+ raise InvalidOption, "Please specify gems to add." if @gems.empty?
16
+
17
+ version = @options[:version].nil? ? nil : @options[:version].split(",").map(&:strip)
18
+
19
+ unless version.nil?
20
+ version.each do |v|
21
+ raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN =~ v.to_s
22
+ end
23
+ end
24
+
25
+ dependencies = @gems.map {|g| Bundler::Dependency.new(g, version, @options) }
26
+
27
+ Injector.inject(dependencies,
28
+ :conservative_versioning => @options[:version].nil?, # Perform conservative versioning only when version is not specified
29
+ :optimistic => @options[:optimistic],
30
+ :strict => @options[:strict])
31
+
32
+ Installer.install(Bundler.root, Bundler.definition) unless @options["skip-install"]
33
+ end
34
+ end
35
+ 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::Binstubs
@@ -9,30 +9,41 @@ module Bundler
9
9
  end
10
10
 
11
11
  def run
12
- Bundler.definition.validate_ruby!
13
- Bundler.settings[:bin] = options["path"] if options["path"]
14
- Bundler.settings[:bin] = nil if options["path"] && options["path"].empty?
12
+ Bundler.definition.validate_runtime!
13
+ path_option = options["path"]
14
+ path_option = nil if path_option && path_option.empty?
15
+ Bundler.settings.set_command_option :bin, path_option if options["path"]
16
+ Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
15
17
  installer = Installer.new(Bundler.root, Bundler.definition)
16
18
 
17
- if gems.empty?
19
+ installer_opts = { :force => options[:force], :binstubs_cmd => true }
20
+
21
+ if options[:all]
22
+ raise InvalidOption, "Cannot specify --all with specific gems" unless gems.empty?
23
+ @gems = Bundler.definition.specs.map(&:name)
24
+ installer_opts.delete(:binstubs_cmd)
25
+ elsif gems.empty?
18
26
  Bundler.ui.error "`bundle binstubs` needs at least one gem to run."
19
27
  exit 1
20
28
  end
21
29
 
22
30
  gems.each do |gem_name|
23
- spec = installer.specs.find{|s| s.name == gem_name }
31
+ spec = Bundler.definition.specs.find {|s| s.name == gem_name }
24
32
  unless spec
25
33
  raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(
26
- gem_name, Bundler.definition.specs)
34
+ gem_name, Bundler.definition.specs
35
+ )
27
36
  end
28
37
 
29
- if spec.name == "bundler"
30
- Bundler.ui.warn "Sorry, Bundler can only be run via Rubygems."
38
+ if options[:standalone]
39
+ next Bundler.ui.warn("Sorry, Bundler can only be run via RubyGems.") if gem_name == "bundler"
40
+ Bundler.settings.temporary(:path => (Bundler.settings[:path] || Bundler.root)) do
41
+ installer.generate_standalone_bundler_executable_stubs(spec)
42
+ end
31
43
  else
32
- installer.generate_bundler_executable_stubs(spec, :force => options[:force], :binstubs_cmd => true)
44
+ installer.generate_bundler_executable_stubs(spec, installer_opts)
33
45
  end
34
46
  end
35
47
  end
36
-
37
48
  end
38
49
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  class CLI::Cache
3
5
  attr_reader :options
@@ -6,12 +8,12 @@ module Bundler
6
8
  end
7
9
 
8
10
  def run
9
- Bundler.definition.validate_ruby!
11
+ Bundler.definition.validate_runtime!
10
12
  Bundler.definition.resolve_with_cache!
11
13
  setup_cache_all
12
- Bundler.settings[:cache_all_platforms] = options["all-platforms"] if options.key?("all-platforms")
14
+ Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
13
15
  Bundler.load.cache
14
- Bundler.settings[:no_prune] = true if options["no-prune"]
16
+ Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
15
17
  Bundler.load.lock
16
18
  rescue GemNotFound => e
17
19
  Bundler.ui.error(e.message)
@@ -22,14 +24,13 @@ module Bundler
22
24
  private
23
25
 
24
26
  def setup_cache_all
25
- Bundler.settings[:cache_all] = options[:all] if options.key?("all")
27
+ Bundler.settings.set_command_option_if_given :cache_all, options[:all]
26
28
 
27
- if Bundler.definition.has_local_dependencies? && !Bundler.settings[:cache_all]
29
+ if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
28
30
  Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
29
31
  "to package them as well, please pass the --all flag. This will be the default " \
30
32
  "on Bundler 2.0."
31
33
  end
32
34
  end
33
-
34
35
  end
35
36
  end
@@ -1,35 +1,38 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  class CLI::Check
3
5
  attr_reader :options
6
+
4
7
  def initialize(options)
5
8
  @options = options
6
9
  end
7
10
 
8
11
  def run
9
- Bundler.settings[:path] = File.expand_path(options[:path]) if options[:path]
12
+ Bundler.settings.set_command_option_if_given :path, options[:path]
13
+
10
14
  begin
11
15
  definition = Bundler.definition
12
- definition.validate_ruby!
16
+ definition.validate_runtime!
13
17
  not_installed = definition.missing_specs
14
18
  rescue GemNotFound, VersionConflict
15
19
  Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies."
16
- Bundler.ui.warn "Install missing gems with `bundle install`."
20
+ Bundler.ui.warn "Install missing gems with `bundle install`."
17
21
  exit 1
18
22
  end
19
23
 
20
24
  if not_installed.any?
21
25
  Bundler.ui.error "The following gems are missing"
22
- not_installed.each { |s| Bundler.ui.error " * #{s.name} (#{s.version})" }
26
+ not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
23
27
  Bundler.ui.warn "Install missing gems with `bundle install`"
24
28
  exit 1
25
- elsif !Bundler.default_lockfile.exist? && Bundler.settings[:frozen]
26
- Bundler.ui.error "This bundle has been frozen, but there is no Gemfile.lock present"
29
+ elsif !Bundler.default_lockfile.file? && Bundler.frozen_bundle?
30
+ Bundler.ui.error "This bundle has been frozen, but there is no #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} present"
27
31
  exit 1
28
32
  else
29
- Bundler.load.lock unless options[:"dry-run"]
33
+ Bundler.load.lock(:preserve_unknown_sections => true) unless options[:"dry-run"]
30
34
  Bundler.ui.info "The Gemfile's dependencies are satisfied"
31
35
  end
32
36
  end
33
-
34
37
  end
35
38
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  class CLI::Clean
3
5
  attr_reader :options
@@ -7,20 +9,17 @@ module Bundler
7
9
  end
8
10
 
9
11
  def run
10
- require_path_or_force
12
+ require_path_or_force unless options[:"dry-run"]
11
13
  Bundler.load.clean(options[:"dry-run"])
12
14
  end
13
15
 
14
16
  protected
15
17
 
16
18
  def require_path_or_force
17
- if !Bundler.settings[:path] && !options[:force]
18
- Bundler.ui.error "Cleaning all the gems on your system is dangerous! " \
19
- "If you're sure you want to remove every system gem not in this " \
20
- "bundle, run `bundle clean --force`."
21
- exit 1
22
- end
19
+ return unless Bundler.use_system_gems? && !options[:force]
20
+ raise InvalidOption, "Cleaning all the gems on your system is dangerous! " \
21
+ "If you're sure you want to remove every system gem not in this " \
22
+ "bundle, run `bundle clean --force`."
23
23
  end
24
-
25
24
  end
26
25
  end
@@ -1,9 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  module CLI::Common
5
+ def self.output_post_install_messages(messages)
6
+ return if Bundler.settings["ignore_messages"]
7
+ messages.to_a.each do |name, msg|
8
+ print_post_install_message(name, msg) unless Bundler.settings["ignore_messages.#{name}"]
9
+ end
10
+ end
11
+
12
+ def self.print_post_install_message(name, msg)
13
+ Bundler.ui.confirm "Post-install message from #{name}:"
14
+ Bundler.ui.info msg
15
+ end
16
+
17
+ def self.output_without_groups_message
18
+ return if Bundler.settings[:without].empty?
19
+ Bundler.ui.confirm without_groups_message
20
+ end
21
+
3
22
  def self.without_groups_message
4
- groups = Bundler.settings.without
23
+ groups = Bundler.settings[:without]
5
24
  group_list = [groups[0...-1].join(", "), groups[-1..-1]].
6
- reject{|s| s.to_s.empty? }.join(" and ")
25
+ reject {|s| s.to_s.empty? }.join(" and ")
7
26
  group_str = (groups.size == 1) ? "group" : "groups"
8
27
  "Gems in the #{group_str} #{group_list} were not installed."
9
28
  end
@@ -30,27 +49,54 @@ module Bundler
30
49
  end
31
50
 
32
51
  def self.ask_for_spec_from(specs)
33
- if !$stdout.tty? && ENV['BUNDLE_SPEC_RUN'].nil?
52
+ if !$stdout.tty? && ENV["BUNDLE_SPEC_RUN"].nil?
34
53
  raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
35
54
  end
36
55
 
37
56
  specs.each_with_index do |spec, index|
38
57
  Bundler.ui.info "#{index.succ} : #{spec.name}", true
39
58
  end
40
- Bundler.ui.info '0 : - exit -', true
59
+ Bundler.ui.info "0 : - exit -", true
41
60
 
42
- num = Bundler.ui.ask('> ').to_i
61
+ num = Bundler.ui.ask("> ").to_i
43
62
  num > 0 ? specs[num - 1] : nil
44
63
  end
45
64
 
46
65
  def self.gem_not_found_message(missing_gem_name, alternatives)
47
- require 'bundler/similarity_detector'
66
+ require "bundler/similarity_detector"
48
67
  message = "Could not find gem '#{missing_gem_name}'."
49
- alternate_names = alternatives.map { |a| a.respond_to?(:name) ? a.name : a }
68
+ alternate_names = alternatives.map {|a| a.respond_to?(:name) ? a.name : a }
50
69
  suggestions = SimilarityDetector.new(alternate_names).similar_word_list(missing_gem_name)
51
70
  message += "\nDid you mean #{suggestions}?" if suggestions
52
71
  message
53
72
  end
54
73
 
74
+ def self.ensure_all_gems_in_lockfile!(names, locked_gems = Bundler.locked_gems)
75
+ locked_names = locked_gems.specs.map(&:name)
76
+ names.-(locked_names).each do |g|
77
+ raise GemNotFound, gem_not_found_message(g, locked_names)
78
+ end
79
+ end
80
+
81
+ def self.configure_gem_version_promoter(definition, options)
82
+ patch_level = patch_level_options(options)
83
+ raise InvalidOption, "Provide only one of the following options: #{patch_level.join(", ")}" unless patch_level.length <= 1
84
+ definition.gem_version_promoter.tap do |gvp|
85
+ gvp.level = patch_level.first || :major
86
+ gvp.strict = options[:strict] || options["update-strict"]
87
+ end
88
+ end
89
+
90
+ def self.patch_level_options(options)
91
+ [:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
92
+ end
93
+
94
+ def self.clean_after_install?
95
+ clean = Bundler.settings[:clean]
96
+ return clean unless clean.nil?
97
+ clean ||= Bundler.feature_flag.auto_clean_without_path? && Bundler.settings[:path].nil?
98
+ clean &&= !Bundler.use_system_gems?
99
+ clean
100
+ end
55
101
  end
56
102
  end
@@ -1,84 +1,119 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bundler
2
4
  class CLI::Config
3
- attr_reader :options, :thor
5
+ attr_reader :name, :options, :scope, :thor
4
6
  attr_accessor :args
5
7
 
6
8
  def initialize(options, args, thor)
7
9
  @options = options
8
10
  @args = args
9
11
  @thor = thor
12
+ @name = peek = args.shift
13
+ @scope = "global"
14
+ return unless peek && peek.start_with?("--")
15
+ @name = args.shift
16
+ @scope = peek[2..-1]
10
17
  end
11
18
 
12
19
  def run
13
- peek = args.shift
14
-
15
- if peek && peek =~ /^\-\-/
16
- name, scope = args.shift, $'
17
- else
18
- name, scope = peek, "global"
19
- end
20
-
21
20
  unless name
22
- Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
23
-
24
- Bundler.settings.all.each do |setting|
25
- Bundler.ui.confirm "#{setting}"
26
- thor.with_padding do
27
- Bundler.settings.pretty_values_for(setting).each do |line|
28
- Bundler.ui.info line
29
- end
30
- end
31
- Bundler.ui.confirm ""
32
- end
21
+ confirm_all
33
22
  return
34
23
  end
35
24
 
36
- case scope
37
- when "delete"
25
+ unless valid_scope?(scope)
26
+ Bundler.ui.error "Invalid scope --#{scope} given. Please use --local or --global."
27
+ exit 1
28
+ end
29
+
30
+ if scope == "delete"
38
31
  Bundler.settings.set_local(name, nil)
39
32
  Bundler.settings.set_global(name, nil)
40
- when "local", "global"
41
- if args.empty?
42
- Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
43
- thor.with_padding do
44
- Bundler.settings.pretty_values_for(name).each { |line| Bundler.ui.info line }
33
+ return
34
+ end
35
+
36
+ if args.empty?
37
+ if options[:parseable]
38
+ if value = Bundler.settings[name]
39
+ Bundler.ui.info("#{name}=#{value}")
45
40
  end
46
41
  return
47
42
  end
48
43
 
49
- locations = Bundler.settings.locations(name)
44
+ confirm(name)
45
+ return
46
+ end
50
47
 
51
- if scope == "global"
52
- if local = locations[:local]
53
- Bundler.ui.info "Your application has set #{name} to #{local.inspect}. This will override the " \
54
- "global value you are currently setting"
55
- end
48
+ Bundler.ui.info(message) if message
49
+ Bundler.settings.send("set_#{scope}", name, new_value)
50
+ end
56
51
 
57
- if env = locations[:env]
58
- Bundler.ui.info "You have a bundler environment variable for #{name} set to #{env.inspect}. " \
59
- "This will take precedence over the global value you are setting"
60
- end
52
+ private
61
53
 
62
- if global = locations[:global]
63
- Bundler.ui.info "You are replacing the current global value of #{name}, which is currently #{global.inspect}"
54
+ def confirm_all
55
+ if @options[:parseable]
56
+ thor.with_padding do
57
+ Bundler.settings.all.each do |setting|
58
+ val = Bundler.settings[setting]
59
+ Bundler.ui.info "#{setting}=#{val}"
64
60
  end
65
61
  end
66
-
67
- if scope == "local" && local = locations[:local]
68
- Bundler.ui.info "You are replacing the current local value of #{name}, which is currently #{local.inspect}"
62
+ else
63
+ Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
64
+ Bundler.settings.all.each do |setting|
65
+ Bundler.ui.confirm "#{setting}"
66
+ show_pretty_values_for(setting)
67
+ Bundler.ui.confirm ""
69
68
  end
69
+ end
70
+ end
70
71
 
71
- if name.match(/\Alocal\./)
72
- pathname = Pathname.new(args.join(" "))
73
- self.args = [pathname.expand_path.to_s] if pathname.directory?
74
- end
72
+ def confirm(name)
73
+ Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
74
+ show_pretty_values_for(name)
75
+ end
75
76
 
76
- Bundler.settings.send("set_#{scope}", name, args.join(" "))
77
+ def new_value
78
+ pathname = Pathname.new(args.join(" "))
79
+ if name.start_with?("local.") && pathname.directory?
80
+ pathname.expand_path.to_s
77
81
  else
78
- Bundler.ui.error "Invalid scope --#{scope} given. Please use --local or --global."
79
- exit 1
82
+ args.join(" ")
83
+ end
84
+ end
85
+
86
+ def message
87
+ locations = Bundler.settings.locations(name)
88
+ if @options[:parseable]
89
+ "#{name}=#{new_value}" if new_value
90
+ elsif scope == "global"
91
+ if locations[:local]
92
+ "Your application has set #{name} to #{locations[:local].inspect}. " \
93
+ "This will override the global value you are currently setting"
94
+ elsif locations[:env]
95
+ "You have a bundler environment variable for #{name} set to " \
96
+ "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
97
+ elsif locations[:global] && locations[:global] != args.join(" ")
98
+ "You are replacing the current global value of #{name}, which is currently " \
99
+ "#{locations[:global].inspect}"
100
+ end
101
+ elsif scope == "local" && locations[:local] != args.join(" ")
102
+ "You are replacing the current local value of #{name}, which is currently " \
103
+ "#{locations[:local].inspect}"
80
104
  end
81
105
  end
82
106
 
107
+ def show_pretty_values_for(setting)
108
+ thor.with_padding do
109
+ Bundler.settings.pretty_values_for(setting).each do |line|
110
+ Bundler.ui.info line
111
+ end
112
+ end
113
+ end
114
+
115
+ def valid_scope?(scope)
116
+ %w[delete local global].include?(scope)
117
+ end
83
118
  end
84
119
  end