bundler 1.17.3 → 2.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (426) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3354 -1258
  3. data/LICENSE.md +18 -19
  4. data/README.md +10 -15
  5. data/bundler.gemspec +15 -33
  6. data/exe/bundle +8 -10
  7. data/exe/bundler +1 -1
  8. data/lib/bundler/.document +1 -0
  9. data/lib/bundler/build_metadata.rb +5 -13
  10. data/lib/bundler/capistrano.rb +5 -5
  11. data/lib/bundler/checksum.rb +254 -0
  12. data/lib/bundler/ci_detector.rb +75 -0
  13. data/lib/bundler/cli/add.rb +29 -15
  14. data/lib/bundler/cli/binstubs.rb +13 -5
  15. data/lib/bundler/cli/cache.rb +24 -17
  16. data/lib/bundler/cli/check.rb +7 -5
  17. data/lib/bundler/cli/clean.rb +1 -1
  18. data/lib/bundler/cli/common.rb +50 -14
  19. data/lib/bundler/cli/config.rb +171 -86
  20. data/lib/bundler/cli/console.rb +3 -6
  21. data/lib/bundler/cli/doctor.rb +29 -12
  22. data/lib/bundler/cli/exec.rb +9 -25
  23. data/lib/bundler/cli/fund.rb +36 -0
  24. data/lib/bundler/cli/gem.rb +268 -53
  25. data/lib/bundler/cli/info.rb +51 -18
  26. data/lib/bundler/cli/init.rb +7 -3
  27. data/lib/bundler/cli/inject.rb +2 -2
  28. data/lib/bundler/cli/install.rb +55 -73
  29. data/lib/bundler/cli/issue.rb +9 -8
  30. data/lib/bundler/cli/list.rb +19 -11
  31. data/lib/bundler/cli/lock.rb +56 -26
  32. data/lib/bundler/cli/open.rb +10 -7
  33. data/lib/bundler/cli/outdated.rb +159 -128
  34. data/lib/bundler/cli/platform.rb +8 -6
  35. data/lib/bundler/cli/plugin.rb +23 -12
  36. data/lib/bundler/cli/pristine.rb +39 -26
  37. data/lib/bundler/cli/remove.rb +1 -2
  38. data/lib/bundler/cli/show.rb +7 -7
  39. data/lib/bundler/cli/update.rb +51 -19
  40. data/lib/bundler/cli/viz.rb +1 -1
  41. data/lib/bundler/cli.rb +399 -390
  42. data/lib/bundler/compact_index_client/cache.rb +55 -77
  43. data/lib/bundler/compact_index_client/cache_file.rb +148 -0
  44. data/lib/bundler/compact_index_client/gem_parser.rb +32 -0
  45. data/lib/bundler/compact_index_client/parser.rb +84 -0
  46. data/lib/bundler/compact_index_client/updater.rb +72 -84
  47. data/lib/bundler/compact_index_client.rb +61 -73
  48. data/lib/bundler/constants.rb +9 -2
  49. data/lib/bundler/current_ruby.rb +20 -21
  50. data/lib/bundler/definition.rb +663 -505
  51. data/lib/bundler/dependency.rb +38 -71
  52. data/lib/bundler/deployment.rb +1 -1
  53. data/lib/bundler/digest.rb +71 -0
  54. data/lib/bundler/dsl.rb +171 -152
  55. data/lib/bundler/endpoint_specification.rb +43 -17
  56. data/lib/bundler/env.rb +11 -18
  57. data/lib/bundler/environment_preserver.rb +17 -8
  58. data/lib/bundler/errors.rb +115 -14
  59. data/lib/bundler/feature_flag.rb +15 -39
  60. data/lib/bundler/fetcher/base.rb +12 -12
  61. data/lib/bundler/fetcher/compact_index.rb +41 -47
  62. data/lib/bundler/fetcher/dependency.rb +4 -8
  63. data/lib/bundler/fetcher/downloader.rb +27 -20
  64. data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  65. data/lib/bundler/fetcher/index.rb +6 -33
  66. data/lib/bundler/fetcher.rb +109 -90
  67. data/lib/bundler/force_platform.rb +16 -0
  68. data/lib/bundler/friendly_errors.rb +50 -55
  69. data/lib/bundler/gem_helper.rb +81 -46
  70. data/lib/bundler/gem_helpers.rb +78 -29
  71. data/lib/bundler/gem_tasks.rb +1 -1
  72. data/lib/bundler/gem_version_promoter.rb +68 -109
  73. data/lib/bundler/graph.rb +11 -11
  74. data/lib/bundler/index.rb +74 -82
  75. data/lib/bundler/injector.rb +58 -26
  76. data/lib/bundler/inline.rb +59 -35
  77. data/lib/bundler/installer/gem_installer.rb +29 -29
  78. data/lib/bundler/installer/parallel_installer.rb +38 -68
  79. data/lib/bundler/installer/standalone.rb +76 -16
  80. data/lib/bundler/installer.rb +60 -135
  81. data/lib/bundler/lazy_specification.rb +161 -63
  82. data/lib/bundler/lockfile_generator.rb +14 -5
  83. data/lib/bundler/lockfile_parser.rb +150 -109
  84. data/lib/bundler/man/bundle-add.1 +76 -0
  85. data/lib/bundler/man/bundle-add.1.ronn +87 -0
  86. data/{man → lib/bundler/man}/bundle-binstubs.1 +15 -22
  87. data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +8 -7
  88. data/lib/bundler/man/bundle-cache.1 +68 -0
  89. data/lib/bundler/man/bundle-cache.1.ronn +108 -0
  90. data/{man → lib/bundler/man}/bundle-check.1 +7 -14
  91. data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +7 -2
  92. data/{man → lib/bundler/man}/bundle-clean.1 +4 -11
  93. data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  94. data/{man → lib/bundler/man}/bundle-config.1 +80 -260
  95. data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +104 -98
  96. data/lib/bundler/man/bundle-console.1 +33 -0
  97. data/lib/bundler/man/bundle-console.1.ronn +39 -0
  98. data/{man → lib/bundler/man}/bundle-doctor.1 +5 -19
  99. data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +1 -1
  100. data/lib/bundler/man/bundle-env.1 +9 -0
  101. data/lib/bundler/man/bundle-env.1.ronn +10 -0
  102. data/{man → lib/bundler/man}/bundle-exec.1 +20 -78
  103. data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +12 -10
  104. data/lib/bundler/man/bundle-fund.1 +22 -0
  105. data/lib/bundler/man/bundle-fund.1.ronn +25 -0
  106. data/lib/bundler/man/bundle-gem.1 +87 -0
  107. data/lib/bundler/man/bundle-gem.1.ronn +149 -0
  108. data/lib/bundler/man/bundle-help.1 +9 -0
  109. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  110. data/lib/bundler/man/bundle-info.1 +17 -0
  111. data/lib/bundler/man/bundle-info.1.ronn +21 -0
  112. data/{man → lib/bundler/man}/bundle-init.1 +8 -13
  113. data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +5 -2
  114. data/lib/bundler/man/bundle-inject.1 +31 -0
  115. data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +12 -2
  116. data/{man → lib/bundler/man}/bundle-install.1 +65 -155
  117. data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +66 -57
  118. data/lib/bundler/man/bundle-issue.1 +45 -0
  119. data/lib/bundler/man/bundle-issue.1.ronn +37 -0
  120. data/lib/bundler/man/bundle-licenses.1 +9 -0
  121. data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  122. data/{man → lib/bundler/man}/bundle-list.1 +9 -24
  123. data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +10 -7
  124. data/{man → lib/bundler/man}/bundle-lock.1 +25 -34
  125. data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +25 -4
  126. data/lib/bundler/man/bundle-open.1 +32 -0
  127. data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +10 -1
  128. data/{man → lib/bundler/man}/bundle-outdated.1 +23 -75
  129. data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +21 -22
  130. data/lib/bundler/man/bundle-platform.1 +49 -0
  131. data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  132. data/lib/bundler/man/bundle-plugin.1 +58 -0
  133. data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  134. data/{man → lib/bundler/man}/bundle-pristine.1 +5 -16
  135. data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +1 -1
  136. data/{man → lib/bundler/man}/bundle-remove.1 +4 -14
  137. data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +1 -1
  138. data/{man → lib/bundler/man}/bundle-show.1 +7 -11
  139. data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +4 -0
  140. data/{man → lib/bundler/man}/bundle-update.1 +35 -148
  141. data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +21 -12
  142. data/lib/bundler/man/bundle-version.1 +22 -0
  143. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  144. data/{man → lib/bundler/man}/bundle-viz.1 +9 -18
  145. data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +9 -3
  146. data/{man → lib/bundler/man}/bundle.1 +19 -53
  147. data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  148. data/{man → lib/bundler/man}/gemfile.5 +139 -356
  149. data/{man → lib/bundler/man}/gemfile.5.ronn +134 -97
  150. data/{man → lib/bundler/man}/index.txt +9 -1
  151. data/lib/bundler/match_metadata.rb +17 -0
  152. data/lib/bundler/match_platform.rb +2 -3
  153. data/lib/bundler/match_remote_metadata.rb +29 -0
  154. data/lib/bundler/materialization.rb +59 -0
  155. data/lib/bundler/mirror.rb +10 -12
  156. data/lib/bundler/plugin/api/source.rb +34 -18
  157. data/lib/bundler/plugin/api.rb +1 -1
  158. data/lib/bundler/plugin/dsl.rb +1 -1
  159. data/lib/bundler/plugin/events.rb +24 -0
  160. data/lib/bundler/plugin/index.rb +44 -9
  161. data/lib/bundler/plugin/installer/git.rb +0 -4
  162. data/lib/bundler/plugin/installer/path.rb +18 -0
  163. data/lib/bundler/plugin/installer/rubygems.rb +1 -9
  164. data/lib/bundler/plugin/installer.rb +63 -27
  165. data/lib/bundler/plugin/source_list.rb +5 -1
  166. data/lib/bundler/plugin.rb +131 -45
  167. data/lib/bundler/process_lock.rb +10 -14
  168. data/lib/bundler/remote_specification.rb +22 -10
  169. data/lib/bundler/resolver/base.rb +118 -0
  170. data/lib/bundler/resolver/candidate.rb +82 -0
  171. data/lib/bundler/resolver/incompatibility.rb +15 -0
  172. data/lib/bundler/resolver/package.rb +90 -0
  173. data/lib/bundler/resolver/root.rb +25 -0
  174. data/lib/bundler/resolver/spec_group.rb +60 -68
  175. data/lib/bundler/resolver.rb +454 -303
  176. data/lib/bundler/retry.rb +6 -6
  177. data/lib/bundler/ruby_dsl.rb +51 -7
  178. data/lib/bundler/ruby_version.rb +23 -38
  179. data/lib/bundler/rubygems_ext.rb +357 -98
  180. data/lib/bundler/rubygems_gem_installer.rb +131 -65
  181. data/lib/bundler/rubygems_integration.rb +149 -591
  182. data/lib/bundler/runtime.rb +51 -51
  183. data/lib/bundler/safe_marshal.rb +31 -0
  184. data/lib/bundler/self_manager.rb +206 -0
  185. data/lib/bundler/settings.rb +271 -135
  186. data/lib/bundler/setup.rb +23 -12
  187. data/lib/bundler/shared_helpers.rb +127 -117
  188. data/lib/bundler/similarity_detector.rb +3 -3
  189. data/lib/bundler/source/git/git_proxy.rb +326 -127
  190. data/lib/bundler/source/git.rb +207 -88
  191. data/lib/bundler/source/metadata.rb +19 -18
  192. data/lib/bundler/source/path/installer.rb +11 -32
  193. data/lib/bundler/source/path.rb +39 -38
  194. data/lib/bundler/source/rubygems/remote.rb +3 -4
  195. data/lib/bundler/source/rubygems.rb +223 -255
  196. data/lib/bundler/source/rubygems_aggregate.rb +68 -0
  197. data/lib/bundler/source.rb +33 -11
  198. data/lib/bundler/source_list.rb +131 -66
  199. data/lib/bundler/source_map.rb +71 -0
  200. data/lib/bundler/spec_set.rb +239 -94
  201. data/lib/bundler/stub_specification.rb +77 -39
  202. data/lib/bundler/templates/Executable +3 -5
  203. data/lib/bundler/templates/Executable.bundler +23 -19
  204. data/lib/bundler/templates/Executable.standalone +4 -4
  205. data/lib/bundler/templates/Gemfile +0 -2
  206. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  207. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +104 -46
  208. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  209. data/lib/bundler/templates/newgem/Gemfile.tt +19 -2
  210. data/lib/bundler/templates/newgem/README.md.tt +18 -16
  211. data/lib/bundler/templates/newgem/Rakefile.tt +44 -6
  212. data/lib/bundler/templates/newgem/bin/console.tt +1 -4
  213. data/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  214. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  215. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  216. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  217. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  218. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  219. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  220. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  221. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  222. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  223. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  224. data/lib/bundler/templates/newgem/newgem.gemspec.tt +37 -40
  225. data/lib/bundler/templates/newgem/rubocop.yml.tt +8 -0
  226. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  227. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  228. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  229. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  230. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  231. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  232. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  233. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  234. data/lib/bundler/ui/rg_proxy.rb +2 -2
  235. data/lib/bundler/ui/shell.rb +64 -23
  236. data/lib/bundler/ui/silent.rb +33 -6
  237. data/lib/bundler/ui.rb +3 -3
  238. data/lib/bundler/uri_credentials_filter.rb +11 -5
  239. data/lib/bundler/uri_normalizer.rb +23 -0
  240. data/lib/bundler/vendor/.document +1 -0
  241. data/lib/bundler/vendor/connection_pool/.document +1 -0
  242. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  243. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  244. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  245. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  246. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
  247. data/lib/bundler/vendor/fileutils/.document +1 -0
  248. data/lib/bundler/vendor/fileutils/COPYING +56 -0
  249. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1490 -432
  250. data/lib/bundler/vendor/net-http-persistent/.document +1 -0
  251. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  252. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  253. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  254. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  255. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +362 -484
  256. data/lib/bundler/vendor/pub_grub/.document +1 -0
  257. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  258. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  259. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  260. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  261. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  262. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  263. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  264. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  265. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  266. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  267. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  268. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  269. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  270. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  271. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  272. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  273. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  274. data/lib/bundler/vendor/securerandom/.document +1 -0
  275. data/lib/bundler/vendor/securerandom/COPYING +56 -0
  276. data/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  277. data/lib/bundler/vendor/thor/.document +1 -0
  278. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  279. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +4 -3
  280. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  281. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +8 -18
  282. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  283. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +27 -20
  284. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +34 -13
  285. data/lib/bundler/vendor/thor/lib/thor/actions.rb +47 -28
  286. data/lib/bundler/vendor/thor/lib/thor/base.rb +200 -54
  287. data/lib/bundler/vendor/thor/lib/thor/command.rb +34 -18
  288. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
  289. data/lib/bundler/vendor/thor/lib/thor/error.rb +74 -0
  290. data/lib/bundler/vendor/thor/lib/thor/group.rb +15 -4
  291. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +2 -1
  292. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  293. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  294. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  295. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  296. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
  297. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +35 -15
  298. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +45 -13
  299. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +86 -13
  300. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  301. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +3 -2
  302. data/lib/bundler/vendor/thor/lib/thor/runner.rb +51 -40
  303. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +99 -148
  304. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +6 -43
  305. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  306. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +4 -49
  307. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  308. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  309. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  310. data/lib/bundler/vendor/thor/lib/thor/shell.rb +6 -6
  311. data/lib/bundler/vendor/thor/lib/thor/util.rb +26 -9
  312. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  313. data/lib/bundler/vendor/thor/lib/thor.rb +182 -17
  314. data/lib/bundler/vendor/tsort/.document +1 -0
  315. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  316. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  317. data/lib/bundler/vendor/uri/.document +1 -0
  318. data/lib/bundler/vendor/uri/COPYING +56 -0
  319. data/lib/bundler/vendor/uri/lib/uri/common.rb +876 -0
  320. data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  321. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  322. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1578 -0
  323. data/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  324. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  325. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  326. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  327. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  328. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  329. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  330. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  331. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  332. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  333. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  334. data/lib/bundler/vendored_fileutils.rb +1 -6
  335. data/lib/bundler/vendored_net_http.rb +23 -0
  336. data/lib/bundler/vendored_persistent.rb +1 -42
  337. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  338. data/lib/bundler/vendored_securerandom.rb +12 -0
  339. data/lib/bundler/vendored_thor.rb +2 -2
  340. data/lib/bundler/vendored_timeout.rb +12 -0
  341. data/lib/bundler/vendored_tsort.rb +4 -0
  342. data/lib/bundler/vendored_uri.rb +21 -0
  343. data/lib/bundler/version.rb +5 -20
  344. data/lib/bundler/vlad.rb +3 -3
  345. data/lib/bundler/worker.rb +26 -15
  346. data/lib/bundler/yaml_serializer.rb +21 -13
  347. data/lib/bundler.rb +364 -230
  348. metadata +186 -218
  349. data/exe/bundle_ruby +0 -60
  350. data/lib/bundler/cli/package.rb +0 -49
  351. data/lib/bundler/compatibility_guard.rb +0 -14
  352. data/lib/bundler/dep_proxy.rb +0 -48
  353. data/lib/bundler/gem_remote_fetcher.rb +0 -43
  354. data/lib/bundler/gemdeps.rb +0 -29
  355. data/lib/bundler/psyched_yaml.rb +0 -37
  356. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  357. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  358. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  359. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  360. data/lib/bundler/templates/gems.rb +0 -8
  361. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -3
  362. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  363. data/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  364. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  365. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  366. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  367. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  368. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  369. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  370. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  371. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  372. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  373. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  374. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  375. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  376. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  377. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  378. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  379. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  380. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  381. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  382. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  383. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  384. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  385. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  386. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  387. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  388. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  389. data/lib/bundler/version_ranges.rb +0 -76
  390. data/man/bundle-add.1 +0 -58
  391. data/man/bundle-add.1.txt +0 -52
  392. data/man/bundle-add.ronn +0 -40
  393. data/man/bundle-binstubs.1.txt +0 -48
  394. data/man/bundle-check.1.txt +0 -33
  395. data/man/bundle-clean.1.txt +0 -26
  396. data/man/bundle-config.1.txt +0 -529
  397. data/man/bundle-doctor.1.txt +0 -44
  398. data/man/bundle-exec.1.txt +0 -178
  399. data/man/bundle-gem.1 +0 -80
  400. data/man/bundle-gem.1.txt +0 -91
  401. data/man/bundle-gem.ronn +0 -78
  402. data/man/bundle-info.1 +0 -20
  403. data/man/bundle-info.1.txt +0 -21
  404. data/man/bundle-info.ronn +0 -17
  405. data/man/bundle-init.1.txt +0 -34
  406. data/man/bundle-inject.1 +0 -33
  407. data/man/bundle-inject.1.txt +0 -32
  408. data/man/bundle-install.1.txt +0 -396
  409. data/man/bundle-list.1.txt +0 -43
  410. data/man/bundle-lock.1.txt +0 -93
  411. data/man/bundle-open.1 +0 -32
  412. data/man/bundle-open.1.txt +0 -29
  413. data/man/bundle-outdated.1.txt +0 -131
  414. data/man/bundle-package.1 +0 -55
  415. data/man/bundle-package.1.txt +0 -79
  416. data/man/bundle-package.ronn +0 -72
  417. data/man/bundle-platform.1 +0 -61
  418. data/man/bundle-platform.1.txt +0 -57
  419. data/man/bundle-pristine.1.txt +0 -44
  420. data/man/bundle-remove.1.txt +0 -34
  421. data/man/bundle-show.1.txt +0 -27
  422. data/man/bundle-update.1.txt +0 -391
  423. data/man/bundle-viz.1.txt +0 -39
  424. data/man/bundle.1.txt +0 -116
  425. data/man/gemfile.5.txt +0 -653
  426. /data/lib/bundler/{ssl_certs → man}/.document +0 -0
