bundler 2.2.29 → 2.5.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (330) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1129 -4
  3. data/README.md +4 -8
  4. data/bundler.gemspec +11 -11
  5. data/exe/bundle +5 -26
  6. data/exe/bundler +1 -1
  7. data/lib/bundler/.document +1 -0
  8. data/lib/bundler/build_metadata.rb +4 -4
  9. data/lib/bundler/capistrano.rb +1 -1
  10. data/lib/bundler/checksum.rb +254 -0
  11. data/lib/bundler/ci_detector.rb +75 -0
  12. data/lib/bundler/cli/add.rb +4 -4
  13. data/lib/bundler/cli/binstubs.rb +10 -6
  14. data/lib/bundler/cli/cache.rb +1 -1
  15. data/lib/bundler/cli/check.rb +3 -3
  16. data/lib/bundler/cli/common.rb +13 -3
  17. data/lib/bundler/cli/config.rb +18 -8
  18. data/lib/bundler/cli/console.rb +5 -4
  19. data/lib/bundler/cli/doctor.rb +12 -5
  20. data/lib/bundler/cli/exec.rb +1 -1
  21. data/lib/bundler/cli/fund.rb +1 -1
  22. data/lib/bundler/cli/gem.rb +141 -48
  23. data/lib/bundler/cli/info.rb +27 -17
  24. data/lib/bundler/cli/init.rb +6 -2
  25. data/lib/bundler/cli/install.rb +22 -39
  26. data/lib/bundler/cli/issue.rb +5 -4
  27. data/lib/bundler/cli/lock.rb +36 -29
  28. data/lib/bundler/cli/open.rb +9 -9
  29. data/lib/bundler/cli/outdated.rb +19 -12
  30. data/lib/bundler/cli/platform.rb +8 -6
  31. data/lib/bundler/cli/plugin.rb +9 -15
  32. data/lib/bundler/cli/pristine.rb +38 -30
  33. data/lib/bundler/cli/show.rb +3 -3
  34. data/lib/bundler/cli/update.rb +12 -7
  35. data/lib/bundler/cli/viz.rb +1 -1
  36. data/lib/bundler/cli.rb +266 -285
  37. data/lib/bundler/compact_index_client/cache.rb +53 -67
  38. data/lib/bundler/compact_index_client/cache_file.rb +153 -0
  39. data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  40. data/lib/bundler/compact_index_client/parser.rb +84 -0
  41. data/lib/bundler/compact_index_client/updater.rb +83 -76
  42. data/lib/bundler/compact_index_client.rb +59 -87
  43. data/lib/bundler/constants.rb +9 -2
  44. data/lib/bundler/current_ruby.rb +12 -16
  45. data/lib/bundler/definition.rb +509 -319
  46. data/lib/bundler/dependency.rb +33 -71
  47. data/lib/bundler/digest.rb +71 -0
  48. data/lib/bundler/dsl.rb +88 -69
  49. data/lib/bundler/endpoint_specification.rb +32 -15
  50. data/lib/bundler/env.rb +5 -7
  51. data/lib/bundler/environment_preserver.rb +8 -22
  52. data/lib/bundler/errors.rb +101 -13
  53. data/lib/bundler/feature_flag.rb +0 -2
  54. data/lib/bundler/fetcher/base.rb +11 -11
  55. data/lib/bundler/fetcher/compact_index.rb +32 -52
  56. data/lib/bundler/fetcher/dependency.rb +3 -7
  57. data/lib/bundler/fetcher/downloader.rb +17 -16
  58. data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  59. data/lib/bundler/fetcher/index.rb +2 -29
  60. data/lib/bundler/fetcher.rb +87 -79
  61. data/lib/bundler/force_platform.rb +18 -0
  62. data/lib/bundler/friendly_errors.rb +29 -40
  63. data/lib/bundler/gem_helper.rb +11 -23
  64. data/lib/bundler/gem_helpers.rb +30 -6
  65. data/lib/bundler/gem_version_promoter.rb +68 -109
  66. data/lib/bundler/graph.rb +9 -9
  67. data/lib/bundler/index.rb +71 -79
  68. data/lib/bundler/injector.rb +23 -11
  69. data/lib/bundler/inline.rb +11 -23
  70. data/lib/bundler/installer/gem_installer.rb +18 -11
  71. data/lib/bundler/installer/parallel_installer.rb +17 -65
  72. data/lib/bundler/installer/standalone.rb +56 -15
  73. data/lib/bundler/installer.rb +35 -61
  74. data/lib/bundler/lazy_specification.rb +92 -61
  75. data/lib/bundler/lockfile_generator.rb +12 -3
  76. data/lib/bundler/lockfile_parser.rb +137 -70
  77. data/lib/bundler/man/bundle-add.1 +19 -26
  78. data/lib/bundler/man/bundle-add.1.ronn +16 -4
  79. data/lib/bundler/man/bundle-binstubs.1 +4 -16
  80. data/lib/bundler/man/bundle-cache.1 +9 -24
  81. data/lib/bundler/man/bundle-cache.1.ronn +9 -2
  82. data/lib/bundler/man/bundle-check.1 +5 -12
  83. data/lib/bundler/man/bundle-check.1.ronn +3 -0
  84. data/lib/bundler/man/bundle-clean.1 +4 -11
  85. data/lib/bundler/man/bundle-clean.1.ronn +1 -1
  86. data/lib/bundler/man/bundle-config.1 +47 -224
  87. data/lib/bundler/man/bundle-config.1.ronn +40 -28
  88. data/lib/bundler/man/bundle-console.1 +35 -0
  89. data/lib/bundler/man/bundle-console.1.ronn +44 -0
  90. data/lib/bundler/man/bundle-doctor.1 +4 -18
  91. data/lib/bundler/man/bundle-exec.1 +16 -77
  92. data/lib/bundler/man/bundle-exec.1.ronn +8 -9
  93. data/lib/bundler/man/bundle-gem.1 +45 -72
  94. data/lib/bundler/man/bundle-gem.1.ronn +32 -5
  95. data/lib/bundler/man/bundle-help.1 +9 -0
  96. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  97. data/lib/bundler/man/bundle-info.1 +5 -11
  98. data/lib/bundler/man/bundle-info.1.ronn +3 -3
  99. data/lib/bundler/man/bundle-init.1 +6 -11
  100. data/lib/bundler/man/bundle-init.1.ronn +2 -0
  101. data/lib/bundler/man/bundle-inject.1 +8 -18
  102. data/lib/bundler/man/bundle-inject.1.ronn +3 -1
  103. data/lib/bundler/man/bundle-install.1 +32 -155
  104. data/lib/bundler/man/bundle-install.1.ronn +11 -33
  105. data/lib/bundler/man/bundle-list.1 +4 -19
  106. data/lib/bundler/man/bundle-lock.1 +5 -29
  107. data/lib/bundler/man/bundle-open.1 +18 -18
  108. data/lib/bundler/man/bundle-open.1.ronn +9 -1
  109. data/lib/bundler/man/bundle-outdated.1 +17 -72
  110. data/lib/bundler/man/bundle-outdated.1.ronn +13 -18
  111. data/lib/bundler/man/bundle-platform.1 +16 -28
  112. data/lib/bundler/man/bundle-platform.1.ronn +14 -7
  113. data/lib/bundler/man/bundle-plugin.1 +58 -0
  114. data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  115. data/lib/bundler/man/bundle-pristine.1 +5 -16
  116. data/lib/bundler/man/bundle-remove.1 +4 -14
  117. data/lib/bundler/man/bundle-show.1 +3 -10
  118. data/lib/bundler/man/bundle-update.1 +19 -138
  119. data/lib/bundler/man/bundle-update.1.ronn +2 -1
  120. data/lib/bundler/man/bundle-version.1 +22 -0
  121. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  122. data/lib/bundler/man/bundle-viz.1 +6 -15
  123. data/lib/bundler/man/bundle-viz.1.ronn +2 -0
  124. data/lib/bundler/man/bundle.1 +17 -51
  125. data/lib/bundler/man/bundle.1.ronn +12 -7
  126. data/lib/bundler/man/gemfile.5 +130 -346
  127. data/lib/bundler/man/gemfile.5.ronn +121 -86
  128. data/lib/bundler/man/index.txt +4 -0
  129. data/lib/bundler/match_metadata.rb +17 -0
  130. data/lib/bundler/match_platform.rb +1 -2
  131. data/lib/bundler/match_remote_metadata.rb +29 -0
  132. data/lib/bundler/mirror.rb +8 -10
  133. data/lib/bundler/plugin/api/source.rb +9 -13
  134. data/lib/bundler/plugin/index.rb +13 -5
  135. data/lib/bundler/plugin/installer/git.rb +0 -4
  136. data/lib/bundler/plugin/installer/path.rb +18 -0
  137. data/lib/bundler/plugin/installer/rubygems.rb +0 -8
  138. data/lib/bundler/plugin/installer.rb +42 -19
  139. data/lib/bundler/plugin/source_list.rb +4 -4
  140. data/lib/bundler/plugin.rb +16 -7
  141. data/lib/bundler/process_lock.rb +1 -1
  142. data/lib/bundler/remote_specification.rb +11 -5
  143. data/lib/bundler/resolver/base.rb +111 -0
  144. data/lib/bundler/resolver/candidate.rb +82 -0
  145. data/lib/bundler/resolver/incompatibility.rb +15 -0
  146. data/lib/bundler/resolver/package.rb +81 -0
  147. data/lib/bundler/resolver/root.rb +25 -0
  148. data/lib/bundler/resolver/spec_group.rb +53 -66
  149. data/lib/bundler/resolver.rb +419 -307
  150. data/lib/bundler/retry.rb +1 -1
  151. data/lib/bundler/ruby_dsl.rb +42 -7
  152. data/lib/bundler/ruby_version.rb +16 -22
  153. data/lib/bundler/rubygems_ext.rb +250 -64
  154. data/lib/bundler/rubygems_gem_installer.rb +90 -64
  155. data/lib/bundler/rubygems_integration.rb +81 -190
  156. data/lib/bundler/runtime.rb +8 -13
  157. data/lib/bundler/safe_marshal.rb +31 -0
  158. data/lib/bundler/self_manager.rb +206 -0
  159. data/lib/bundler/settings.rb +139 -57
  160. data/lib/bundler/setup.rb +13 -1
  161. data/lib/bundler/shared_helpers.rb +67 -36
  162. data/lib/bundler/source/git/git_proxy.rb +285 -82
  163. data/lib/bundler/source/git.rb +81 -41
  164. data/lib/bundler/source/metadata.rb +17 -16
  165. data/lib/bundler/source/path/installer.rb +1 -22
  166. data/lib/bundler/source/path.rb +13 -25
  167. data/lib/bundler/source/rubygems/remote.rb +1 -1
  168. data/lib/bundler/source/rubygems.rb +164 -234
  169. data/lib/bundler/source/rubygems_aggregate.rb +1 -1
  170. data/lib/bundler/source.rb +7 -6
  171. data/lib/bundler/source_list.rb +40 -32
  172. data/lib/bundler/source_map.rb +15 -2
  173. data/lib/bundler/spec_set.rb +156 -46
  174. data/lib/bundler/stub_specification.rb +18 -5
  175. data/lib/bundler/templates/Executable +3 -5
  176. data/lib/bundler/templates/Executable.bundler +7 -12
  177. data/lib/bundler/templates/Executable.standalone +4 -4
  178. data/lib/bundler/templates/Gemfile +0 -2
  179. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  180. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  181. data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  182. data/lib/bundler/templates/newgem/README.md.tt +7 -11
  183. data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
  184. data/lib/bundler/templates/newgem/bin/console.tt +0 -4
  185. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  186. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  187. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  188. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  189. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  190. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  191. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +13 -3
  192. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  193. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  194. data/lib/bundler/templates/newgem/newgem.gemspec.tt +25 -17
  195. data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  196. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  197. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  198. data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  199. data/lib/bundler/ui/rg_proxy.rb +1 -1
  200. data/lib/bundler/ui/shell.rb +38 -15
  201. data/lib/bundler/ui/silent.rb +21 -5
  202. data/lib/bundler/uri_credentials_filter.rb +2 -2
  203. data/lib/bundler/uri_normalizer.rb +23 -0
  204. data/lib/bundler/vendor/.document +1 -0
  205. data/lib/bundler/vendor/connection_pool/.document +1 -0
  206. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  207. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  208. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  209. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  210. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
  211. data/lib/bundler/vendor/fileutils/.document +1 -0
  212. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  213. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1340 -410
  214. data/lib/bundler/vendor/net-http-persistent/.document +1 -0
  215. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  216. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  217. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  218. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  219. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +57 -57
  220. data/lib/bundler/vendor/pub_grub/.document +1 -0
  221. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  222. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  223. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  224. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  225. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  226. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  227. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  228. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  229. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  230. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  231. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  232. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  233. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  234. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  235. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  236. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  237. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  238. data/lib/bundler/vendor/thor/.document +1 -0
  239. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  240. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  241. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  242. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  243. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +12 -14
  244. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
  245. data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
  246. data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  247. data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  248. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
  249. data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
  250. data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  251. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  252. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  253. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  254. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  255. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  256. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +63 -7
  257. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  258. data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  259. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +48 -154
  260. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
  261. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  262. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +0 -45
  263. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  264. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  265. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  266. data/lib/bundler/vendor/thor/lib/thor/shell.rb +2 -2
  267. data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
  268. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  269. data/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  270. data/lib/bundler/vendor/tsort/.document +1 -0
  271. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  272. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  273. data/lib/bundler/vendor/uri/.document +1 -0
  274. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  275. data/lib/bundler/vendor/uri/lib/uri/common.rb +316 -207
  276. data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  277. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
  278. data/lib/bundler/vendor/uri/lib/uri/generic.rb +33 -13
  279. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
  280. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
  281. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
  282. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  283. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
  284. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -23
  285. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +105 -47
  286. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  287. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  288. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  289. data/lib/bundler/vendor/uri/lib/uri.rb +3 -3
  290. data/lib/bundler/vendored_net_http.rb +23 -0
  291. data/lib/bundler/vendored_persistent.rb +0 -36
  292. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  293. data/lib/bundler/vendored_timeout.rb +12 -0
  294. data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
  295. data/lib/bundler/vendored_uri.rb +18 -1
  296. data/lib/bundler/version.rb +5 -1
  297. data/lib/bundler/vlad.rb +1 -1
  298. data/lib/bundler/worker.rb +7 -9
  299. data/lib/bundler/yaml_serializer.rb +21 -12
  300. data/lib/bundler.rb +114 -121
  301. metadata +87 -41
  302. data/lib/bundler/dep_proxy.rb +0 -55
  303. data/lib/bundler/gemdeps.rb +0 -29
  304. data/lib/bundler/psyched_yaml.rb +0 -22
  305. data/lib/bundler/templates/gems.rb +0 -8
  306. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  307. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  308. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  309. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  310. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  311. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  312. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  313. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  314. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  315. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  316. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  317. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  318. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  319. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  320. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  321. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  322. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  323. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  324. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  325. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  326. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  327. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  328. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  329. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  330. data/lib/bundler/version_ranges.rb +0 -122
