bundler 2.2.29 → 2.5.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -28,10 +28,10 @@ module Bundler
28
28
  def initialize(command, path, extra_info = nil)
29
29
  @command = command
30
30
 
31
- msg = String.new
32
- msg << "Git error: command `#{command}` in directory #{path} has failed."
31
+ msg = String.new("Git error: command `#{command}`")
32
+ msg << " in directory #{path}" if path
33
+ msg << " has failed."
33
34
  msg << "\n#{extra_info}" if extra_info
34
- msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path.exist?
35
35
  super msg
36
36
  end
37
37
  end
@@ -43,70 +43,75 @@ module Bundler
43
43
  end
44
44
  end
45
45
 
46
+ class AmbiguousGitReference < GitError
47
+ def initialize(options)
48
+ msg = "Specification of branch or ref with tag is ambiguous. You specified #{options.inspect}"
49
+ super msg
50
+ end
51
+ end
52
+
46
53
  # The GitProxy is responsible to interact with git repositories.
47
54
  # All actions required by the Git source is encapsulated in this
48
55
  # object.
49
56
  class GitProxy
50
- attr_accessor :path, :uri, :ref
57
+ attr_accessor :path, :uri, :branch, :tag, :ref, :explicit_ref
51
58
  attr_writer :revision
52
59
 
53
- def initialize(path, uri, ref, revision = nil, git = nil)
60
+ def initialize(path, uri, options = {}, revision = nil, git = nil)
54
61
  @path = path
55
62
  @uri = uri
56
- @ref = ref
63
+ @tag = options["tag"]
64
+ @branch = options["branch"]
65
+ @ref = options["ref"]
66
+ if @tag
67
+ raise AmbiguousGitReference.new(options) if @branch || @ref
68
+ @explicit_ref = @tag
69
+ else
70
+ @explicit_ref = @ref || @branch
71
+ end
57
72
  @revision = revision
58
73
  @git = git
59
- raise GitNotInstalledError.new if allow? && !Bundler.git_present?
74
+ @commit_ref = nil
60
75
  end
61
76
 
62
77
  def revision
63
- @revision ||= find_local_revision
78
+ @revision ||= allowed_with_path { find_local_revision }
64
79
  end
65
80
 
66
- def branch
67
- @branch ||= allowed_with_path do
68
- git("rev-parse", "--abbrev-ref", "HEAD", :dir => path).strip
81
+ def current_branch
82
+ @current_branch ||= with_path do
83
+ git_local("rev-parse", "--abbrev-ref", "HEAD", dir: path).strip
69
84
  end
70
85
  end
71
86
 
72
87
  def contains?(commit)
73
88
  allowed_with_path do
74
- result, status = git_null("branch", "--contains", commit, :dir => path)
75
- status.success? && result =~ /^\* (.*)$/
89
+ result, status = git_null("branch", "--contains", commit, dir: path)
90
+ status.success? && result.match?(/^\* (.*)$/)
76
91
  end
77
92
  end
78
93
 
79
94
  def version
80
- git("--version").match(/(git version\s*)?((\.?\d+)+).*/)[2]
95
+ @version ||= full_version.match(/((\.?\d+)+).*/)[1]
81
96
  end
82
97
 
83
98
  def full_version
84
- git("--version").sub("git version", "").strip
99
+ @full_version ||= git_local("--version").sub(/git version\s*/, "").strip
85
100
  end
86
101
 
87
102
  def checkout
88
- return if path.exist? && has_revision_cached?
89
- extra_ref = "#{ref}:#{ref}" if ref && ref.start_with?("refs/")
103
+ return if has_revision_cached?
90
104
 
91
- Bundler.ui.info "Fetching #{URICredentialsFilter.credential_filtered_uri(uri)}"
105
+ Bundler.ui.info "Fetching #{credential_filtered_uri}"
92
106
 
93
- configured_uri = configured_uri_for(uri).to_s
107
+ extra_fetch_needed = clone_needs_extra_fetch?
108
+ unshallow_needed = clone_needs_unshallow?
109
+ return unless extra_fetch_needed || unshallow_needed
94
110
 