data/LICENSE.md CHANGED
@@ -1,23 +1,22 @@
1
- Portions copyright (c) 2010 Andre Arko
2
- Portions copyright (c) 2009 Engine Yard
1
+ The MIT License
3
2
 
4
- MIT License
3
+ Portions copyright (c) 2010-2019 André Arko
4
+ Portions copyright (c) 2009 Engine Yard
5
5
 
6
- Permission is hereby granted, free of charge, to any person obtaining
7
- a copy of this software and associated documentation files (the
8
- "Software"), to deal in the Software without restriction, including
9
- without limitation the rights to use, copy, modify, merge, publish,
10
- distribute, sublicense, and/or sell copies of the Software, and to
11
- permit persons to whom the Software is furnished to do so, subject to
12
- the following conditions:
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
13
12
 
14
- The above copyright notice and this permission notice shall be
15
- included in all copies or substantial portions of the Software.
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
16
15
 
17
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
data/README.md CHANGED
@@ -1,8 +1,4 @@
1
- [![Version ](https://img.shields.io/gem/v/bundler.svg?style=flat)](https://rubygems.org/gems/bundler)
2
- [![Build Status](https://img.shields.io/travis/bundler/bundler/master.svg?style=flat)](https://travis-ci.org/bundler/bundler)
3
- [![Code Climate](https://img.shields.io/codeclimate/github/bundler/bundler.svg?style=flat)](https://codeclimate.com/github/bundler/bundler)
4
- [![Inline docs ](http://inch-ci.org/github/bundler/bundler.svg?style=flat)](http://inch-ci.org/github/bundler/bundler)
5
- [![Slack ](http://bundler-slackin.herokuapp.com/badge.svg)](http://bundler-slackin.herokuapp.com)
1
+ [![Version ](https://img.shields.io/gem/v/bundler.svg?style=flat)](https://rubygems.org/gems/bundler)
6
2
 
7
3
  # Bundler: a gem to bundle gems
8
4
 
@@ -29,35 +25,34 @@ bundle install
29
25
  bundle exec rspec
30
26
  ```
31
27
 
32
- See [bundler.io](http://bundler.io) for the full documentation.
28
+ See [bundler.io](https://bundler.io) for the full documentation.
33
29
 
34
30
  ### Troubleshooting
35
31
 
36
- For help with common problems, see [TROUBLESHOOTING](doc/TROUBLESHOOTING.md).
32
+ For help with common problems, see [TROUBLESHOOTING](../doc/bundler/TROUBLESHOOTING.md).
37
33
 
38
- Still stuck? Try [filing an issue](doc/contributing/ISSUES.md).
34
+ Still stuck? Try [filing an issue](https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md).
39
35
 
40
36
  ### Other questions
41
37
 
42
38
  To see what has changed in recent versions of Bundler, see the [CHANGELOG](CHANGELOG.md).
43
39
 
44
- To get in touch with the Bundler core team and other Bundler users, please see [getting help](doc/contributing/GETTING_HELP.md).
40
+ To get in touch with the Bundler core team and other Bundler users, please join [the Bundler slack](https://join.slack.com/t/bundler/shared_invite/zt-1rrsuuv3m-OmXKWQf8K6iSla4~F1DBjQ).
45
41
 
46
42
  ### Contributing
47
43
 
48
- If you'd like to contribute to Bundler, that's awesome, and we <3 you. There's a guide to contributing to Bundler (both code and general help) over in [our documentation section](doc/README.md).
44
+ If you'd like to contribute to Bundler, that's awesome, and we <3 you. We've put together [the Bundler contributor guide](https://github.com/rubygems/rubygems/blob/master/bundler/doc/contributing/README.md) with all of the information you need to get started.
49
45
 
50
- While some Bundler contributors are compensated by Ruby Together, the project maintainers make decisions independent of Ruby Together. As a project, we welcome contributions regardless of the author’s affiliation with Ruby Together.
46
+ If you'd like to request a substantial change to Bundler or its documentation, refer to the [Bundler RFC process](https://github.com/rubygems/rfcs) for more information.
51
47
 
52
48
  ### Supporting
53
49
 
54
- <a href="https://rubytogether.org/"><img src="https://rubytogether.org/images/rubies.svg" width="150"></a><br>
55
- <a href="https://rubytogether.org/">Ruby Together</a> pays some Bundler maintainers for their ongoing work. As a grassroots initiative committed to supporting the critical Ruby infrastructure you rely on, Ruby Together is funded entirely by the Ruby community. Contribute today <a href="https://rubytogether.org/developers">as an individual</a> or (better yet) <a href="https://rubytogether.org/companies">as a company</a> to ensure that Bundler, RubyGems, and other shared tooling is around for years to come.
50
+ RubyGems is managed by [Ruby Central](https://rubycentral.org), a non-profit organization that supports the Ruby community through projects like this one, as well as [RubyConf](https://rubyconf.org), [RailsConf](https://railsconf.org), and [RubyGems.org](https://rubygems.org). You can support Ruby Central by attending or [sponsoring](sponsors@rubycentral.org) a conference, or by [joining as a supporting member](https://rubycentral.org/#/portal/signup).
56
51
 
57
52
  ### Code of Conduct
58
53
 
59
- Everyone interacting in the Bundler projects codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [Bundler code of conduct](https://github.com/bundler/bundler/blob/master/CODE_OF_CONDUCT.md).
54
+ Everyone interacting in the Bundler project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [Bundler code of conduct](https://github.com/rubygems/rubygems/blob/master/CODE_OF_CONDUCT.md).
60
55
 
61
56
  ### License
62
57
 
63
- [MIT License](https://github.com/bundler/bundler/blob/master/LICENSE.md)
58
+ Bundler is available under an [MIT License](https://github.com/rubygems/rubygems/blob/master/bundler/LICENSE.md).
data/bundler.gemspec CHANGED
@@ -1,15 +1,12 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  begin
5
- require File.expand_path("../lib/bundler/version", __FILE__)
4
+ require_relative "lib/bundler/version"
6
5
  rescue LoadError
7
6
  # for Ruby core repository
8
- require File.expand_path("../bundler/version", __FILE__)
7
+ require_relative "version"
9
8
  end
10
9
 
11
- require "shellwords"
12
-
13
10
  Gem::Specification.new do |s|
14
11
  s.name = "bundler"
15
12
  s.version = Bundler::VERSION
@@ -21,43 +18,28 @@ Gem::Specification.new do |s|
21
18
  "Yehuda Katz"
22
19
  ]
23
20
  s.email = ["team@bundler.io"]
24
- s.homepage = "http://bundler.io"
21
+ s.homepage = "https://bundler.io"
25
22
  s.summary = "The best way to manage your application's dependencies"
26
23
  s.description = "Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably"
27
24
 
28
- if s.respond_to?(:metadata=)
29
- s.metadata = {
30
- "bug_tracker_uri" => "http://github.com/bundler/bundler/issues",
31
- "changelog_uri" => "https://github.com/bundler/bundler/blob/master/CHANGELOG.md",
32
- "homepage_uri" => "https://bundler.io/",
33
- "source_code_uri" => "http://github.com/bundler/bundler/",
34
- }
35
- end
25
+ s.metadata = {
26
+ "bug_tracker_uri" => "https://github.com/rubygems/rubygems/issues?q=is%3Aopen+is%3Aissue+label%3ABundler",
27
+ "changelog_uri" => "https://github.com/rubygems/rubygems/blob/master/bundler/CHANGELOG.md",
28
+ "homepage_uri" => "https://bundler.io/",
29
+ "source_code_uri" => "https://github.com/rubygems/rubygems/tree/master/bundler",
30
+ }
36
31
 
37
- if s.version >= Gem::Version.new("2.a".dup)
38
- s.required_ruby_version = ">= 2.3.0"
39
- s.required_rubygems_version = ">= 2.5.0"
40
- else
41
- s.required_ruby_version = ">= 1.8.7"
42
- s.required_rubygems_version = ">= 1.3.6"
43
- end
32
+ s.required_ruby_version = ">= 3.1.0"
44
33
 
45
- s.add_development_dependency "automatiek", "~> 0.1.0"
46
- s.add_development_dependency "mustache", "0.99.6"
47
- s.add_development_dependency "rake", "~> 10.0"
48
- s.add_development_dependency "rdiscount", "~> 2.2"
49
- s.add_development_dependency "ronn", "~> 0.7.3"
50
- s.add_development_dependency "rspec", "~> 3.6"
34
+ # It should match the RubyGems version shipped with `required_ruby_version` above
35
+ s.required_rubygems_version = ">= 3.3.3"
36
+
37
+ s.files = Dir.glob("lib/bundler{.rb,/**/*}", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
51
38
 
52
- s.files = `git ls-files -z`.split("\x0").select {|f| f.match(%r{^(lib|exe)/}) }
53
- # we don't check in man pages, but we need to ship them because
54
- # we use them to generate the long-form help for each command.
55
- s.files += Dir.glob("man/**/*")
56
- # Include the CHANGELOG.md, LICENSE.md, README.md manually
57
- s.files += %w[CHANGELOG.md LICENSE.md README.md]
58
39
  # include the gemspec itself because warbler breaks w/o it
59
40
  s.files += %w[bundler.gemspec]
60
41
 
42
+ s.files += %w[CHANGELOG.md LICENSE.md README.md]
61
43
  s.bindir = "exe"
62
44
  s.executables = %w[bundle bundler]
63
45
  s.require_paths = ["lib"]
data/exe/bundle CHANGED
@@ -7,18 +7,16 @@ Signal.trap("INT") do
7
7
  exit 1
8
8
  end
9
9
 
10
- require "bundler"
11
- # Check if an older version of bundler is installed
12
- $LOAD_PATH.each do |path|
13
- next unless path =~ %r{/bundler-0\.(\d+)} && $1.to_i < 9
14
- err = String.new
15
- err << "Looks like you have a version of bundler that's older than 0.9.\n"
16
- err << "Please remove your old versions.\n"
17
- err << "An easy way to do this is by running `gem cleanup bundler`."
18
- abort(err)
10
+ base_path = File.expand_path("../lib", __dir__)
11
+
12
+ if File.exist?(base_path)
13
+ $LOAD_PATH.unshift(base_path)
19
14
  end
20
15
 
16
+ require "bundler"
17
+
21
18
  require "bundler/friendly_errors"
19
+
22
20
  Bundler.with_friendly_errors do
23
21
  require "bundler/cli"
24
22
 
@@ -27,5 +25,5 @@ Bundler.with_friendly_errors do
27
25
  help_flag_used = ARGV.any? {|a| help_flags.include? a }
28
26
  args = help_flag_used ? Bundler::CLI.reformatted_help_args(ARGV) : ARGV
29
27
 
30
- Bundler::CLI.start(args, :debug => true)
28
+ Bundler::CLI.start(args, debug: true)
31
29
  end
data/exe/bundler CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- load File.expand_path("../bundle", __FILE__)
4
+ load File.expand_path("bundle", __dir__)
@@ -0,0 +1 @@
1
+ # not in RDoc
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2018-12-27".freeze
8
- @git_commit_sha = "d7089abb6".freeze
7
+ @built_at = "2025-01-16".freeze
8
+ @git_commit_sha = "3c7c4ff2d8f".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -25,21 +25,13 @@ module Bundler
25
25
 
26
26
  # The SHA for the git commit the bundler gem was built from.
27
27
  def self.git_commit_sha
28
- return @git_commit_sha if @git_commit_sha
28
+ return @git_commit_sha if instance_variable_defined? :@git_commit_sha
29
29
 
30
30
  # If Bundler has been installed without its .git directory and without a
31
31
  # commit instance variable then we can't determine its commits SHA.
32
- git_dir = File.join(File.expand_path("../../..", __FILE__), ".git")
32
+ git_dir = File.expand_path("../../../.git", __dir__)
33
33
  if File.directory?(git_dir)
34
- return @git_commit_sha = Dir.chdir(git_dir) { `git rev-parse --short HEAD`.strip.freeze }
35
- end
36
-
37
- # If Bundler is a submodule in RubyGems, get the submodule commit
38
- git_sub_dir = File.join(File.expand_path("../../../..", __FILE__), ".git")
39
- if File.directory?(git_sub_dir)
40
- return @git_commit_sha = Dir.chdir(git_sub_dir) do
41
- `git ls-tree --abbrev=8 HEAD bundler`.split(/\s/).fetch(2, "").strip.freeze
42
- end
34
+ return @git_commit_sha = IO.popen(%w[git rev-parse --short HEAD], { chdir: git_dir }, &:read).strip.freeze
43
35
  end
44
36
 
45
37
  @git_commit_sha ||= "unknown"
@@ -1,22 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/shared_helpers"
3
+ require_relative "shared_helpers"
4
4
  Bundler::SharedHelpers.major_deprecation 2,
5
- "The Bundler task for Capistrano. Please use http://github.com/capistrano/bundler"
5
+ "The Bundler task for Capistrano. Please use https://github.com/capistrano/bundler"
6
6
 
7
7
  # Capistrano task for Bundler.
8
8
  #
9
9
  # Add "require 'bundler/capistrano'" in your Capistrano deploy.rb, and
10
10
  # Bundler will be activated after each new deployment.
11
- require "bundler/deployment"
11
+ require_relative "deployment"
12
12
  require "capistrano/version"
13
13
 
14
14
  if defined?(Capistrano::Version) && Gem::Version.new(Capistrano::Version).release >= Gem::Version.new("3.0")
15
- raise "For Capistrano 3.x integration, please use http://github.com/capistrano/bundler"
15
+ raise "For Capistrano 3.x integration, please use https://github.com/capistrano/bundler"
16
16
  end
17
17
 
18
18
  Capistrano::Configuration.instance(:must_exist).load do
19
19
  before "deploy:finalize_update", "bundle:install"
20
- Bundler::Deployment.define_task(self, :task, :except => { :no_release => true })
20
+ Bundler::Deployment.define_task(self, :task, except: { no_release: true })
21
21
  set :rake, lambda { "#{fetch(:bundle_cmd, "bundle")} exec rake" }
22
22
  end
@@ -0,0 +1,254 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class Checksum
5
+ ALGO_SEPARATOR = "="
6
+ DEFAULT_ALGORITHM = "sha256"
7
+ private_constant :DEFAULT_ALGORITHM
8
+ DEFAULT_BLOCK_SIZE = 16_384
9
+ private_constant :DEFAULT_BLOCK_SIZE
10
+
11
+ class << self
12
+ def from_gem_package(gem_package, algo = DEFAULT_ALGORITHM)
13
+ return if Bundler.settings[:disable_checksum_validation]
14
+ return unless source = gem_package.instance_variable_get(:@gem)
15
+ return unless source.respond_to?(:with_read_io)
16
+
17
+ source.with_read_io do |io|
18
+ from_gem(io, source.path)
19
+ ensure
20
+ io.rewind
21
+ end
22
+ end
23
+
24
+ def from_gem(io, pathname, algo = DEFAULT_ALGORITHM)
25
+ digest = Bundler::SharedHelpers.digest(algo.upcase).new
26
+ buf = String.new(capacity: DEFAULT_BLOCK_SIZE)
27
+ digest << io.readpartial(DEFAULT_BLOCK_SIZE, buf) until io.eof?
28
+ Checksum.new(algo, digest.hexdigest!, Source.new(:gem, pathname))
29
+ end
30
+
31
+ def from_api(digest, source_uri, algo = DEFAULT_ALGORITHM)
32
+ return if Bundler.settings[:disable_checksum_validation]
33
+
34
+ Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:api, source_uri))
35
+ end
36
+
37
+ def from_lock(lock_checksum, lockfile_location)
38
+ algo, digest = lock_checksum.strip.split(ALGO_SEPARATOR, 2)
39
+ Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:lock, lockfile_location))
40
+ end
41
+
42
+ def to_hexdigest(digest, algo = DEFAULT_ALGORITHM)
43
+ return digest unless algo == DEFAULT_ALGORITHM
44
+ return digest if digest.match?(/\A[0-9a-f]{64}\z/i)
45
+
46
+ if digest.match?(%r{\A[-0-9a-z_+/]{43}={0,2}\z}i)
47
+ digest = digest.tr("-_", "+/") # fix urlsafe base64
48
+ digest.unpack1("m0").unpack1("H*")
49
+ else
50
+ raise ArgumentError, "#{digest.inspect} is not a valid SHA256 hex or base64 digest"
51
+ end
52
+ end
53
+ end
54
+
55
+ attr_reader :algo, :digest, :sources
56
+
57
+ def initialize(algo, digest, source)
58
+ @algo = algo
59
+ @digest = digest
60
+ @sources = [source]
61
+ end
62
+
63
+ def ==(other)
64
+ match?(other) && other.sources == sources
65
+ end
66
+
67
+ alias_method :eql?, :==
68
+
69
+ def same_source?(other)
70
+ sources.include?(other.sources.first)
71
+ end
72
+
73
+ def match?(other)
74
+ other.is_a?(self.class) && other.digest == digest && other.algo == algo
75
+ end
76
+
77
+ def hash
78
+ digest.hash
79
+ end
80
+
81
+ def to_s
82
+ "#{to_lock} (from #{sources.first}#{", ..." if sources.size > 1})"
83
+ end
84
+
85
+ def to_lock
86
+ "#{algo}#{ALGO_SEPARATOR}#{digest}"
87
+ end
88
+
89
+ def merge!(other)
90
+ return nil unless match?(other)
91
+
92
+ @sources.concat(other.sources).uniq!
93
+ self
94
+ end
95
+
96
+ def formatted_sources
97
+ sources.join("\n and ").concat("\n")
98
+ end
99
+
100
+ def removable?
101
+ sources.all?(&:removable?)
102
+ end
103
+
104
+ def removal_instructions
105
+ msg = +""
106
+ i = 1
107
+ sources.each do |source|
108
+ msg << " #{i}. #{source.removal}\n"
109
+ i += 1
110
+ end
111
+ msg << " #{i}. run `bundle install`\n"
112
+ end
113
+
114
+ def inspect
115
+ abbr = "#{algo}#{ALGO_SEPARATOR}#{digest[0, 8]}"
116
+ from = "from #{sources.join(" and ")}"
117
+ "#<#{self.class}:#{object_id} #{abbr} #{from}>"
118
+ end
119
+
120
+ class Source
121
+ attr_reader :type, :location
122
+
123
+ def initialize(type, location)
124
+ @type = type
125
+ @location = location
126
+ end
127
+
128
+ def removable?
129
+ type == :lock || type == :gem
130
+ end
131
+
132
+ def ==(other)
133
+ other.is_a?(self.class) && other.type == type && other.location == location
134
+ end
135
+
136
+ # phrased so that the usual string format is grammatically correct
137
+ # rake (10.3.2) sha256=abc123 from #{to_s}
138
+ def to_s
139
+ case type
140
+ when :lock
141
+ "the lockfile CHECKSUMS at #{location}"
142
+ when :gem
143
+ "the gem at #{location}"
144
+ when :api
145
+ "the API at #{location}"
146
+ else
147
+ "#{location} (#{type})"
148
+ end
149
+ end
150
+
151
+ # A full sentence describing how to remove the checksum
152
+ def removal
153
+ case type
154
+ when :lock
155
+ "remove the matching checksum in #{location}"
156
+ when :gem
157
+ "remove the gem at #{location}"
158
+ when :api
159
+ "checksums from #{location} cannot be locally modified, you may need to update your sources"
160
+ else
161
+ "remove #{location} (#{type})"
162
+ end
163
+ end
164
+ end
165
+
166
+ class Store
167
+ attr_reader :store
168
+ protected :store
169
+
170
+ def initialize
171
+ @store = {}
172
+ @store_mutex = Mutex.new
173
+ end
174
+
175
+ def inspect
176
+ "#<#{self.class}:#{object_id} size=#{store.size}>"
177
+ end
178
+
179
+ # Replace when the new checksum is from the same source.
180
+ # The primary purpose is registering checksums from gems where there are
181
+ # duplicates of the same gem (according to full_name) in the index.
182
+ #
183
+ # In particular, this is when 2 gems have two similar platforms, e.g.
184
+ # "darwin20" and "darwin-20", both of which resolve to darwin-20.
185
+ # In the Index, the later gem replaces the former, so we do that here.
186
+ #
187
+ # However, if the new checksum is from a different source, we register like normal.
188
+ # This ensures a mismatch error where there are multiple top level sources
189
+ # that contain the same gem with different checksums.
190
+ def replace(spec, checksum)
191
+ return unless checksum
192
+
193
+ lock_name = spec.name_tuple.lock_name
194
+ @store_mutex.synchronize do
195
+ existing = fetch_checksum(lock_name, checksum.algo)
196
+ if !existing || existing.same_source?(checksum)
197
+ store_checksum(lock_name, checksum)
198
+ else
199
+ merge_checksum(lock_name, checksum, existing)
200
+ end
201
+ end
202
+ end
203
+
204
+ def register(spec, checksum)
205
+ return unless checksum
206
+
207
+ register_checksum(spec.name_tuple.lock_name, checksum)
208
+ end
209
+
210
+ def merge!(other)
211
+ other.store.each do |lock_name, checksums|
212
+ checksums.each do |_algo, checksum|
213
+ register_checksum(lock_name, checksum)
214
+ end
215
+ end
216
+ end
217
+
218
+ def to_lock(spec)
219
+ lock_name = spec.name_tuple.lock_name
220
+ checksums = @store[lock_name]
221
+ if checksums
222
+ "#{lock_name} #{checksums.values.map(&:to_lock).sort.join(",")}"
223
+ else
224
+ lock_name
225
+ end
226
+ end
227
+
228
+ private
229
+
230
+ def register_checksum(lock_name, checksum)
231
+ @store_mutex.synchronize do
232
+ existing = fetch_checksum(lock_name, checksum.algo)
233
+ if existing
234
+ merge_checksum(lock_name, checksum, existing)
235
+ else
236
+ store_checksum(lock_name, checksum)
237
+ end
238
+ end
239
+ end
240
+
241
+ def merge_checksum(lock_name, checksum, existing)
242
+ existing.merge!(checksum) || raise(ChecksumMismatchError.new(lock_name, existing, checksum))
243
+ end
244
+
245
+ def store_checksum(lock_name, checksum)
246
+ (@store[lock_name] ||= {})[checksum.algo] = checksum
247
+ end
248
+
249
+ def fetch_checksum(lock_name, algo)
250
+ @store[lock_name]&.fetch(algo, nil)
251
+ end
252
+ end
253
+ end
254
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module CIDetector
5
+ # NOTE: Any changes made here will need to be made to both lib/rubygems/ci_detector.rb and
6
+ # bundler/lib/bundler/ci_detector.rb (which are enforced duplicates).
7
+ # TODO: Drop that duplication once bundler drops support for RubyGems 3.4
8
+ #
9
+ # ## Recognized CI providers, their signifiers, and the relevant docs ##
10
+ #
11
+ # Travis CI - CI, TRAVIS https://docs.travis-ci.com/user/environment-variables/#default-environment-variables
12
+ # Cirrus CI - CI, CIRRUS_CI https://cirrus-ci.org/guide/writing-tasks/#environment-variables
13
+ # Circle CI - CI, CIRCLECI https://circleci.com/docs/variables/#built-in-environment-variables
14
+ # Gitlab CI - CI, GITLAB_CI https://docs.gitlab.com/ee/ci/variables/
15
+ # AppVeyor - CI, APPVEYOR https://www.appveyor.com/docs/environment-variables/
16
+ # CodeShip - CI_NAME https://docs.cloudbees.com/docs/cloudbees-codeship/latest/pro-builds-and-configuration/environment-variables#_default_environment_variables
17
+ # dsari - CI, DSARI https://github.com/rfinnie/dsari#running
18
+ # Jenkins - BUILD_NUMBER https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
19
+ # TeamCity - TEAMCITY_VERSION https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html#Predefined+Server+Build+Parameters
20
+ # Appflow - CI_BUILD_ID https://ionic.io/docs/appflow/automation/environments#predefined-environments
21
+ # TaskCluster - TASKCLUSTER_ROOT_URL https://docs.taskcluster.net/docs/manual/design/env-vars
22
+ # Semaphore - CI, SEMAPHORE https://docs.semaphoreci.com/ci-cd-environment/environment-variables/
23
+ # BuildKite - CI, BUILDKITE https://buildkite.com/docs/pipelines/environment-variables
24
+ # GoCD - GO_SERVER_URL https://docs.gocd.org/current/faq/dev_use_current_revision_in_build.html
25
+ # GH Actions - CI, GITHUB_ACTIONS https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
26
+ #
27
+ # ### Some "standard" ENVs that multiple providers may set ###
28
+ #
29
+ # * CI - this is set by _most_ (but not all) CI providers now; it's approaching a standard.
30
+ # * CI_NAME - Not as frequently used, but some providers set this to specify their own name
31
+
32
+ # Any of these being set is a reasonably reliable indicator that we are
33
+ # executing in a CI environment.
34
+ ENV_INDICATORS = [
35
+ "CI",
36
+ "CI_NAME",
37
+ "CONTINUOUS_INTEGRATION",
38
+ "BUILD_NUMBER",
39
+ "CI_APP_ID",
40
+ "CI_BUILD_ID",
41
+ "CI_BUILD_NUMBER",
42
+ "RUN_ID",
43
+ "TASKCLUSTER_ROOT_URL",
44
+ ].freeze
45
+
46
+ # For each CI, this env suffices to indicate that we're on _that_ CI's
47
+ # containers. (A few of them only supply a CI_NAME variable, which is also
48
+ # nice). And if they set "CI" but we can't tell which one they are, we also
49
+ # want to know that - a bare "ci" without another token tells us as much.
50
+ ENV_DESCRIPTORS = {
51
+ "TRAVIS" => "travis",
52
+ "CIRCLECI" => "circle",
53
+ "CIRRUS_CI" => "cirrus",
54
+ "DSARI" => "dsari",
55
+ "SEMAPHORE" => "semaphore",
56
+ "JENKINS_URL" => "jenkins",
57
+ "BUILDKITE" => "buildkite",
58
+ "GO_SERVER_URL" => "go",
59
+ "GITLAB_CI" => "gitlab",
60
+ "GITHUB_ACTIONS" => "github",
61
+ "TASKCLUSTER_ROOT_URL" => "taskcluster",
62
+ "CI" => "ci",
63
+ }.freeze
64
+
65
+ def self.ci?
66
+ ENV_INDICATORS.any? {|var| ENV.include?(var) }
67
+ end
68
+
69
+ def self.ci_strings
70
+ matching_names = ENV_DESCRIPTORS.select {|env, _| ENV[env] }.values
71
+ matching_names << ENV["CI_NAME"].downcase if ENV["CI_NAME"]
72
+ matching_names.reject(&:empty?).sort.uniq
73
+ end
74
+ end
75
+ end