@@ -1,55 +1,88 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "match_platform"
3
+ require_relative "force_platform"
4
4
 
5
5
  module Bundler
6
6
  class LazySpecification
7
+ include MatchMetadata
7
8
  include MatchPlatform
9
+ include ForcePlatform
8
10
 
9
- attr_reader :name, :version, :dependencies, :platform
10
- attr_accessor :source, :remote
11
+ attr_reader :name, :version, :platform
12
+ attr_accessor :source, :remote, :force_ruby_platform, :dependencies, :required_ruby_version, :required_rubygems_version
13
+
14
+ alias_method :runtime_dependencies, :dependencies
15
+
16
+ def self.from_spec(s)
17
+ lazy_spec = new(s.name, s.version, s.platform, s.source)
18
+ lazy_spec.dependencies = s.dependencies
19
+ lazy_spec.required_ruby_version = s.required_ruby_version
20
+ lazy_spec.required_rubygems_version = s.required_rubygems_version
21
+ lazy_spec
22
+ end
11
23
 
12
24
  def initialize(name, version, platform, source = nil)
13
25
  @name = name
14
26
  @version = version
15
27
  @dependencies = []
28
+ @required_ruby_version = Gem::Requirement.default
29
+ @required_rubygems_version = Gem::Requirement.default
16
30
  @platform = platform || Gem::Platform::RUBY