95
- unless path.exist?
96
- SharedHelpers.filesystem_access(path.dirname) do |p|
97
- FileUtils.mkdir_p(p)
98
- end
99
- git_retry "clone", configured_uri, path.to_s, "--bare", "--no-hardlinks", "--quiet"
100
- return unless extra_ref
101
- end
102
-
103
- with_path do
104
- git_retry(*["fetch", "--force", "--quiet", "--tags", configured_uri, "refs/heads/*:refs/heads/*", extra_ref].compact, :dir => path)
105
- end
111
+ git_remote_fetch(unshallow_needed ? ["--unshallow"] : depth_args)
106
112
  end
107
113
 
108
114
  def copy_to(destination, submodules = false)
109
- # method 1
110
115
  unless File.exist?(destination.join(".git"))
111
116
  begin
112
117
  SharedHelpers.filesystem_access(destination.dirname) do |p|
@@ -115,7 +120,7 @@ module Bundler
115
120
  SharedHelpers.filesystem_access(destination) do |p|
116
121
  FileUtils.rm_rf(p)
117
122
  end
118
- git_retry "clone", "--no-checkout", "--quiet", path.to_s, destination.to_s
123
+ git "clone", "--no-checkout", "--quiet", path.to_s, destination.to_s
119
124
  File.chmod(((File.stat(destination).mode | 0o777) & ~File.umask), destination)
120
125
  rescue Errno::EEXIST => e
121
126
  file_path = e.message[%r{.*?((?:[a-zA-Z]:)?/.*)}, 1]
@@ -124,91 +129,227 @@ module Bundler
124
129
  "this file and try again."
125
130
  end
126
131
  end
127
- # method 2
128
- git_retry "fetch", "--force", "--quiet", "--tags", path.to_s, :dir => destination
129
132
 
130
- begin
131
- git "reset", "--hard", @revision, :dir => destination
132
- rescue GitCommandError => e
133
- raise MissingGitRevisionError.new(e.command, destination, @revision, URICredentialsFilter.credential_filtered_uri(uri))
133
+ ref = @commit_ref || (locked_to_full_sha? && @revision)
134
+ if ref
135
+ git "config", "uploadpack.allowAnySHA1InWant", "true", dir: path.to_s if @commit_ref.nil? && needs_allow_any_sha1_in_want?
136
+
137
+ git "fetch", "--force", "--quiet", *extra_fetch_args(ref), dir: destination
134
138
  end
135
139
 
140
+ git "reset", "--hard", @revision, dir: destination
141
+
136
142
  if submodules
137
- git_retry "submodule", "update", "--init", "--recursive", :dir => destination
143
+ git_retry "submodule", "update", "--init", "--recursive", dir: destination
138
144
  elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
139
145
  inner_command = "git -C $toplevel submodule deinit --force $sm_path"
140
- git_retry "submodule", "foreach", "--quiet", inner_command, :dir => destination
146
+ git_retry "submodule", "foreach", "--quiet", inner_command, dir: destination
141
147
  end
142
148
  end
143
149
 
144
150
  private
145
151
 
146
- def git_null(*command, dir: nil)
147
- check_allowed(command)
152
+ def git_remote_fetch(args)
153
+ command = ["fetch", "--force", "--quiet", "--no-tags", *args, "--", configured_uri, refspec].compact
154
+ command_with_no_credentials = check_allowed(command)
155
+
156
+ Bundler::Retry.new("`#{command_with_no_credentials}` at #{path}", [MissingGitRevisionError]).attempts do
157
+ out, err, status = capture(command, path)
158
+ return out if status.success?
159
+
160
+ if err.include?("couldn't find remote ref") || err.include?("not our ref")
161
+ raise MissingGitRevisionError.new(command_with_no_credentials, path, commit || explicit_ref, credential_filtered_uri)
162
+ else
163
+ raise GitCommandError.new(command_with_no_credentials, path, err)
164
+ end
165
+ end
166
+ end
167
+
168
+ def clone_needs_extra_fetch?
169
+ return true if path.exist?
148
170
 