17
31
  @source = source
18
- @specification = nil
32
+ @force_ruby_platform = default_force_ruby_platform
19
33
  end
20
34
 
21
35
  def full_name
22
- if platform == Gem::Platform::RUBY || platform.nil?
36
+ @full_name ||= if platform == Gem::Platform::RUBY
23
37
  "#{@name}-#{@version}"
24
38
  else
25
39
  "#{@name}-#{@version}-#{platform}"
26
40
  end
27
41
  end
28
42
 
43
+ def lock_name
44
+ @lock_name ||= name_tuple.lock_name
45
+ end
46
+
47
+ def name_tuple
48
+ Gem::NameTuple.new(@name, @version, @platform)
49
+ end
50
+
29
51
  def ==(other)
30
- identifier == other.identifier
52
+ full_name == other.full_name
31
53
  end
32
54
 
33
55
  def eql?(other)
34
- identifier.eql?(other.identifier)
56
+ full_name.eql?(other.full_name)
35
57
  end
36
58
 
37
59
  def hash
38
- identifier.hash
60
+ full_name.hash
39
61
  end
40
62
 
63
+ ##
64
+ # Does this locked specification satisfy +dependency+?
65
+ #
66
+ # NOTE: Rubygems default requirement is ">= 0", which doesn't match
67
+ # prereleases of 0 versions, like "0.0.0.dev" or "0.0.0.SNAPSHOT". However,
68
+ # bundler users expect those to work. We need to make sure that Gemfile
69
+ # dependencies without explicit requirements (which use ">= 0" under the
70
+ # hood by default) are still valid for locked specs using this kind of
71
+ # versions. The method implements an ad-hoc fix for that. A better solution
72
+ # might be to change default rubygems requirement of dependencies to be ">=
73
+ # 0.A" but that's a major refactoring likely to break things. Hopefully we
74
+ # can attempt it in the future.
75
+ #
76
+
41
77
  def satisfies?(dependency)
42
- @name == dependency.name && dependency.requirement.satisfied_by?(Gem::Version.new(@version))
78
+ effective_requirement = dependency.requirement == Gem::Requirement.default ? Gem::Requirement.new(">= 0.A") : dependency.requirement
79
+
80
+ @name == dependency.name && effective_requirement.satisfied_by?(Gem::Version.new(@version))
43
81
  end
44
82
 
45
83
  def to_lock
46
84
  out = String.new
47
-
48
- if platform == Gem::Platform::RUBY || platform.nil?
49
- out << " #{name} (#{version})\n"
50
- else
51
- out << " #{name} (#{version}-#{platform})\n"
52
- end
85
+ out << " #{lock_name}\n"
53
86
 
54
87
  dependencies.sort_by(&:to_s).uniq.each do |dep|
55
88
  next if dep.type == :development
@@ -59,45 +92,51 @@ module Bundler
59
92
  out
60
93
  end
61
94
 
62
- def __materialize__
63
- @specification = if source.is_a?(Source::Gemspec) && source.gemspec.name == name
64
- source.gemspec.tap {|s| s.source = source }
95
+ def materialize_for_installation
96
+ source.local!
97
+
98
+ matching_specs = source.specs.search(use_exact_resolved_specifications? ? self : [name, version])
99
+ return self if matching_specs.empty?
100
+
101
+ candidates = if use_exact_resolved_specifications?
102
+ matching_specs
65
103
  else
66
- search_object = if source.is_a?(Source::Path)
67
- Dependency.new(name, version)
68
- else
69
- ruby_platform_materializes_to_ruby_platform? ? self : Dependency.new(name, version)
70
- end
71
- platform_object = Gem::Platform.new(platform)
72
- candidates = source.specs.search(search_object)
73
- same_platform_candidates = candidates.select do |spec|
74
- MatchPlatform.platforms_match?(spec.platform, platform_object)
75
- end
76
- installable_candidates = same_platform_candidates.select do |spec|
77
- !spec.is_a?(EndpointSpecification) ||
78
- (spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
79
- spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
104
+ target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform
105
+
106
+ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
107
+
108
+ specification = __materialize__(installable_candidates, fallback_to_non_installable: false)
109
+ return specification unless specification.nil?
110
+
111
+ if target_platform != platform
112
+ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, platform)
80
113
  end
81
- search = installable_candidates.last || same_platform_candidates.last
82
- search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
83
- search
114
+
115
+ installable_candidates
84
116
  end