149
- out, status = SharedHelpers.with_clean_git_env do
150
- capture_and_ignore_stderr(*capture3_args_for(command, dir))
171
+ SharedHelpers.filesystem_access(path.dirname) do |p|
172
+ FileUtils.mkdir_p(p)
151
173
  end
152
174
 
153
- [URICredentialsFilter.credential_filtered_string(out, uri), status]
175
+ command = ["clone", "--bare", "--no-hardlinks", "--quiet", *extra_clone_args, "--", configured_uri, path.to_s]
176
+ command_with_no_credentials = check_allowed(command)
177
+
178
+ Bundler::Retry.new("`#{command_with_no_credentials}`", [MissingGitRevisionError]).attempts do
179
+ _, err, status = capture(command, nil)
180
+ return extra_ref if status.success?
181
+
182
+ if err.include?("Could not find remote branch")
183
+ raise MissingGitRevisionError.new(command_with_no_credentials, nil, explicit_ref, credential_filtered_uri)
184
+ else
185
+ idx = command.index("--depth")
186
+ if idx
187
+ command.delete_at(idx)
188
+ command.delete_at(idx)
189
+ command_with_no_credentials = check_allowed(command)
190
+
191
+ err += "Retrying without --depth argument."
192
+ end
193
+ raise GitCommandError.new(command_with_no_credentials, path, err)
194
+ end
195
+ end
196
+ end
197
+
198
+ def clone_needs_unshallow?
199
+ return false unless path.join("shallow").exist?
200
+ return true if full_clone?
201
+
202
+ @revision && @revision != head_revision
203
+ end
204
+
205
+ def extra_ref
206
+ return false if not_pinned?
207
+ return true unless full_clone?
208
+
209
+ ref.start_with?("refs/")
210
+ end
211
+
212
+ def depth
213
+ return @depth if defined?(@depth)
214
+
215
+ @depth = if !supports_fetching_unreachable_refs?
216
+ nil
217
+ elsif not_pinned? || pinned_to_full_sha?
218
+ 1
219
+ elsif ref.include?("~")
220
+ parsed_depth = ref.split("~").last
221
+ parsed_depth.to_i + 1
222
+ end
223
+ end
224
+
225
+ def refspec
226
+ if commit
227
+ @commit_ref = "refs/#{commit}-sha"
228
+ return "#{commit}:#{@commit_ref}"
229
+ end
230
+
231
+ reference = fully_qualified_ref
232
+
233
+ reference ||= if ref.include?("~")
234
+ ref.split("~").first
235
+ elsif ref.start_with?("refs/")
236
+ ref
237
+ else
238
+ "refs/*"
239
+ end
240
+
241
+ "#{reference}:#{reference}"
242
+ end
243
+
244
+ def commit
245
+ @commit ||= pinned_to_full_sha? ? ref : @revision
246
+ end
247
+
248
+ def fully_qualified_ref
249
+ if branch
250
+ "refs/heads/#{branch}"
251
+ elsif tag
252
+ "refs/tags/#{tag}"
253
+ elsif ref.nil?
254
+ "refs/heads/#{current_branch}"
255
+ end
256
+ end
257
+
258
+ def not_pinned?
259
+ branch || tag || ref.nil?
260
+ end
261
+
262
+ def pinned_to_full_sha?
263
+ full_sha_revision?(ref)
264
+ end
265
+
266
+ def locked_to_full_sha?
267
+ full_sha_revision?(@revision)
268
+ end
269
+
270
+ def full_sha_revision?(ref)
271
+ ref&.match?(/\A\h{40}\z/)
272
+ end
273
+
274
+ def git_null(*command, dir: nil)
275
+ check_allowed(command)
276
+
277
+ capture(command, dir, ignore_err: true)
154
278
  end
155
279
 
156
280
  def git_retry(*command, dir: nil)
157
281
  command_with_no_credentials = check_allowed(command)