85
- end
86
117
 
87
- def respond_to?(*args)
88
- super || @specification ? @specification.respond_to?(*args) : nil
118
+ __materialize__(candidates)
89
119
  end
90
120
 
91
- def to_s
92
- @__to_s ||= if platform == Gem::Platform::RUBY || platform.nil?
93
- "#{name} (#{version})"
121
+ # If in frozen mode, we fallback to a non-installable candidate because by
122
+ # doing this we avoid re-resolving and potentially end up changing the
123
+ # lock file, which is not allowed. In that case, we will give a proper error
124
+ # about the mismatch higher up the stack, right before trying to install the
125
+ # bad gem.
126
+ def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
127
+ search = candidates.reverse.find do |spec|
128
+ spec.is_a?(StubSpecification) || spec.matches_current_metadata?
129
+ end
130
+ if search.nil? && fallback_to_non_installable
131
+ search = candidates.last
94
132
  else
95
- "#{name} (#{version}-#{platform})"
133
+ search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
96
134
  end
135
+ search
97
136
  end
98
137
 
99
- def identifier
100
- @__identifier ||= [name, version, platform_string]
138
+ def to_s
139
+ lock_name
101
140
  end
102
141
 
103
142
  def git_version
@@ -105,30 +144,20 @@ module Bundler
105
144
  " #{source.revision[0..6]}"
106
145
  end
107
146
 
108
- protected
109
-
110
- def platform_string
111
- platform_string = platform.to_s
112
- platform_string == Index::RUBY ? Index::NULL : platform_string
147
+ def force_ruby_platform!
148
+ @force_ruby_platform = true
113
149
  end
114
150
 
115
151
  private
116
152
 
117
- def to_ary
118
- nil
119
- end
120
-
121
- def method_missing(method, *args, &blk)
122
- raise "LazySpecification has not been materialized yet (calling :#{method} #{args.inspect})" unless @specification
123
-
124
- return super unless respond_to?(method)
125
-
126
- @specification.send(method, *args, &blk)
153
+ def use_exact_resolved_specifications?
154
+ @use_exact_resolved_specifications ||= !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?
127
155
  end
128
156
 
129
157
  #
130
158
  # For backwards compatibility with existing lockfiles, if the most specific
131
- # locked platform is RUBY, we keep the previous behaviour of resolving the
159
+ # locked platform is not a specific platform like x86_64-linux or
160
+ # universal-java-11, then we keep the previous behaviour of resolving the
132
161
  # best platform variant at materiliazation time. For previous bundler
133
162
  # versions (before 2.2.0) this was always the case (except when the lockfile
134
163
  # only included non-ruby platforms), but we're also keeping this behaviour
@@ -136,7 +165,9 @@ module Bundler
136
165
  # explicitly add a more specific platform.
137
166
  #
138
167
  def ruby_platform_materializes_to_ruby_platform?