158
282
 
159
283
  Bundler::Retry.new("`#{command_with_no_credentials}` at #{dir || SharedHelpers.pwd}").attempts do
160
- git(*command, :dir => dir)
284
+ git(*command, dir: dir)
161
285
  end
162
286
  end
163
287
 
164
288
  def git(*command, dir: nil)
165
- command_with_no_credentials = check_allowed(command)
166
-
167
- out, status = SharedHelpers.with_clean_git_env do
168
- capture_and_filter_stderr(*capture3_args_for(command, dir))
289
+ run_command(*command, dir: dir) do |unredacted_command|
290
+ check_allowed(unredacted_command)
169
291
  end
292
+ end
170
293
 
171
- filtered_out = URICredentialsFilter.credential_filtered_string(out, uri)
172
-
173
- raise GitCommandError.new(command_with_no_credentials, dir || SharedHelpers.pwd, filtered_out) unless status.success?
174
-
175
- filtered_out
294
+ def git_local(*command, dir: nil)
295
+ run_command(*command, dir: dir) do |unredacted_command|
296
+ redact_and_check_presence(unredacted_command)
297
+ end
176
298
  end
177
299
 
178
300
  def has_revision_cached?
179
- return unless @revision
180
- with_path { git("cat-file", "-e", @revision, :dir => path) }
301
+ return unless @revision && path.exist?
302
+ git("cat-file", "-e", @revision, dir: path)
181
303
  true
182
304
  rescue GitError
183
305
  false
184
306
  end
185
307
 
186
- def remove_cache
187
- FileUtils.rm_rf(path)
308
+ def find_local_revision
309
+ return head_revision if explicit_ref.nil?
310
+
311
+ find_revision_for(explicit_ref)
188
312
  end
189
313
 
190
- def find_local_revision
191
- allowed_with_path do
192
- git("rev-parse", "--verify", ref || "HEAD", :dir => path).strip
193
- end
314
+ def head_revision
315
+ verify("HEAD")
316
+ end
317
+
318
+ def find_revision_for(reference)
319
+ verify(reference)
194
320
  rescue GitCommandError => e
195
- raise MissingGitRevisionError.new(e.command, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
321
+ raise MissingGitRevisionError.new(e.command, path, reference, credential_filtered_uri)
322
+ end
323
+
324
+ def verify(reference)
325
+ git("rev-parse", "--verify", reference, dir: path).strip
196
326
  end
197
327
 
198
- # Adds credentials to the URI as Fetcher#configured_uri_for does
199
- def configured_uri_for(uri)
200
- if /https?:/ =~ uri
201
- remote = Bundler::URI(uri)
328
+ # Adds credentials to the URI
329
+ def configured_uri
330
+ if /https?:/.match?(uri)
331
+ remote = Gem::URI(uri)
202
332
  config_auth = Bundler.settings[remote.to_s] || Bundler.settings[remote.host]
203
333
  remote.userinfo ||= config_auth
204
334
  remote.to_s
335
+ elsif File.exist?(uri)
336
+ "file://#{uri}"
205
337
  else
206
- uri
338
+ uri.to_s
207
339
  end
208
340
  end
209
341
 
342
+ # Removes credentials from the URI
343
+ def credential_filtered_uri
344
+ URICredentialsFilter.credential_filtered_uri(uri)
345
+ end
346
+
210
347
  def allow?
211
- @git ? @git.allow_git_ops? : true
348
+ allowed = @git ? @git.allow_git_ops? : true
349
+
350
+ raise GitNotInstalledError.new if allowed && !Bundler.git_present?
351
+
352
+ allowed
212
353
  end
213
354
 
214
355
  def with_path(&blk)
@@ -222,23 +363,41 @@ module Bundler
222
363
  end
223
364
 
224
365
  def check_allowed(command)
225
- require "shellwords"
226
- command_with_no_credentials = URICredentialsFilter.credential_filtered_string("git #{command.shelljoin}", uri)
366
+ command_with_no_credentials = redact_and_check_presence(command)
227
367
  raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
228
368
  command_with_no_credentials
229
369
  end
230
370
 
231
- def capture_and_filter_stderr(*cmd)
232
- require "open3"
233
- return_value, captured_err, status = Open3.capture3(*cmd)
234
- Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) unless captured_err.empty?
235
- [return_value, status]
371
+ def redact_and_check_presence(command)
372
+ raise GitNotInstalledError.new unless Bundler.git_present?
373
+
374
+ require "shellwords"
375
+ URICredentialsFilter.credential_filtered_string("git #{command.shelljoin}", uri)
376
+ end
377
+
378
+ def run_command(*command, dir: nil)
379
+ command_with_no_credentials = yield(command)
380
+
381
+ out, err, status = capture(command, dir)
382
+
383
+ raise GitCommandError.new(command_with_no_credentials, dir || SharedHelpers.pwd, err) unless status.success?
384
+
385
+ Bundler.ui.warn err unless err.empty?
386
+
387
+ out
236
388
  end
237
389
 
238
- def capture_and_ignore_stderr(*cmd)
239
- require "open3"
240
- return_value, _, status = Open3.capture3(*cmd)
241
- [return_value, status]
390
+ def capture(cmd, dir, ignore_err: false)
391
+ SharedHelpers.with_clean_git_env do
392
+ require "open3"
393
+ out, err, status = Open3.capture3(*capture3_args_for(cmd, dir))
394
+
395
+ filtered_out = URICredentialsFilter.credential_filtered_string(out, uri)
396
+ return [filtered_out, status] if ignore_err
397
+
398
+ filtered_err = URICredentialsFilter.credential_filtered_string(err, uri)
399
+ [filtered_out, filtered_err, status]
400
+ end
242
401
  end
243
402
 
244
403
  def capture3_args_for(cmd, dir)
@@ -247,13 +406,57 @@ module Bundler
247
406
  if Bundler.feature_flag.bundler_3_mode? || supports_minus_c?
248
407
  ["git", "-C", dir.to_s, *cmd]
249
408
  else
250
- ["git", *cmd, { :chdir => dir.to_s }]
409
+ ["git", *cmd, { chdir: dir.to_s }]
251
410
  end
252
411
  end
253
412
 
413
+ def extra_clone_args
414
+ args = depth_args
415
+ return [] if args.empty?
416
+
417
+ args += ["--single-branch"]
418
+ args.unshift("--no-tags") if supports_cloning_with_no_tags?
419
+
420
+ # If there's a locked revision, no need to clone any specific branch
421
+ # or tag, since we will end up checking out that locked revision
422
+ # anyways.
423
+ return args if @revision
424
+
425
+ args += ["--branch", branch || tag] if branch || tag
426
+ args
427
+ end
428
+
429
+ def depth_args
430
+ return [] if full_clone?
431
+
432
+ ["--depth", depth.to_s]
433
+ end
434
+
435
+ def extra_fetch_args(ref)
436
+ extra_args = [path.to_s, *depth_args]
437
+ extra_args.push(ref)
438
+ extra_args
439
+ end
440
+
441
+ def full_clone?
442
+ depth.nil?
443
+ end
444
+
254
445
  def supports_minus_c?
255
446
  @supports_minus_c ||= Gem::Version.new(version) >= Gem::Version.new("1.8.5")
256
447
  end
448
+
449
+ def needs_allow_any_sha1_in_want?
450
+ @needs_allow_any_sha1_in_want ||= Gem::Version.new(version) <= Gem::Version.new("2.13.7")
451
+ end
452
+
453
+ def supports_fetching_unreachable_refs?
454
+ @supports_fetching_unreachable_refs ||= Gem::Version.new(version) >= Gem::Version.new("2.5.0")
455
+ end
456
+
457
+ def supports_cloning_with_no_tags?
458
+ @supports_cloning_with_no_tags ||= Gem::Version.new(version) >= Gem::Version.new("2.14.0-rc0")
459
+ end
257
460
  end
258
461
  end
259
462
  end