139
- !Bundler.most_specific_locked_platform?(Gem::Platform::RUBY) || Bundler.settings[:force_ruby_platform]
168
+ generic_platform = generic_local_platform == Gem::Platform::JAVA ? Gem::Platform::JAVA : Gem::Platform::RUBY
169
+
170
+ !Bundler.most_specific_locked_platform?(generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
140
171
  end
141
172
  end
142
173
  end
@@ -19,6 +19,7 @@ module Bundler
19
19
  add_sources
20
20
  add_platforms
21
21
  add_dependencies
22
+ add_checksums
22
23
  add_locked_ruby_version
23
24
  add_bundled_with
24
25
 
@@ -45,7 +46,7 @@ module Bundler
45
46
  # gems with the same name, but different platform
46
47
  # are ordered consistently
47
48
  specs.sort_by(&:full_name).each do |spec|
48
- next if spec.name == "bundler".freeze
49
+ next if spec.name == "bundler"
49
50
  out << spec.to_lock
50
51
  end
51
52
  end
@@ -60,18 +61,26 @@ module Bundler
60
61
  handled = []
61
62
  definition.dependencies.sort_by(&:to_s).each do |dep|
62
63
  next if handled.include?(dep.name)
63
- out << dep.to_lock
64
+ out << dep.to_lock << "\n"
64
65
  handled << dep.name
65
66
  end
66
67
  end
67
68
 
69
+ def add_checksums
70
+ return unless definition.locked_checksums
71
+ checksums = definition.resolve.map do |spec|
72
+ spec.source.checksum_store.to_lock(spec)
73
+ end
74
+ add_section("CHECKSUMS", checksums)
75
+ end
76
+
68
77
  def add_locked_ruby_version
69
78
  return unless locked_ruby_version = definition.locked_ruby_version
70
79
  add_section("RUBY VERSION", locked_ruby_version.to_s)
71
80
  end
72
81
 
73
82
  def add_bundled_with
74
- add_section("BUNDLED WITH", definition.locked_bundler_version.to_s)
83
+ add_section("BUNDLED WITH", definition.bundler_version_to_lock.to_s)
75
84
  end
76
85
 
77
86
  def add_section(name, value)
@@ -2,18 +2,49 @@
2
2
 
3
3
  module Bundler
4
4
  class LockfileParser
5
- attr_reader :sources, :dependencies, :specs, :platforms, :bundler_version, :ruby_version
6
-
7
- BUNDLED = "BUNDLED WITH".freeze
8
- DEPENDENCIES = "DEPENDENCIES".freeze
9
- PLATFORMS = "PLATFORMS".freeze
10
- RUBY = "RUBY VERSION".freeze
11
- GIT = "GIT".freeze
12
- GEM = "GEM".freeze
13
- PATH = "PATH".freeze
14
- PLUGIN = "PLUGIN SOURCE".freeze
15
- SPECS = " specs:".freeze
16
- OPTIONS = /^ ([a-z]+): (.*)$/i.freeze
5
+ class Position
6
+ attr_reader :line, :column
7
+ def initialize(line, column)
8
+ @line = line
9
+ @column = column
10
+ end
11
+
12
+ def advance!(string)
13
+ lines = string.count("\n")
14
+ if lines > 0
15
+ @line += lines
16
+ @column = string.length - string.rindex("\n")
17
+ else
18
+ @column += string.length
19
+ end
20
+ end
21
+
22
+ def to_s
23
+ "#{line}:#{column}"
24
+ end
25
+ end
26
+
27
+ attr_reader(
28
+ :sources,
29
+ :dependencies,
30
+ :specs,
31
+ :platforms,
32
+ :bundler_version,
33
+ :ruby_version,
34
+ :checksums,
35
+ )
36
+
37
+ BUNDLED = "BUNDLED WITH"
38
+ DEPENDENCIES = "DEPENDENCIES"
39
+ CHECKSUMS = "CHECKSUMS"
40
+ PLATFORMS = "PLATFORMS"
41
+ RUBY = "RUBY VERSION"
42
+ GIT = "GIT"
43
+ GEM = "GEM"
44
+ PATH = "PATH"
45
+ PLUGIN = "PLUGIN SOURCE"
46
+ SPECS = " specs:"
47
+ OPTIONS = /^ ([a-z]+): (.*)$/i
17
48
  SOURCE = [GIT, GEM, PATH, PLUGIN].freeze
18
49
 
19
50
  SECTIONS_BY_VERSION_INTRODUCED = {
@@ -21,14 +52,18 @@ module Bundler
21
52
  Gem::Version.create("1.10") => [BUNDLED].freeze,
22
53
  Gem::Version.create("1.12") => [RUBY].freeze,
23
54
  Gem::Version.create("1.13") => [PLUGIN].freeze,
55
+ Gem::Version.create("2.5.0") => [CHECKSUMS].freeze,
24
56
  }.freeze
25
57
 
26
- KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten.freeze
58
+ KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten!.freeze
27
59
 
28
60
  ENVIRONMENT_VERSION_SECTIONS = [BUNDLED, RUBY].freeze
61
+ deprecate_constant(:ENVIRONMENT_VERSION_SECTIONS)
29
62
 
30
63
  def self.sections_in_lockfile(lockfile_contents)
31
- lockfile_contents.scan(/^\w[\w ]*$/).uniq
64
+ sections = lockfile_contents.scan(/^\w[\w ]*$/)
65
+ sections.uniq!
66
+ sections
32
67
  end
33
68
 
34
69
  def self.unknown_sections_in_lockfile(lockfile_contents)
@@ -37,7 +72,7 @@ module Bundler
37
72
 
38
73
  def self.sections_to_ignore(base_version = nil)
39
74
  base_version &&= base_version.release
40
- base_version ||= Gem::Version.create("1.0".dup)
75
+ base_version ||= Gem::Version.create("1.0")
41
76
  attributes = []
42
77
  SECTIONS_BY_VERSION_INTRODUCED.each do |version, introduced|
43
78
  next if version <= base_version
@@ -46,82 +81,88 @@ module Bundler
46
81
  attributes
47
82
  end
48
83
 
84
+ def self.bundled_with
85
+ lockfile = Bundler.default_lockfile
86
+ return unless lockfile.file?
87
+
88
+ lockfile_contents = Bundler.read_file(lockfile)
89
+ return unless lockfile_contents.include?(BUNDLED)
90
+
91
+ lockfile_contents.split(BUNDLED).last.strip
92
+ end
93
+
49
94
  def initialize(lockfile)
50
95
  @platforms = []
51
96
  @sources = []
52
97
  @dependencies = {}
53
- @state = nil
98
+ @parse_method = nil
54
99
  @specs = {}
100
+ @lockfile_path = begin
101
+ SharedHelpers.relative_lockfile_path
102
+ rescue GemfileNotFound
103
+ "Gemfile.lock"
104
+ end
105
+ @pos = Position.new(1, 1)
55
106
 
56
- if lockfile.match(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
57
- raise LockfileError, "Your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} contains merge conflicts.\n" \
58
- "Run `git checkout HEAD -- #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` first to get a clean lock."
107
+ if lockfile.match?(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
108
+ raise LockfileError, "Your #{@lockfile_path} contains merge conflicts.\n" \
109
+ "Run `git checkout HEAD -- #{@lockfile_path}` first to get a clean lock."
59
110
  end
60
111
 
61
- lockfile.split(/(?:\r?\n)+/).each do |line|
112
+ lockfile.split(/((?:\r?\n)+)/) do |line|
113
+ # split alternates between the line and the following whitespace
114
+ next @pos.advance!(line) if line.match?(/^\s*$/)
115
+
62
116
  if SOURCE.include?(line)
63
- @state = :source
117
+ @parse_method = :parse_source
64
118
  parse_source(line)
65
119
  elsif line == DEPENDENCIES
66
- @state = :dependency
120
+ @parse_method = :parse_dependency
121
+ elsif line == CHECKSUMS
122
+ # This is a temporary solution to make this feature disabled by default
123
+ # for all gemfiles that don't already explicitly include the feature.
124
+ @checksums = true
125
+ @parse_method = :parse_checksum
67
126
  elsif line == PLATFORMS
68
- @state = :platform
127
+ @parse_method = :parse_platform
69
128
  elsif line == RUBY
70
- @state = :ruby
129
+ @parse_method = :parse_ruby
71
130
  elsif line == BUNDLED
72
- @state = :bundled_with
73
- elsif line =~ /^[^\s]/
74
- @state = nil
75
- elsif @state
76
- send("parse_#{@state}", line)
131
+ @parse_method = :parse_bundled_with
132
+ elsif /^[^\s]/.match?(line)
133
+ @parse_method = nil
134
+ elsif @parse_method
135
+ send(@parse_method, line)
77
136
  end
137
+ @pos.advance!(line)
78
138
  end
79
- @specs = @specs.values.sort_by(&:identifier)
80
- warn_for_outdated_bundler_version
139
+ @specs = @specs.values.sort_by!(&:full_name)
81
140
  rescue ArgumentError => e
82
141
  Bundler.ui.debug(e)
83
- raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
84
- "and then `bundle install` to generate a new lockfile."
142
+ raise LockfileError, "Your lockfile is unreadable. Run `rm #{@lockfile_path}` " \
143
+ "and then `bundle install` to generate a new lockfile. The error occurred while " \
144
+ "evaluating #{@lockfile_path}:#{@pos}"
85
145
  end
86
146
 
87
- def warn_for_outdated_bundler_version
88
- return unless bundler_version
89
- prerelease_text = bundler_version.prerelease? ? " --pre" : ""
90
- current_version = Gem::Version.create(Bundler::VERSION)
91
- return unless current_version < bundler_version
92
- Bundler.ui.warn "Warning: the running version of Bundler (#{current_version}) is older " \
93
- "than the version that created the lockfile (#{bundler_version}). We suggest you to " \
94
- "upgrade to the version that created the lockfile by running `gem install " \
95
- "bundler:#{bundler_version}#{prerelease_text}`.\n"
147
+ def may_include_redundant_platform_specific_gems?
148
+ bundler_version.nil? || bundler_version < Gem::Version.new("1.16.2")
96
149
  end
97
150
 
98
151
  private
99
152
 
100
153
  TYPES = {
101
- GIT => Bundler::Source::Git,
102
- GEM => Bundler::Source::Rubygems,
103
- PATH => Bundler::Source::Path,
154
+ GIT => Bundler::Source::Git,
155
+ GEM => Bundler::Source::Rubygems,
156
+ PATH => Bundler::Source::Path,
104
157
  PLUGIN => Bundler::Plugin,
105
158
  }.freeze
106
159
 
107
160
  def parse_source(line)
108
161
  case line
109
162
  when SPECS
110
- case @type
111
- when PATH
112
- @current_source = TYPES[@type].from_lock(@opts)
113
- @sources << @current_source
114
- when GIT
115
- @current_source = TYPES[@type].from_lock(@opts)
116
- @sources << @current_source
117
- when GEM
118
- @opts["remotes"] = Array(@opts.delete("remote")).reverse
119
- @current_source = TYPES[@type].from_lock(@opts)
120
- @sources << @current_source
121
- when PLUGIN
122
- @current_source = Plugin.source_from_lock(@opts)
123
- @sources << @current_source
124
- end
163
+ return unless TYPES.key?(@type)
164
+ @current_source = TYPES[@type].from_lock(@opts)
165
+ @sources << @current_source
125
166
  when OPTIONS
126
167
  value = $2
127
168
  value = true if value == "true"
@@ -151,18 +192,19 @@ module Bundler
151
192
  (?:#{space}\(([^-]*) # Space, followed by version
152
193
  (?:-(.*))?\))? # Optional platform
153
194
  (!)? # Optional pinned marker
195
+ (?:#{space}([^ ]+))? # Optional checksum
154
196
  $ # Line end
155
- /xo.freeze
197
+ /xo
156
198
 
157
199
  def parse_dependency(line)
158
200
  return unless line =~ NAME_VERSION
159
201
  spaces = $1
160
202
  return unless spaces.size == 2
161
- name = $2
203
+ name = -$2
162
204
  version = $3
163
205
  pinned = $5
164
206
 
165
- version = version.split(",").map(&:strip) if version
207
+ version = version.split(",").each(&:strip!) if version
166
208
 
167
209
  dep = Bundler::Dependency.new(name, version)
168
210
 
@@ -183,23 +225,47 @@ module Bundler
183
225
  @dependencies[dep.name] = dep
184
226
  end
185
227
 
186
- def parse_spec(line)
228
+ def parse_checksum(line)
187
229
  return unless line =~ NAME_VERSION
230
+
188
231
  spaces = $1
232
+ return unless spaces.size == 2
233
+ checksums = $6
234
+ return unless checksums
189
235
  name = $2
190
236
  version = $3
191
237
  platform = $4
192
238
 
239
+ version = Gem::Version.new(version)
240
+ platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
241
+ full_name = Gem::NameTuple.new(name, version, platform).full_name
242
+ return unless spec = @specs[full_name]
243
+
244
+ checksums.split(",") do |lock_checksum|
245
+ column = line.index(lock_checksum) + 1
246
+ checksum = Checksum.from_lock(lock_checksum, "#{@lockfile_path}:#{@pos.line}:#{column}")
247
+ spec.source.checksum_store.register(spec, checksum)
248
+ end
249
+ end
250
+
251
+ def parse_spec(line)
252
+ return unless line =~ NAME_VERSION
253
+ spaces = $1
254
+ name = -$2
255
+ version = $3
256
+
193
257
  if spaces.size == 4
258
+ # only load platform for non-dependency (spec) line
259
+ platform = $4
260
+
194
261
  version = Gem::Version.new(version)
195
262
  platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
196
- @current_spec = LazySpecification.new(name, version, platform)
197
- @current_spec.source = @current_source
263
+ @current_spec = LazySpecification.new(name, version, platform, @current_source)
198
264
  @current_source.add_dependency_names(name)
199
265
 
200
- @specs[@current_spec.identifier] = @current_spec
266
+ @specs[@current_spec.full_name] = @current_spec
201
267
  elsif spaces.size == 6
202
- version = version.split(",").map(&:strip) if version
268
+ version = version.split(",").each(&:strip!) if version
203
269
  dep = Gem::Dependency.new(name, version)
204
270
  @current_spec.dependencies << dep
205
271
  end
@@ -210,13 +276,14 @@ module Bundler
210
276
  end
211
277
 
212
278
  def parse_bundled_with(line)
213
- line = line.strip
279
+ line.strip!
214
280
  return unless Gem::Version.correct?(line)
215
281
  @bundler_version = Gem::Version.create(line)
216
282
  end
217
283
 
218
284
  def parse_ruby(line)
219
- @ruby_version = line.strip
285
+ line.strip!
286
+ @ruby_version = line
220
287
  end
221
288
  end
222
289
  end
@@ -1,66 +1,59 @@
1
- .\" generated with Ronn/v0.7.3
2
- .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
- .
4
- .TH "BUNDLE\-ADD" "1" "June 2021" "" ""
5
- .
1
+ .\" generated with nRonn/v0.11.1
2
+ .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
+ .TH "BUNDLE\-ADD" "1" "June 2024" ""
6
4
  .SH "NAME"
7
5
  \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
8
- .
9
6
  .SH "SYNOPSIS"
10
- \fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-git=GIT] [\-\-branch=BRANCH] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
11
- .
7
+ \fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-path=PATH] [\-\-git=GIT] [\-\-github=GITHUB] [\-\-branch=BRANCH] [\-\-ref=REF] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
12
8
  .SH "DESCRIPTION"
13
9
  Adds the named gem to the Gemfile and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\.
14
- .
15
10
  .P
16
11
  Example:
17
- .
18
12
  .P
19
13
  bundle add rails
20
- .
21
14
  .P
22
15
  bundle add rails \-\-version "< 3\.0, > 1\.1"
23
- .
24
16
  .P
25
17
  bundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development"
26
- .
27
18
  .P
28
19
  bundle add rails \-\-skip\-install
29
- .
30
20
  .P
31
21
  bundle add rails \-\-group "development, test"
32
- .
33
22
  .SH "OPTIONS"
34
- .
35
23
  .TP
36
24
  \fB\-\-version\fR, \fB\-v\fR
37
25
  Specify version requirements(s) for the added gem\.
38
- .
39
26
  .TP
40
27
  \fB\-\-group\fR, \fB\-g\fR
41
28
  Specify the group(s) for the added gem\. Multiple groups should be separated by commas\.
42
- .
43
29
  .TP
44
- \fB\-\-source\fR, , \fB\-s\fR
30
+ \fB\-\-source\fR, \fB\-s\fR
45
31
  Specify the source for the added gem\.
46
- .
32
+ .TP
33
+ \fB\-\-require\fR, \fB\-r\fR
34
+ Adds require path to gem\. Provide false, or a path as a string\.
35
+ .TP
36
+ \fB\-\-path\fR
37
+ Specify the file system path for the added gem\.
47
38
  .TP
48
39
  \fB\-\-git\fR
49
40
  Specify the git source for the added gem\.
50
- .
41
+ .TP
42
+ \fB\-\-github\fR
43
+ Specify the github source for the added gem\.
51
44
  .TP
52
45
  \fB\-\-branch\fR
53
46
  Specify the git branch for the added gem\.
54
- .
47
+ .TP
48
+ \fB\-\-ref\fR
49
+ Specify the git ref for the added gem\.
55
50
  .TP
56
51
  \fB\-\-skip\-install\fR
57
52
  Adds the gem to the Gemfile but does not install it\.
58
- .
59
53
  .TP
60
54
  \fB\-\-optimistic\fR
61
- Adds optimistic declaration of version
62
- .
55
+ Adds optimistic declaration of version\.
63
56
  .TP
64
57
  \fB\-\-strict\fR
65
- Adds strict declaration of version
58
+ Adds strict declaration of version\.
66
59