rubygems-update 2.6.0 → 3.5.4

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 (812) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +5941 -0
  3. data/CODE_OF_CONDUCT.md +76 -35
  4. data/CONTRIBUTING.md +231 -0
  5. data/MAINTAINERS.txt +8 -0
  6. data/Manifest.txt +439 -216
  7. data/POLICIES.md +135 -0
  8. data/README.md +112 -0
  9. data/UPGRADING.md +15 -0
  10. data/bundler/CHANGELOG.md +4753 -0
  11. data/bundler/LICENSE.md +22 -0
  12. data/bundler/README.md +58 -0
  13. data/bundler/UPGRADING.md +222 -0
  14. data/bundler/bundler.gemspec +46 -0
  15. data/bundler/exe/bundle +29 -0
  16. data/bundler/exe/bundler +4 -0
  17. data/bundler/lib/bundler/.document +1 -0
  18. data/bundler/lib/bundler/build_metadata.rb +45 -0
  19. data/bundler/lib/bundler/capistrano.rb +22 -0
  20. data/bundler/lib/bundler/checksum.rb +254 -0
  21. data/bundler/lib/bundler/ci_detector.rb +75 -0
  22. data/bundler/lib/bundler/cli/add.rb +47 -0
  23. data/bundler/lib/bundler/cli/binstubs.rb +57 -0
  24. data/bundler/lib/bundler/cli/cache.rb +43 -0
  25. data/bundler/lib/bundler/cli/check.rb +40 -0
  26. data/bundler/lib/bundler/cli/clean.rb +25 -0
  27. data/bundler/lib/bundler/cli/common.rb +138 -0
  28. data/bundler/lib/bundler/cli/config.rb +204 -0
  29. data/bundler/lib/bundler/cli/console.rb +44 -0
  30. data/bundler/lib/bundler/cli/doctor.rb +157 -0
  31. data/bundler/lib/bundler/cli/exec.rb +88 -0
  32. data/bundler/lib/bundler/cli/fund.rb +36 -0
  33. data/bundler/lib/bundler/cli/gem.rb +471 -0
  34. data/bundler/lib/bundler/cli/info.rb +83 -0
  35. data/bundler/lib/bundler/cli/init.rb +51 -0
  36. data/bundler/lib/bundler/cli/inject.rb +60 -0
  37. data/bundler/lib/bundler/cli/install.rb +190 -0
  38. data/bundler/lib/bundler/cli/issue.rb +41 -0
  39. data/bundler/lib/bundler/cli/list.rb +66 -0
  40. data/bundler/lib/bundler/cli/lock.rb +73 -0
  41. data/bundler/lib/bundler/cli/open.rb +29 -0
  42. data/bundler/lib/bundler/cli/outdated.rb +297 -0
  43. data/bundler/lib/bundler/cli/platform.rb +48 -0
  44. data/bundler/lib/bundler/cli/plugin.rb +34 -0
  45. data/bundler/lib/bundler/cli/pristine.rb +60 -0
  46. data/bundler/lib/bundler/cli/remove.rb +17 -0
  47. data/bundler/lib/bundler/cli/show.rb +75 -0
  48. data/bundler/lib/bundler/cli/update.rb +123 -0
  49. data/bundler/lib/bundler/cli/viz.rb +31 -0
  50. data/bundler/lib/bundler/cli.rb +846 -0
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +121 -0
  52. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  53. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +32 -0
  54. data/bundler/lib/bundler/compact_index_client/updater.rb +115 -0
  55. data/bundler/lib/bundler/compact_index_client.rb +126 -0
  56. data/bundler/lib/bundler/constants.rb +7 -0
  57. data/bundler/lib/bundler/current_ruby.rb +92 -0
  58. data/bundler/lib/bundler/definition.rb +1015 -0
  59. data/bundler/lib/bundler/dependency.rb +105 -0
  60. data/bundler/lib/bundler/deployment.rb +69 -0
  61. data/bundler/lib/bundler/deprecate.rb +44 -0
  62. data/bundler/lib/bundler/digest.rb +71 -0
  63. data/bundler/lib/bundler/dsl.rb +604 -0
  64. data/bundler/lib/bundler/endpoint_specification.rb +147 -0
  65. data/bundler/lib/bundler/env.rb +148 -0
  66. data/bundler/lib/bundler/environment_preserver.rb +86 -0
  67. data/bundler/lib/bundler/errors.rb +233 -0
  68. data/bundler/lib/bundler/feature_flag.rb +53 -0
  69. data/bundler/lib/bundler/fetcher/base.rb +52 -0
  70. data/bundler/lib/bundler/fetcher/compact_index.rb +129 -0
  71. data/bundler/lib/bundler/fetcher/dependency.rb +78 -0
  72. data/bundler/lib/bundler/fetcher/downloader.rb +91 -0
  73. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  74. data/bundler/lib/bundler/fetcher/index.rb +25 -0
  75. data/bundler/lib/bundler/fetcher.rb +324 -0
  76. data/bundler/lib/bundler/force_platform.rb +18 -0
  77. data/bundler/lib/bundler/friendly_errors.rb +126 -0
  78. data/bundler/lib/bundler/gem_helper.rb +237 -0
  79. data/bundler/lib/bundler/gem_helpers.rb +127 -0
  80. data/bundler/lib/bundler/gem_tasks.rb +7 -0
  81. data/bundler/lib/bundler/gem_version_promoter.rb +145 -0
  82. data/bundler/lib/bundler/graph.rb +152 -0
  83. data/bundler/lib/bundler/index.rb +205 -0
  84. data/bundler/lib/bundler/injector.rb +287 -0
  85. data/bundler/lib/bundler/inline.rb +73 -0
  86. data/bundler/lib/bundler/installer/gem_installer.rb +84 -0
  87. data/bundler/lib/bundler/installer/parallel_installer.rb +202 -0
  88. data/bundler/lib/bundler/installer/standalone.rb +116 -0
  89. data/bundler/lib/bundler/installer.rb +267 -0
  90. data/bundler/lib/bundler/lazy_specification.rb +172 -0
  91. data/bundler/lib/bundler/lockfile_generator.rb +104 -0
  92. data/bundler/lib/bundler/lockfile_parser.rb +289 -0
  93. data/bundler/lib/bundler/man/.document +1 -0
  94. data/bundler/lib/bundler/man/bundle-add.1 +59 -0
  95. data/bundler/lib/bundler/man/bundle-add.1.ronn +58 -0
  96. data/bundler/lib/bundler/man/bundle-binstubs.1 +30 -0
  97. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
  98. data/bundler/lib/bundler/man/bundle-cache.1 +40 -0
  99. data/bundler/lib/bundler/man/bundle-cache.1.ronn +79 -0
  100. data/bundler/lib/bundler/man/bundle-check.1 +22 -0
  101. data/bundler/lib/bundler/man/bundle-check.1.ronn +26 -0
  102. data/bundler/lib/bundler/man/bundle-clean.1 +17 -0
  103. data/bundler/lib/bundler/man/bundle-clean.1.ronn +18 -0
  104. data/bundler/lib/bundler/man/bundle-config.1 +321 -0
  105. data/bundler/lib/bundler/man/bundle-config.1.ronn +411 -0
  106. data/bundler/lib/bundler/man/bundle-console.1 +35 -0
  107. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  108. data/bundler/lib/bundler/man/bundle-doctor.1 +30 -0
  109. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +33 -0
  110. data/bundler/lib/bundler/man/bundle-exec.1 +104 -0
  111. data/bundler/lib/bundler/man/bundle-exec.1.ronn +151 -0
  112. data/bundler/lib/bundler/man/bundle-gem.1 +69 -0
  113. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  114. data/bundler/lib/bundler/man/bundle-help.1 +9 -0
  115. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  116. data/bundler/lib/bundler/man/bundle-info.1 +14 -0
  117. data/bundler/lib/bundler/man/bundle-info.1.ronn +17 -0
  118. data/bundler/lib/bundler/man/bundle-init.1 +20 -0
  119. data/bundler/lib/bundler/man/bundle-init.1.ronn +31 -0
  120. data/bundler/lib/bundler/man/bundle-inject.1 +23 -0
  121. data/bundler/lib/bundler/man/bundle-inject.1.ronn +24 -0
  122. data/bundler/lib/bundler/man/bundle-install.1 +215 -0
  123. data/bundler/lib/bundler/man/bundle-install.1.ronn +383 -0
  124. data/bundler/lib/bundler/man/bundle-list.1 +35 -0
  125. data/bundler/lib/bundler/man/bundle-list.1.ronn +33 -0
  126. data/bundler/lib/bundler/man/bundle-lock.1 +60 -0
  127. data/bundler/lib/bundler/man/bundle-lock.1.ronn +94 -0
  128. data/bundler/lib/bundler/man/bundle-open.1 +32 -0
  129. data/bundler/lib/bundler/man/bundle-open.1.ronn +27 -0
  130. data/bundler/lib/bundler/man/bundle-outdated.1 +100 -0
  131. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +106 -0
  132. data/bundler/lib/bundler/man/bundle-platform.1 +49 -0
  133. data/bundler/lib/bundler/man/bundle-platform.1.ronn +49 -0
  134. data/bundler/lib/bundler/man/bundle-plugin.1 +55 -0
  135. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  136. data/bundler/lib/bundler/man/bundle-pristine.1 +23 -0
  137. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  138. data/bundler/lib/bundler/man/bundle-remove.1 +21 -0
  139. data/bundler/lib/bundler/man/bundle-remove.1.ronn +23 -0
  140. data/bundler/lib/bundler/man/bundle-show.1 +16 -0
  141. data/bundler/lib/bundler/man/bundle-show.1.ronn +21 -0
  142. data/bundler/lib/bundler/man/bundle-update.1 +275 -0
  143. data/bundler/lib/bundler/man/bundle-update.1.ronn +351 -0
  144. data/bundler/lib/bundler/man/bundle-version.1 +22 -0
  145. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  146. data/bundler/lib/bundler/man/bundle-viz.1 +30 -0
  147. data/bundler/lib/bundler/man/bundle-viz.1.ronn +32 -0
  148. data/bundler/lib/bundler/man/bundle.1 +102 -0
  149. data/bundler/lib/bundler/man/bundle.1.ronn +116 -0
  150. data/bundler/lib/bundler/man/gemfile.5 +470 -0
  151. data/bundler/lib/bundler/man/gemfile.5.ronn +552 -0
  152. data/bundler/lib/bundler/man/index.txt +29 -0
  153. data/bundler/lib/bundler/match_metadata.rb +17 -0
  154. data/bundler/lib/bundler/match_platform.rb +23 -0
  155. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  156. data/bundler/lib/bundler/mirror.rb +221 -0
  157. data/bundler/lib/bundler/plugin/api/source.rb +321 -0
  158. data/bundler/lib/bundler/plugin/api.rb +81 -0
  159. data/bundler/lib/bundler/plugin/dsl.rb +53 -0
  160. data/bundler/lib/bundler/plugin/events.rb +61 -0
  161. data/bundler/lib/bundler/plugin/index.rb +193 -0
  162. data/bundler/lib/bundler/plugin/installer/git.rb +34 -0
  163. data/bundler/lib/bundler/plugin/installer/rubygems.rb +19 -0
  164. data/bundler/lib/bundler/plugin/installer.rb +112 -0
  165. data/bundler/lib/bundler/plugin/source_list.rb +31 -0
  166. data/bundler/lib/bundler/plugin.rb +359 -0
  167. data/bundler/lib/bundler/process_lock.rb +24 -0
  168. data/bundler/lib/bundler/remote_specification.rb +121 -0
  169. data/bundler/lib/bundler/resolver/base.rb +107 -0
  170. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  171. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  172. data/bundler/lib/bundler/resolver/package.rb +77 -0
  173. data/bundler/lib/bundler/resolver/root.rb +25 -0
  174. data/bundler/lib/bundler/resolver/spec_group.rb +79 -0
  175. data/bundler/lib/bundler/resolver.rb +462 -0
  176. data/bundler/lib/bundler/retry.rb +66 -0
  177. data/bundler/lib/bundler/ruby_dsl.rb +53 -0
  178. data/bundler/lib/bundler/ruby_version.rb +131 -0
  179. data/bundler/lib/bundler/rubygems_ext.rb +328 -0
  180. data/bundler/lib/bundler/rubygems_gem_installer.rb +137 -0
  181. data/bundler/lib/bundler/rubygems_integration.rb +493 -0
  182. data/bundler/lib/bundler/runtime.rb +307 -0
  183. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  184. data/bundler/lib/bundler/self_manager.rb +186 -0
  185. data/bundler/lib/bundler/settings/validator.rb +102 -0
  186. data/bundler/lib/bundler/settings.rb +588 -0
  187. data/bundler/lib/bundler/setup.rb +33 -0
  188. data/bundler/lib/bundler/shared_helpers.rb +380 -0
  189. data/bundler/lib/bundler/similarity_detector.rb +63 -0
  190. data/bundler/lib/bundler/source/gemspec.rb +18 -0
  191. data/bundler/lib/bundler/source/git/git_proxy.rb +455 -0
  192. data/bundler/lib/bundler/source/git.rb +380 -0
  193. data/bundler/lib/bundler/source/metadata.rb +62 -0
  194. data/bundler/lib/bundler/source/path/installer.rb +53 -0
  195. data/bundler/lib/bundler/source/path.rb +261 -0
  196. data/bundler/lib/bundler/source/rubygems/remote.rb +68 -0
  197. data/bundler/lib/bundler/source/rubygems.rb +516 -0
  198. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  199. data/bundler/lib/bundler/source.rb +116 -0
  200. data/bundler/lib/bundler/source_list.rb +227 -0
  201. data/bundler/lib/bundler/source_map.rb +71 -0
  202. data/bundler/lib/bundler/spec_set.rb +296 -0
  203. data/bundler/lib/bundler/stub_specification.rb +119 -0
  204. data/bundler/lib/bundler/templates/.document +1 -0
  205. data/bundler/lib/bundler/templates/Executable +27 -0
  206. data/bundler/lib/bundler/templates/Executable.bundler +109 -0
  207. data/bundler/lib/bundler/templates/Executable.standalone +14 -0
  208. data/bundler/lib/bundler/templates/Gemfile +5 -0
  209. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  210. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +84 -0
  211. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  212. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +26 -0
  213. data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  214. data/bundler/lib/bundler/templates/newgem/README.md.tt +45 -0
  215. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +67 -0
  216. data/bundler/lib/bundler/templates/newgem/bin/console.tt +11 -0
  217. data/bundler/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  218. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  219. data/bundler/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  220. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  221. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  222. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  223. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  224. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  225. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  226. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  227. data/bundler/lib/bundler/templates/newgem/gitignore.tt +23 -0
  228. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  229. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
  230. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
  231. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +51 -0
  232. data/bundler/lib/bundler/templates/newgem/rspec.tt +3 -0
  233. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  234. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  235. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
  236. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
  237. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  238. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  239. data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
  240. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  241. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  242. data/bundler/lib/bundler/ui/rg_proxy.rb +19 -0
  243. data/bundler/lib/bundler/ui/shell.rb +165 -0
  244. data/bundler/lib/bundler/ui/silent.rb +85 -0
  245. data/bundler/lib/bundler/ui.rb +9 -0
  246. data/bundler/lib/bundler/uri_credentials_filter.rb +43 -0
  247. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  248. data/bundler/lib/bundler/vendor/.document +1 -0
  249. data/bundler/lib/bundler/vendor/connection_pool/.document +1 -0
  250. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  251. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  252. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  253. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  254. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
  255. data/bundler/lib/bundler/vendor/fileutils/.document +1 -0
  256. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  257. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2694 -0
  258. data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
  259. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  260. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  261. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  262. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  263. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -0
  264. data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
  265. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  266. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  267. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  268. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  269. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  270. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  271. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  272. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  273. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  274. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  275. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  276. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  277. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  278. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  279. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  280. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  281. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  282. data/bundler/lib/bundler/vendor/thor/.document +1 -0
  283. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  284. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  285. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  286. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  287. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  288. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
  289. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  290. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  291. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  292. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  293. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  294. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  295. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
  296. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  297. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  298. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  299. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  300. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  301. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
  302. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  303. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  304. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
  305. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  306. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  307. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  308. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
  309. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +112 -0
  310. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  311. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +81 -0
  312. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  313. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  314. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  315. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  316. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  317. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  318. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
  319. data/bundler/lib/bundler/vendor/tsort/.document +1 -0
  320. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  321. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  322. data/bundler/lib/bundler/vendor/uri/.document +1 -0
  323. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  324. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +853 -0
  325. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  326. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  327. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1588 -0
  328. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  329. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  330. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  331. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  332. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  333. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  334. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +183 -0
  335. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  336. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  337. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  338. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  339. data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
  340. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  341. data/bundler/lib/bundler/vendored_persistent.rb +11 -0
  342. data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
  343. data/bundler/lib/bundler/vendored_thor.rb +8 -0
  344. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  345. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  346. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  347. data/bundler/lib/bundler/version.rb +13 -0
  348. data/bundler/lib/bundler/vlad.rb +17 -0
  349. data/bundler/lib/bundler/worker.rb +117 -0
  350. data/bundler/lib/bundler/yaml_serializer.rb +93 -0
  351. data/bundler/lib/bundler.rb +663 -0
  352. data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
  353. data/exe/update_rubygems +38 -0
  354. data/hide_lib_for_update/note.txt +0 -4
  355. data/lib/rubygems/available_set.rb +12 -12
  356. data/lib/rubygems/basic_specification.rb +82 -59
  357. data/lib/rubygems/bundler_version_finder.rb +77 -0
  358. data/lib/rubygems/ci_detector.rb +75 -0
  359. data/lib/rubygems/command.rb +144 -71
  360. data/lib/rubygems/command_manager.rb +64 -27
  361. data/lib/rubygems/commands/build_command.rb +88 -17
  362. data/lib/rubygems/commands/cert_command.rb +131 -83
  363. data/lib/rubygems/commands/check_command.rb +30 -27
  364. data/lib/rubygems/commands/cleanup_command.rb +57 -40
  365. data/lib/rubygems/commands/contents_command.rb +37 -39
  366. data/lib/rubygems/commands/dependency_command.rb +53 -65
  367. data/lib/rubygems/commands/environment_command.rb +32 -16
  368. data/lib/rubygems/commands/exec_command.rb +249 -0
  369. data/lib/rubygems/commands/fetch_command.rb +36 -19
  370. data/lib/rubygems/commands/generate_index_command.rb +40 -74
  371. data/lib/rubygems/commands/help_command.rb +22 -22
  372. data/lib/rubygems/commands/info_command.rb +38 -0
  373. data/lib/rubygems/commands/install_command.rb +67 -143
  374. data/lib/rubygems/commands/list_command.rb +10 -9
  375. data/lib/rubygems/commands/lock_command.rb +12 -14
  376. data/lib/rubygems/commands/mirror_command.rb +4 -4
  377. data/lib/rubygems/commands/open_command.rb +28 -26
  378. data/lib/rubygems/commands/outdated_command.rb +6 -6
  379. data/lib/rubygems/commands/owner_command.rb +51 -27
  380. data/lib/rubygems/commands/pristine_command.rb +99 -71
  381. data/lib/rubygems/commands/push_command.rb +53 -46
  382. data/lib/rubygems/commands/query_command.rb +21 -328
  383. data/lib/rubygems/commands/rdoc_command.rb +33 -33
  384. data/lib/rubygems/commands/search_command.rb +9 -9
  385. data/lib/rubygems/commands/server_command.rb +15 -76
  386. data/lib/rubygems/commands/setup_command.rb +370 -186
  387. data/lib/rubygems/commands/signin_command.rb +34 -0
  388. data/lib/rubygems/commands/signout_command.rb +32 -0
  389. data/lib/rubygems/commands/sources_command.rb +57 -41
  390. data/lib/rubygems/commands/specification_command.rb +38 -28
  391. data/lib/rubygems/commands/stale_command.rb +6 -5
  392. data/lib/rubygems/commands/uninstall_command.rb +96 -62
  393. data/lib/rubygems/commands/unpack_command.rb +44 -53
  394. data/lib/rubygems/commands/update_command.rb +153 -99
  395. data/lib/rubygems/commands/which_command.rb +14 -17
  396. data/lib/rubygems/commands/yank_command.rb +28 -32
  397. data/lib/rubygems/compatibility.rb +13 -32
  398. data/lib/rubygems/config_file.rb +214 -119
  399. data/lib/rubygems/core_ext/kernel_gem.rb +10 -16
  400. data/lib/rubygems/core_ext/kernel_require.rb +92 -90
  401. data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
  402. data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
  403. data/lib/rubygems/defaults.rb +184 -54
  404. data/lib/rubygems/dependency.rb +75 -62
  405. data/lib/rubygems/dependency_installer.rb +74 -230
  406. data/lib/rubygems/dependency_list.rb +32 -33
  407. data/lib/rubygems/deprecate.rb +113 -17
  408. data/lib/rubygems/doctor.rb +31 -31
  409. data/lib/rubygems/errors.rb +51 -13
  410. data/lib/rubygems/exceptions.rb +65 -35
  411. data/lib/rubygems/ext/build_error.rb +3 -1
  412. data/lib/rubygems/ext/builder.rb +103 -77
  413. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  414. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  415. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  416. data/lib/rubygems/ext/configure_builder.rb +6 -9
  417. data/lib/rubygems/ext/ext_conf_builder.rb +40 -61
  418. data/lib/rubygems/ext/rake_builder.rb +18 -21
  419. data/lib/rubygems/ext.rb +8 -7
  420. data/lib/rubygems/gem_runner.rb +19 -21
  421. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  422. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  423. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  424. data/lib/rubygems/gemcutter_utilities.rb +246 -43
  425. data/lib/rubygems/install_default_message.rb +3 -3
  426. data/lib/rubygems/install_message.rb +3 -3
  427. data/lib/rubygems/install_update_options.rb +104 -98
  428. data/lib/rubygems/installer.rb +407 -225
  429. data/lib/rubygems/installer_uninstaller_utils.rb +27 -0
  430. data/lib/rubygems/local_remote_options.rb +29 -32
  431. data/lib/rubygems/name_tuple.rb +18 -23
  432. data/lib/rubygems/net/http.rb +3 -0
  433. data/lib/rubygems/net-http/.document +1 -0
  434. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  435. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  436. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  437. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  438. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  439. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  440. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  441. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  442. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  443. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  444. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  445. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  446. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  447. data/lib/rubygems/net-protocol/.document +1 -0
  448. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  449. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  450. data/lib/rubygems/openssl.rb +7 -0
  451. data/lib/rubygems/optparse/.document +1 -0
  452. data/lib/rubygems/optparse/COPYING +56 -0
  453. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  454. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  455. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  456. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  457. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  458. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  459. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  460. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  461. data/lib/rubygems/optparse/lib/optparse.rb +2330 -0
  462. data/lib/rubygems/optparse.rb +3 -0
  463. data/lib/rubygems/package/digest_io.rb +5 -7
  464. data/lib/rubygems/package/file_source.rb +6 -8
  465. data/lib/rubygems/package/io_source.rb +6 -4
  466. data/lib/rubygems/package/old.rb +19 -28
  467. data/lib/rubygems/package/source.rb +1 -1
  468. data/lib/rubygems/package/tar_header.rb +114 -93
  469. data/lib/rubygems/package/tar_reader/entry.rb +116 -22
  470. data/lib/rubygems/package/tar_reader.rb +18 -40
  471. data/lib/rubygems/package/tar_writer.rb +42 -56
  472. data/lib/rubygems/package.rb +254 -144
  473. data/lib/rubygems/package_task.rb +8 -14
  474. data/lib/rubygems/path_support.rb +21 -16
  475. data/lib/rubygems/platform.rb +135 -74
  476. data/lib/rubygems/psych_tree.rb +3 -2
  477. data/lib/rubygems/query_utils.rb +349 -0
  478. data/lib/rubygems/rdoc.rb +4 -326
  479. data/lib/rubygems/remote_fetcher.rb +99 -181
  480. data/lib/rubygems/request/connection_pools.rb +31 -24
  481. data/lib/rubygems/request/http_pool.rb +6 -7
  482. data/lib/rubygems/request/https_pool.rb +2 -3
  483. data/lib/rubygems/request.rb +107 -57
  484. data/lib/rubygems/request_set/gem_dependency_api.rb +182 -190
  485. data/lib/rubygems/request_set/lockfile/parser.rb +42 -52
  486. data/lib/rubygems/request_set/lockfile/tokenizer.rb +34 -24
  487. data/lib/rubygems/request_set/lockfile.rb +32 -35
  488. data/lib/rubygems/request_set.rb +115 -71
  489. data/lib/rubygems/requirement.rb +77 -68
  490. data/lib/rubygems/resolv/.document +1 -0
  491. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  492. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  493. data/lib/rubygems/resolver/activation_request.rb +34 -61
  494. data/lib/rubygems/resolver/api_set/gem_parser.rb +24 -0
  495. data/lib/rubygems/resolver/api_set.rb +40 -32
  496. data/lib/rubygems/resolver/api_specification.rb +37 -18
  497. data/lib/rubygems/resolver/best_set.rb +15 -17
  498. data/lib/rubygems/resolver/composed_set.rb +9 -11
  499. data/lib/rubygems/resolver/conflict.rb +19 -33
  500. data/lib/rubygems/resolver/current_set.rb +2 -4
  501. data/lib/rubygems/resolver/dependency_request.rb +8 -9
  502. data/lib/rubygems/resolver/git_set.rb +8 -10
  503. data/lib/rubygems/resolver/git_specification.rb +11 -13
  504. data/lib/rubygems/resolver/index_set.rb +13 -15
  505. data/lib/rubygems/resolver/index_specification.rb +42 -11
  506. data/lib/rubygems/resolver/installed_specification.rb +9 -11
  507. data/lib/rubygems/resolver/installer_set.rb +93 -47
  508. data/lib/rubygems/resolver/local_specification.rb +5 -7
  509. data/lib/rubygems/resolver/lock_set.rb +13 -15
  510. data/lib/rubygems/resolver/lock_specification.rb +13 -15
  511. data/lib/rubygems/resolver/molinillo/.document +1 -0
  512. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  513. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  514. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
  515. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  516. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  517. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  518. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  519. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  520. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  521. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  522. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  523. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
  524. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
  525. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
  526. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  527. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  528. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  529. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
  530. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  531. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
  532. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  533. data/lib/rubygems/resolver/molinillo.rb +2 -1
  534. data/lib/rubygems/resolver/requirement_list.rb +2 -2
  535. data/lib/rubygems/resolver/set.rb +3 -5
  536. data/lib/rubygems/resolver/source_set.rb +6 -7
  537. data/lib/rubygems/resolver/spec_specification.rb +16 -4
  538. data/lib/rubygems/resolver/specification.rb +25 -10
  539. data/lib/rubygems/resolver/stats.rb +1 -0
  540. data/lib/rubygems/resolver/vendor_set.rb +6 -8
  541. data/lib/rubygems/resolver/vendor_specification.rb +6 -8
  542. data/lib/rubygems/resolver.rb +121 -72
  543. data/lib/rubygems/s3_uri_signer.rb +177 -0
  544. data/lib/rubygems/safe_marshal/elements.rb +146 -0
  545. data/lib/rubygems/safe_marshal/reader.rb +308 -0
  546. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  547. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +415 -0
  548. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  549. data/lib/rubygems/safe_marshal.rb +74 -0
  550. data/lib/rubygems/safe_yaml.rb +36 -0
  551. data/lib/rubygems/security/policies.rb +49 -51
  552. data/lib/rubygems/security/policy.rb +46 -53
  553. data/lib/rubygems/security/signer.rb +86 -29
  554. data/lib/rubygems/security/trust_dir.rb +22 -24
  555. data/lib/rubygems/security.rb +101 -82
  556. data/lib/rubygems/security_option.rb +43 -0
  557. data/lib/rubygems/shellwords.rb +3 -0
  558. data/lib/rubygems/source/git.rb +40 -42
  559. data/lib/rubygems/source/installed.rb +5 -9
  560. data/lib/rubygems/source/local.rb +30 -33
  561. data/lib/rubygems/source/lock.rb +10 -10
  562. data/lib/rubygems/source/specific_file.rb +7 -9
  563. data/lib/rubygems/source/vendor.rb +3 -7
  564. data/lib/rubygems/source.rb +78 -68
  565. data/lib/rubygems/source_list.rb +11 -15
  566. data/lib/rubygems/spec_fetcher.rb +71 -83
  567. data/lib/rubygems/specification.rb +833 -1115
  568. data/lib/rubygems/specification_policy.rb +538 -0
  569. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
  570. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  571. data/lib/rubygems/stub_specification.rb +55 -57
  572. data/lib/rubygems/text.rb +39 -27
  573. data/lib/rubygems/timeout/.document +1 -0
  574. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  575. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  576. data/lib/rubygems/timeout.rb +3 -0
  577. data/lib/rubygems/tsort/.document +1 -0
  578. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  579. data/lib/rubygems/tsort/lib/tsort.rb +455 -0
  580. data/lib/rubygems/tsort.rb +3 -0
  581. data/lib/rubygems/uninstaller.rb +150 -87
  582. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  583. data/lib/rubygems/update_suggestion.rb +56 -0
  584. data/lib/rubygems/uri.rb +126 -0
  585. data/lib/rubygems/uri_formatter.rb +4 -7
  586. data/lib/rubygems/user_interaction.rb +92 -146
  587. data/lib/rubygems/util/licenses.rb +712 -317
  588. data/lib/rubygems/util/list.rb +5 -2
  589. data/lib/rubygems/util.rb +58 -75
  590. data/lib/rubygems/validator.rb +26 -48
  591. data/lib/rubygems/version.rb +106 -56
  592. data/lib/rubygems/version_option.rb +22 -14
  593. data/lib/rubygems/yaml_serializer.rb +93 -0
  594. data/lib/rubygems.rb +453 -358
  595. data/rubygems-update.gemspec +38 -0
  596. data/setup.rb +13 -27
  597. metadata +511 -363
  598. data/.autotest +0 -71
  599. data/.document +0 -5
  600. data/.travis.yml +0 -46
  601. data/CONTRIBUTING.rdoc +0 -129
  602. data/CVE-2013-4287.txt +0 -35
  603. data/CVE-2013-4363.txt +0 -45
  604. data/CVE-2015-3900.txt +0 -40
  605. data/History.txt +0 -3094
  606. data/MAINTAINERS.md +0 -5
  607. data/POLICIES.rdoc +0 -61
  608. data/README.rdoc +0 -54
  609. data/Rakefile +0 -449
  610. data/UPGRADING.rdoc +0 -92
  611. data/appveyor.yml +0 -36
  612. data/bin/gem +0 -25
  613. data/bin/update_rubygems +0 -37
  614. data/lib/gauntlet_rubygems.rb +0 -51
  615. data/lib/rubygems/indexer.rb +0 -434
  616. data/lib/rubygems/installer_test_case.rb +0 -194
  617. data/lib/rubygems/mock_gem_ui.rb +0 -89
  618. data/lib/rubygems/package/tar_test_case.rb +0 -147
  619. data/lib/rubygems/psych_additions.rb +0 -10
  620. data/lib/rubygems/server.rb +0 -869
  621. data/lib/rubygems/source_local.rb +0 -6
  622. data/lib/rubygems/source_specific_file.rb +0 -5
  623. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  624. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
  625. data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  626. data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  627. data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  628. data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  629. data/lib/rubygems/syck_hack.rb +0 -77
  630. data/lib/rubygems/test_case.rb +0 -1496
  631. data/lib/rubygems/test_utilities.rb +0 -384
  632. data/lib/ubygems.rb +0 -11
  633. data/test/rubygems/alternate_cert.pem +0 -18
  634. data/test/rubygems/alternate_cert_32.pem +0 -18
  635. data/test/rubygems/alternate_key.pem +0 -27
  636. data/test/rubygems/bad_rake.rb +0 -2
  637. data/test/rubygems/ca_cert.pem +0 -68
  638. data/test/rubygems/child_cert.pem +0 -18
  639. data/test/rubygems/child_cert_32.pem +0 -18
  640. data/test/rubygems/child_key.pem +0 -27
  641. data/test/rubygems/client.pem +0 -49
  642. data/test/rubygems/data/gem-private_key.pem +0 -27
  643. data/test/rubygems/data/gem-public_cert.pem +0 -20
  644. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  645. data/test/rubygems/encrypted_private_key.pem +0 -30
  646. data/test/rubygems/expired_cert.pem +0 -18
  647. data/test/rubygems/fake_certlib/openssl.rb +0 -8
  648. data/test/rubygems/fix_openssl_warnings.rb +0 -13
  649. data/test/rubygems/foo/discover.rb +0 -1
  650. data/test/rubygems/future_cert.pem +0 -18
  651. data/test/rubygems/future_cert_32.pem +0 -18
  652. data/test/rubygems/good_rake.rb +0 -2
  653. data/test/rubygems/grandchild_cert.pem +0 -18
  654. data/test/rubygems/grandchild_cert_32.pem +0 -18
  655. data/test/rubygems/grandchild_key.pem +0 -27
  656. data/test/rubygems/invalid_client.pem +0 -49
  657. data/test/rubygems/invalid_issuer_cert.pem +0 -18
  658. data/test/rubygems/invalid_issuer_cert_32.pem +0 -18
  659. data/test/rubygems/invalid_key.pem +0 -27
  660. data/test/rubygems/invalid_signer_cert.pem +0 -18
  661. data/test/rubygems/invalid_signer_cert_32.pem +0 -18
  662. data/test/rubygems/invalidchild_cert.pem +0 -18
  663. data/test/rubygems/invalidchild_cert_32.pem +0 -18
  664. data/test/rubygems/invalidchild_key.pem +0 -27
  665. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
  666. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
  667. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
  668. data/test/rubygems/private_key.pem +0 -27
  669. data/test/rubygems/public_cert.pem +0 -18
  670. data/test/rubygems/public_cert_32.pem +0 -18
  671. data/test/rubygems/public_key.pem +0 -9
  672. data/test/rubygems/rubygems/commands/crash_command.rb +0 -6
  673. data/test/rubygems/rubygems_plugin.rb +0 -22
  674. data/test/rubygems/sff/discover.rb +0 -1
  675. data/test/rubygems/simple_gem.rb +0 -67
  676. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  677. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  678. data/test/rubygems/ssl_cert.pem +0 -19
  679. data/test/rubygems/ssl_key.pem +0 -15
  680. data/test/rubygems/test_bundled_ca.rb +0 -59
  681. data/test/rubygems/test_config.rb +0 -24
  682. data/test/rubygems/test_deprecate.rb +0 -77
  683. data/test/rubygems/test_gem.rb +0 -1679
  684. data/test/rubygems/test_gem_available_set.rb +0 -130
  685. data/test/rubygems/test_gem_command.rb +0 -248
  686. data/test/rubygems/test_gem_command_manager.rb +0 -264
  687. data/test/rubygems/test_gem_commands_build_command.rb +0 -121
  688. data/test/rubygems/test_gem_commands_cert_command.rb +0 -671
  689. data/test/rubygems/test_gem_commands_check_command.rb +0 -69
  690. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -197
  691. data/test/rubygems/test_gem_commands_contents_command.rb +0 -240
  692. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -230
  693. data/test/rubygems/test_gem_commands_environment_command.rb +0 -154
  694. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -127
  695. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -51
  696. data/test/rubygems/test_gem_commands_help_command.rb +0 -75
  697. data/test/rubygems/test_gem_commands_install_command.rb +0 -987
  698. data/test/rubygems/test_gem_commands_list_command.rb +0 -34
  699. data/test/rubygems/test_gem_commands_lock_command.rb +0 -69
  700. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  701. data/test/rubygems/test_gem_commands_open_command.rb +0 -70
  702. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -33
  703. data/test/rubygems/test_gem_commands_owner_command.rb +0 -205
  704. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -491
  705. data/test/rubygems/test_gem_commands_push_command.rb +0 -330
  706. data/test/rubygems/test_gem_commands_query_command.rb +0 -657
  707. data/test/rubygems/test_gem_commands_search_command.rb +0 -18
  708. data/test/rubygems/test_gem_commands_server_command.rb +0 -60
  709. data/test/rubygems/test_gem_commands_setup_command.rb +0 -136
  710. data/test/rubygems/test_gem_commands_sources_command.rb +0 -249
  711. data/test/rubygems/test_gem_commands_specification_command.rb +0 -251
  712. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  713. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -283
  714. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -209
  715. data/test/rubygems/test_gem_commands_update_command.rb +0 -514
  716. data/test/rubygems/test_gem_commands_which_command.rb +0 -87
  717. data/test/rubygems/test_gem_commands_yank_command.rb +0 -100
  718. data/test/rubygems/test_gem_config_file.rb +0 -491
  719. data/test/rubygems/test_gem_dependency.rb +0 -362
  720. data/test/rubygems/test_gem_dependency_installer.rb +0 -1235
  721. data/test/rubygems/test_gem_dependency_list.rb +0 -260
  722. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -29
  723. data/test/rubygems/test_gem_doctor.rb +0 -169
  724. data/test/rubygems/test_gem_ext_builder.rb +0 -341
  725. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -87
  726. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -87
  727. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -211
  728. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -65
  729. data/test/rubygems/test_gem_gem_runner.rb +0 -69
  730. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -235
  731. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -62
  732. data/test/rubygems/test_gem_indexer.rb +0 -367
  733. data/test/rubygems/test_gem_install_update_options.rb +0 -197
  734. data/test/rubygems/test_gem_installer.rb +0 -1552
  735. data/test/rubygems/test_gem_local_remote_options.rb +0 -134
  736. data/test/rubygems/test_gem_name_tuple.rb +0 -45
  737. data/test/rubygems/test_gem_package.rb +0 -876
  738. data/test/rubygems/test_gem_package_old.rb +0 -90
  739. data/test/rubygems/test_gem_package_tar_header.rb +0 -147
  740. data/test/rubygems/test_gem_package_tar_reader.rb +0 -90
  741. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -142
  742. data/test/rubygems/test_gem_package_tar_writer.rb +0 -264
  743. data/test/rubygems/test_gem_package_task.rb +0 -84
  744. data/test/rubygems/test_gem_path_support.rb +0 -121
  745. data/test/rubygems/test_gem_platform.rb +0 -308
  746. data/test/rubygems/test_gem_rdoc.rb +0 -270
  747. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1051
  748. data/test/rubygems/test_gem_request.rb +0 -363
  749. data/test/rubygems/test_gem_request_connection_pools.rb +0 -130
  750. data/test/rubygems/test_gem_request_set.rb +0 -595
  751. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -831
  752. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -470
  753. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -549
  754. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
  755. data/test/rubygems/test_gem_requirement.rb +0 -387
  756. data/test/rubygems/test_gem_resolver.rb +0 -715
  757. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -74
  758. data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
  759. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -145
  760. data/test/rubygems/test_gem_resolver_best_set.rb +0 -138
  761. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -46
  762. data/test/rubygems/test_gem_resolver_conflict.rb +0 -88
  763. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -85
  764. data/test/rubygems/test_gem_resolver_git_set.rb +0 -190
  765. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  766. data/test/rubygems/test_gem_resolver_index_set.rb +0 -90
  767. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -90
  768. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -50
  769. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -258
  770. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -46
  771. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -64
  772. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -100
  773. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -21
  774. data/test/rubygems/test_gem_resolver_specification.rb +0 -65
  775. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -84
  776. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -84
  777. data/test/rubygems/test_gem_security.rb +0 -307
  778. data/test/rubygems/test_gem_security_policy.rb +0 -541
  779. data/test/rubygems/test_gem_security_signer.rb +0 -209
  780. data/test/rubygems/test_gem_security_trust_dir.rb +0 -101
  781. data/test/rubygems/test_gem_server.rb +0 -409
  782. data/test/rubygems/test_gem_silent_ui.rb +0 -117
  783. data/test/rubygems/test_gem_source.rb +0 -242
  784. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -20
  785. data/test/rubygems/test_gem_source_git.rb +0 -309
  786. data/test/rubygems/test_gem_source_installed.rb +0 -37
  787. data/test/rubygems/test_gem_source_list.rb +0 -118
  788. data/test/rubygems/test_gem_source_local.rb +0 -107
  789. data/test/rubygems/test_gem_source_lock.rb +0 -115
  790. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  791. data/test/rubygems/test_gem_source_vendor.rb +0 -32
  792. data/test/rubygems/test_gem_spec_fetcher.rb +0 -311
  793. data/test/rubygems/test_gem_specification.rb +0 -3519
  794. data/test/rubygems/test_gem_stream_ui.rb +0 -239
  795. data/test/rubygems/test_gem_stub_specification.rb +0 -217
  796. data/test/rubygems/test_gem_text.rb +0 -77
  797. data/test/rubygems/test_gem_uninstaller.rb +0 -485
  798. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -33
  799. data/test/rubygems/test_gem_uri_formatter.rb +0 -29
  800. data/test/rubygems/test_gem_util.rb +0 -40
  801. data/test/rubygems/test_gem_validator.rb +0 -46
  802. data/test/rubygems/test_gem_version.rb +0 -222
  803. data/test/rubygems/test_gem_version_option.rb +0 -152
  804. data/test/rubygems/test_kernel.rb +0 -86
  805. data/test/rubygems/test_require.rb +0 -322
  806. data/test/rubygems/wrong_key_cert.pem +0 -18
  807. data/test/rubygems/wrong_key_cert_32.pem +0 -18
  808. data/util/CL2notes +0 -56
  809. data/util/create_certs.rb +0 -157
  810. data/util/create_encrypted_key.rb +0 -17
  811. data/util/generate_spdx_license_list.rb +0 -51
  812. data/util/update_bundled_ca_certificates.rb +0 -118
@@ -0,0 +1,1015 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lockfile_parser"
4
+
5
+ module Bundler
6
+ class Definition
7
+ include GemHelpers
8
+
9
+ class << self
10
+ # Do not create or modify a lockfile (Makes #lock a noop)
11
+ attr_accessor :no_lock
12
+ end
13
+
14
+ attr_reader(
15
+ :dependencies,
16
+ :locked_deps,
17
+ :locked_gems,
18
+ :platforms,
19
+ :ruby_version,
20
+ :lockfile,
21
+ :gemfiles,
22
+ :locked_checksums
23
+ )
24
+
25
+ # Given a gemfile and lockfile creates a Bundler definition
26
+ #
27
+ # @param gemfile [Pathname] Path to Gemfile
28
+ # @param lockfile [Pathname,nil] Path to Gemfile.lock
29
+ # @param unlock [Hash, Boolean, nil] Gems that have been requested
30
+ # to be updated or true if all gems should be updated
31
+ # @return [Bundler::Definition]
32
+ def self.build(gemfile, lockfile, unlock)
33
+ unlock ||= {}
34
+ gemfile = Pathname.new(gemfile).expand_path
35
+
36
+ raise GemfileNotFound, "#{gemfile} not found" unless gemfile.file?
37
+
38
+ Dsl.evaluate(gemfile, lockfile, unlock)
39
+ end
40
+
41
+ #
42
+ # How does the new system work?
43
+ #
44
+ # * Load information from Gemfile and Lockfile
45
+ # * Invalidate stale locked specs
46
+ # * All specs from stale source are stale
47
+ # * All specs that are reachable only through a stale
48
+ # dependency are stale.
49
+ # * If all fresh dependencies are satisfied by the locked
50
+ # specs, then we can try to resolve locally.
51
+ #
52
+ # @param lockfile [Pathname] Path to Gemfile.lock
53
+ # @param dependencies [Array(Bundler::Dependency)] array of dependencies from Gemfile
54
+ # @param sources [Bundler::SourceList]
55
+ # @param unlock [Hash, Boolean, nil] Gems that have been requested
56
+ # to be updated or true if all gems should be updated
57
+ # @param ruby_version [Bundler::RubyVersion, nil] Requested Ruby Version
58
+ # @param optional_groups [Array(String)] A list of optional groups
59
+ def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil, optional_groups = [], gemfiles = [])
60
+ if [true, false].include?(unlock)
61
+ @unlocking_bundler = false
62
+ @unlocking = unlock
63
+ else
64
+ @unlocking_bundler = unlock.delete(:bundler)
65
+ @unlocking = unlock.any? {|_k, v| !Array(v).empty? }
66
+ end
67
+
68
+ @dependencies = dependencies
69
+ @sources = sources
70
+ @unlock = unlock
71
+ @optional_groups = optional_groups
72
+ @remote = false
73
+ @prefer_local = false
74
+ @specs = nil
75
+ @ruby_version = ruby_version
76
+ @gemfiles = gemfiles
77
+
78
+ @lockfile = lockfile
79
+ @lockfile_contents = String.new
80
+
81
+ @locked_bundler_version = nil
82
+ @resolved_bundler_version = nil
83
+
84
+ @locked_ruby_version = nil
85
+ @new_platform = nil
86
+ @removed_platform = nil
87
+
88
+ if lockfile_exists?
89
+ @lockfile_contents = Bundler.read_file(lockfile)
90
+ @locked_gems = LockfileParser.new(@lockfile_contents)
91
+ @locked_platforms = @locked_gems.platforms
92
+ @platforms = @locked_platforms.dup
93
+ @locked_bundler_version = @locked_gems.bundler_version
94
+ @locked_ruby_version = @locked_gems.ruby_version
95
+ @originally_locked_specs = SpecSet.new(@locked_gems.specs)
96
+ @locked_checksums = @locked_gems.checksums
97
+
98
+ if unlock != true
99
+ @locked_deps = @locked_gems.dependencies
100
+ @locked_specs = @originally_locked_specs
101
+ @locked_sources = @locked_gems.sources
102
+ else
103
+ @unlock = {}
104
+ @locked_deps = {}
105
+ @locked_specs = SpecSet.new([])
106
+ @locked_sources = []
107
+ end
108
+ else
109
+ @unlock = {}
110
+ @platforms = []
111
+ @locked_gems = nil
112
+ @locked_deps = {}
113
+ @locked_specs = SpecSet.new([])
114
+ @originally_locked_specs = @locked_specs
115
+ @locked_sources = []
116
+ @locked_platforms = []
117
+ @locked_checksums = nil
118
+ end
119
+
120
+ locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
121
+ @multisource_allowed = locked_gem_sources.size == 1 && locked_gem_sources.first.multiple_remotes? && Bundler.frozen_bundle?
122
+
123
+ if @multisource_allowed
124
+ unless sources.aggregate_global_source?
125
+ msg = "Your lockfile contains a single rubygems source section with multiple remotes, which is insecure. Make sure you run `bundle install` in non frozen mode and commit the result to make your lockfile secure."
126
+
127
+ Bundler::SharedHelpers.major_deprecation 2, msg
128
+ end
129
+
130
+ @sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
131
+ end
132
+
133
+ @unlock[:sources] ||= []
134
+ @unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
135
+ @ruby_version.diff(locked_ruby_version_object)
136
+ end
137
+ @unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)
138
+
139
+ add_current_platform unless Bundler.frozen_bundle?
140
+
141
+ converge_path_sources_to_gemspec_sources
142
+ @path_changes = converge_paths
143
+ @source_changes = converge_sources
144
+
145
+ if @unlock[:conservative]
146
+ @unlock[:gems] ||= @dependencies.map(&:name)
147
+ else
148
+ eager_unlock = (@unlock[:gems] || []).map {|name| Dependency.new(name, ">= 0") }
149
+ @unlock[:gems] = @locked_specs.for(eager_unlock, false, platforms).map(&:name).uniq
150
+ end
151
+
152
+ @dependency_changes = converge_dependencies
153
+ @local_changes = converge_locals
154
+
155
+ check_lockfile
156
+ end
157
+
158
+ def gem_version_promoter
159
+ @gem_version_promoter ||= GemVersionPromoter.new
160
+ end
161
+
162
+ def resolve_only_locally!
163
+ @remote = false
164
+ sources.local_only!
165
+ resolve
166
+ end
167
+
168
+ def resolve_with_cache!
169
+ sources.cached!
170
+ resolve
171
+ end
172
+
173
+ def resolve_remotely!
174
+ @remote = true
175
+ sources.remote!
176
+ resolve
177
+ end
178
+
179
+ def resolution_mode=(options)
180
+ if options["local"]
181
+ @remote = false
182
+ else
183
+ @remote = true
184
+ @prefer_local = options["prefer-local"]
185
+ end
186
+ end
187
+
188
+ def setup_sources_for_resolve
189
+ if @remote == false
190
+ sources.cached!
191
+ else
192
+ sources.remote!
193
+ end
194
+ end
195
+
196
+ # For given dependency list returns a SpecSet with Gemspec of all the required
197
+ # dependencies.
198
+ # 1. The method first resolves the dependencies specified in Gemfile
199
+ # 2. After that it tries and fetches gemspec of resolved dependencies
200
+ #
201
+ # @return [Bundler::SpecSet]
202
+ def specs
203
+ @specs ||= materialize(requested_dependencies)
204
+ end
205
+
206
+ def new_specs
207
+ specs - @locked_specs
208
+ end
209
+
210
+ def removed_specs
211
+ @locked_specs - specs
212
+ end
213
+
214
+ def missing_specs
215
+ resolve.materialize(requested_dependencies).missing_specs
216
+ end
217
+
218
+ def missing_specs?
219
+ missing = missing_specs
220
+ return false if missing.empty?
221
+ Bundler.ui.debug "The definition is missing #{missing.map(&:full_name)}"
222
+ true
223
+ rescue BundlerError => e
224
+ @resolve = nil
225
+ @resolver = nil
226
+ @resolution_packages = nil
227
+ @specs = nil
228
+ @gem_version_promoter = nil
229
+
230
+ Bundler.ui.debug "The definition is missing dependencies, failed to resolve & materialize locally (#{e})"
231
+ true
232
+ end
233
+
234
+ def requested_specs
235
+ specs_for(requested_groups)
236
+ end
237
+
238
+ def requested_dependencies
239
+ dependencies_for(requested_groups)
240
+ end
241
+
242
+ def current_dependencies
243
+ filter_relevant(dependencies)
244
+ end
245
+
246
+ def current_locked_dependencies
247
+ filter_relevant(locked_dependencies)
248
+ end
249
+
250
+ def filter_relevant(dependencies)
251
+ platforms_array = [generic_local_platform].freeze
252
+ dependencies.select do |d|
253
+ d.should_include? && !d.gem_platforms(platforms_array).empty?
254
+ end
255
+ end
256
+
257
+ def locked_dependencies
258
+ @locked_deps.values
259
+ end
260
+
261
+ def new_deps
262
+ @new_deps ||= @dependencies - locked_dependencies
263
+ end
264
+
265
+ def deleted_deps
266
+ @deleted_deps ||= locked_dependencies - @dependencies
267
+ end
268
+
269
+ def specs_for(groups)
270
+ return specs if groups.empty?
271
+ deps = dependencies_for(groups)
272
+ materialize(deps)
273
+ end
274
+
275
+ def dependencies_for(groups)
276
+ groups.map!(&:to_sym)
277
+ deps = current_dependencies # always returns a new array
278
+ deps.select! do |d|
279
+ if RUBY_VERSION >= "3.1"
280
+ d.groups.intersect?(groups)
281
+ else
282
+ !(d.groups & groups).empty?
283
+ end
284
+ end
285
+ deps
286
+ end
287
+
288
+ # Resolve all the dependencies specified in Gemfile. It ensures that
289
+ # dependencies that have been already resolved via locked file and are fresh
290
+ # are reused when resolving dependencies
291
+ #
292
+ # @return [SpecSet] resolved dependencies
293
+ def resolve
294
+ @resolve ||= if Bundler.frozen_bundle?
295
+ Bundler.ui.debug "Frozen, using resolution from the lockfile"
296
+ @locked_specs
297
+ elsif no_resolve_needed?
298
+ if deleted_deps.any?
299
+ Bundler.ui.debug "Some dependencies were deleted, using a subset of the resolution from the lockfile"
300
+ SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
301
+ else
302
+ Bundler.ui.debug "Found no changes, using resolution from the lockfile"
303
+ if @removed_platform || @locked_gems.may_include_redundant_platform_specific_gems?
304
+ SpecSet.new(filter_specs(@locked_specs, @dependencies))
305
+ else
306
+ @locked_specs
307
+ end
308
+ end
309
+ else
310
+ Bundler.ui.debug "Found changes from the lockfile, re-resolving dependencies because #{change_reason}"
311
+ start_resolution
312
+ end
313
+ end
314
+
315
+ def spec_git_paths
316
+ sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
317
+ end
318
+
319
+ def groups
320
+ dependencies.map(&:groups).flatten.uniq
321
+ end
322
+
323
+ def lock(file, preserve_unknown_sections = false)
324
+ return if Definition.no_lock
325
+
326
+ contents = to_lock
327
+
328
+ # Convert to \r\n if the existing lock has them
329
+ # i.e., Windows with `git config core.autocrlf=true`
330
+ contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match?("\r\n")
331
+
332
+ if @locked_bundler_version
333
+ locked_major = @locked_bundler_version.segments.first
334
+ current_major = bundler_version_to_lock.segments.first
335
+
336
+ updating_major = locked_major < current_major
337
+ end
338
+
339
+ preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))
340
+
341
+ if file && File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)
342
+ return if Bundler.frozen_bundle?
343
+ SharedHelpers.filesystem_access(file) { FileUtils.touch(file) }
344
+ return
345
+ end
346
+
347
+ if Bundler.frozen_bundle?
348
+ Bundler.ui.error "Cannot write a changed lockfile while frozen."
349
+ return
350
+ end
351
+
352
+ SharedHelpers.filesystem_access(file) do |p|
353
+ File.open(p, "wb") {|f| f.puts(contents) }
354
+ end
355
+ end
356
+
357
+ def locked_ruby_version
358
+ return unless ruby_version
359
+ if @unlock[:ruby] || !@locked_ruby_version
360
+ Bundler::RubyVersion.system
361
+ else
362
+ @locked_ruby_version
363
+ end
364
+ end
365
+
366
+ def locked_ruby_version_object
367
+ return unless @locked_ruby_version
368
+ @locked_ruby_version_object ||= begin
369
+ unless version = RubyVersion.from_string(@locked_ruby_version)
370
+ raise LockfileError, "The Ruby version #{@locked_ruby_version} from " \
371
+ "#{@lockfile} could not be parsed. " \
372
+ "Try running bundle update --ruby to resolve this."
373
+ end
374
+ version
375
+ end
376
+ end
377
+
378
+ def bundler_version_to_lock
379
+ @resolved_bundler_version || Bundler.gem_version
380
+ end
381
+
382
+ def to_lock
383
+ require_relative "lockfile_generator"
384
+ LockfileGenerator.generate(self)
385
+ end
386
+
387
+ def ensure_equivalent_gemfile_and_lockfile(explicit_flag = false)
388
+ added = []
389
+ deleted = []
390
+ changed = []
391
+
392
+ new_platforms = @platforms - @locked_platforms
393
+ deleted_platforms = @locked_platforms - @platforms
394
+ added.concat new_platforms.map {|p| "* platform: #{p}" }
395
+ deleted.concat deleted_platforms.map {|p| "* platform: #{p}" }
396
+
397
+ added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
398
+ deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
399
+
400
+ both_sources = Hash.new {|h, k| h[k] = [] }
401
+ current_dependencies.each {|d| both_sources[d.name][0] = d }
402
+ current_locked_dependencies.each {|d| both_sources[d.name][1] = d }
403
+
404
+ both_sources.each do |name, (dep, lock_dep)|
405
+ next if dep.nil? || lock_dep.nil?
406
+
407
+ gemfile_source = dep.source || default_source
408
+ lock_source = lock_dep.source || default_source
409
+ next if lock_source.include?(gemfile_source)
410
+
411
+ gemfile_source_name = dep.source ? gemfile_source.to_gemfile : "no specified source"
412
+ lockfile_source_name = lock_dep.source ? lock_source.to_gemfile : "no specified source"
413
+ changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
414
+ end
415
+
416
+ reason = change_reason
417
+ msg = String.new
418
+ msg << "#{reason.capitalize.strip}, but the lockfile can't be updated because frozen mode is set"
419
+ msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any?
420
+ msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any?
421
+ msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any?
422
+ msg << "\n\nRun `bundle install` elsewhere and add the updated #{SharedHelpers.relative_gemfile_path} to version control.\n"
423
+
424
+ unless explicit_flag
425
+ suggested_command = unless Bundler.settings.locations("frozen").keys.include?(:env)
426
+ "bundle config set frozen false"
427
+ end
428
+ msg << "If this is a development machine, remove the #{SharedHelpers.relative_lockfile_path} " \
429
+ "freeze by running `#{suggested_command}`." if suggested_command
430
+ end
431
+
432
+ raise ProductionError, msg if added.any? || deleted.any? || changed.any? || !nothing_changed?
433
+ end
434
+
435
+ def validate_runtime!
436
+ validate_ruby!
437
+ validate_platforms!
438
+ end
439
+
440
+ def validate_ruby!
441
+ return unless ruby_version
442
+
443
+ if diff = ruby_version.diff(Bundler::RubyVersion.system)
444
+ problem, expected, actual = diff
445
+
446
+ msg = case problem
447
+ when :engine
448
+ "Your Ruby engine is #{actual}, but your Gemfile specified #{expected}"
449
+ when :version
450
+ "Your Ruby version is #{actual}, but your Gemfile specified #{expected}"
451
+ when :engine_version
452
+ "Your #{Bundler::RubyVersion.system.engine} version is #{actual}, but your Gemfile specified #{ruby_version.engine} #{expected}"
453
+ when :patchlevel
454
+ if !expected.is_a?(String)
455
+ "The Ruby patchlevel in your Gemfile must be a string"
456
+ else
457
+ "Your Ruby patchlevel is #{actual}, but your Gemfile specified #{expected}"
458
+ end
459
+ end
460
+
461
+ raise RubyVersionMismatch, msg
462
+ end
463
+ end
464
+
465
+ def validate_platforms!
466
+ return if current_platform_locked?
467
+
468
+ raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
469
+ "but your local platform is #{local_platform}. " \
470
+ "Add the current platform to the lockfile with\n`bundle lock --add-platform #{local_platform}` and try again."
471
+ end
472
+
473
+ def add_platform(platform)
474
+ @new_platform ||= !@platforms.include?(platform)
475
+ @platforms |= [platform]
476
+ end
477
+
478
+ def remove_platform(platform)
479
+ removed_platform = @platforms.delete(Gem::Platform.new(platform))
480
+ @removed_platform ||= removed_platform
481
+ return if removed_platform
482
+ raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
483
+ end
484
+
485
+ def most_specific_locked_platform
486
+ @platforms.min_by do |bundle_platform|
487
+ platform_specificity_match(bundle_platform, local_platform)
488
+ end
489
+ end
490
+
491
+ attr_reader :sources
492
+ private :sources
493
+
494
+ def nothing_changed?
495
+ !@source_changes &&
496
+ !@dependency_changes &&
497
+ !@new_platform &&
498
+ !@path_changes &&
499
+ !@local_changes &&
500
+ !@missing_lockfile_dep &&
501
+ !@unlocking_bundler &&
502
+ !@locked_spec_with_missing_deps &&
503
+ !@locked_spec_with_invalid_deps
504
+ end
505
+
506
+ def no_resolve_needed?
507
+ !unlocking? && nothing_changed?
508
+ end
509
+
510
+ def unlocking?
511
+ @unlocking
512
+ end
513
+
514
+ private
515
+
516
+ def should_add_extra_platforms?
517
+ !lockfile_exists? && generic_local_platform_is_ruby? && !Bundler.settings[:force_ruby_platform]
518
+ end
519
+
520
+ def lockfile_exists?
521
+ lockfile && File.exist?(lockfile)
522
+ end
523
+
524
+ def resolver
525
+ @resolver ||= Resolver.new(resolution_packages, gem_version_promoter)
526
+ end
527
+
528
+ def expanded_dependencies
529
+ dependencies_with_bundler + metadata_dependencies
530
+ end
531
+
532
+ def dependencies_with_bundler
533
+ return dependencies unless @unlocking_bundler
534
+ return dependencies if dependencies.map(&:name).include?("bundler")
535
+
536
+ [Dependency.new("bundler", @unlocking_bundler)] + dependencies
537
+ end
538
+
539
+ def resolution_packages
540
+ @resolution_packages ||= begin
541
+ last_resolve = converge_locked_specs
542
+ remove_invalid_platforms!(current_dependencies)
543
+ packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @unlock[:gems], prerelease: gem_version_promoter.pre?)
544
+ additional_base_requirements_for_resolve(packages, last_resolve)
545
+ end
546
+ end
547
+
548
+ def filter_specs(specs, deps)
549
+ SpecSet.new(specs).for(deps, false, platforms)
550
+ end
551
+
552
+ def materialize(dependencies)
553
+ specs = resolve.materialize(dependencies)
554
+ missing_specs = specs.missing_specs
555
+
556
+ if missing_specs.any?
557
+ missing_specs.each do |s|
558
+ locked_gem = @locked_specs[s.name].last
559
+ next if locked_gem.nil? || locked_gem.version != s.version || !@remote
560
+ raise GemNotFound, "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
561
+ "no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
562
+ "You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
563
+ "removed in order to install."
564
+ end
565
+
566
+ missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
567
+ "#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
568
+ end
569
+
570
+ raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
571
+ end
572
+
573
+ incomplete_specs = specs.incomplete_specs
574
+ loop do
575
+ break if incomplete_specs.empty?
576
+
577
+ Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
578
+ setup_sources_for_resolve
579
+ resolution_packages.delete(incomplete_specs)
580
+ @resolve = start_resolution
581
+ specs = resolve.materialize(dependencies)
582
+
583
+ still_incomplete_specs = specs.incomplete_specs
584
+
585
+ if still_incomplete_specs == incomplete_specs
586
+ package = resolution_packages.get_package(incomplete_specs.first.name)
587
+ resolver.raise_not_found! package
588
+ end
589
+
590
+ incomplete_specs = still_incomplete_specs
591
+ end
592
+
593
+ bundler = sources.metadata_source.specs.search(["bundler", Bundler.gem_version]).last
594
+ specs["bundler"] = bundler
595
+
596
+ specs
597
+ end
598
+
599
+ def start_resolution
600
+ result = SpecSet.new(resolver.start)
601
+
602
+ @resolved_bundler_version = result.find {|spec| spec.name == "bundler" }&.version
603
+ @platforms = result.add_extra_platforms!(platforms) if should_add_extra_platforms?
604
+
605
+ result.complete_platforms!(platforms)
606
+
607
+ SpecSet.new(result.for(dependencies, false, @platforms))
608
+ end
609
+
610
+ def precompute_source_requirements_for_indirect_dependencies?
611
+ sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
612
+ end
613
+
614
+ def pin_locally_available_names(source_requirements)
615
+ source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
616
+ local_source = original_source.dup
617
+ local_source.local_only!
618
+
619
+ new_source_requirements[name] = if local_source.specs.search(name).any?
620
+ local_source
621
+ else
622
+ original_source
623
+ end
624
+ end
625
+ end
626
+
627
+ def current_ruby_platform_locked?
628
+ return false unless generic_local_platform_is_ruby?
629
+ return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
630
+
631
+ current_platform_locked?
632
+ end
633
+
634
+ def current_platform_locked?
635
+ @platforms.any? do |bundle_platform|
636
+ MatchPlatform.platforms_match?(bundle_platform, local_platform)
637
+ end
638
+ end
639
+
640
+ def add_current_platform
641
+ return if current_ruby_platform_locked?
642
+
643
+ add_platform(local_platform)
644
+ end
645
+
646
+ def change_reason
647
+ if unlocking?
648
+ unlock_reason = @unlock.reject {|_k, v| Array(v).empty? }.map do |k, v|
649
+ if v == true
650
+ k.to_s
651
+ else
652
+ v = Array(v)
653
+ "#{k}: (#{v.join(", ")})"
654
+ end
655
+ end.join(", ")
656
+ return "bundler is unlocking #{unlock_reason}"
657
+ end
658
+ [
659
+ [@source_changes, "the list of sources changed"],
660
+ [@dependency_changes, "the dependencies in your gemfile changed"],
661
+ [@new_platform, "you added a new platform to your gemfile"],
662
+ [@path_changes, "the gemspecs for path gems changed"],
663
+ [@local_changes, "the gemspecs for git local gems changed"],
664
+ [@missing_lockfile_dep, "your lock file is missing \"#{@missing_lockfile_dep}\""],
665
+ [@unlocking_bundler, "an update to the version of Bundler itself was requested"],
666
+ [@locked_spec_with_missing_deps, "your lock file includes \"#{@locked_spec_with_missing_deps}\" but not some of its dependencies"],
667
+ [@locked_spec_with_invalid_deps, "your lockfile does not satisfy dependencies of \"#{@locked_spec_with_invalid_deps}\""],
668
+ ].select(&:first).map(&:last).join(", ")
669
+ end
670
+
671
+ def pretty_dep(dep)
672
+ SharedHelpers.pretty_dependency(dep)
673
+ end
674
+
675
+ # Check if the specs of the given source changed
676
+ # according to the locked source.
677
+ def specs_changed?(source)
678
+ locked = @locked_sources.find {|s| s == source }
679
+
680
+ !locked || dependencies_for_source_changed?(source, locked) || specs_for_source_changed?(source)
681
+ end
682
+
683
+ def dependencies_for_source_changed?(source, locked_source = source)
684
+ deps_for_source = @dependencies.select {|s| s.source == source }
685
+ locked_deps_for_source = locked_dependencies.select {|dep| dep.source == locked_source }
686
+
687
+ deps_for_source.uniq.sort != locked_deps_for_source.sort
688
+ end
689
+
690
+ def specs_for_source_changed?(source)
691
+ locked_index = Index.new
692
+ locked_index.use(@locked_specs.select {|s| source.can_lock?(s) })
693
+
694
+ !locked_index.subset?(source.specs)
695
+ rescue PathError, GitError => e
696
+ Bundler.ui.debug "Assuming that #{source} has not changed since fetching its specs errored (#{e})"
697
+ false
698
+ end
699
+
700
+ # Get all locals and override their matching sources.
701
+ # Return true if any of the locals changed (for example,
702
+ # they point to a new revision) or depend on new specs.
703
+ def converge_locals
704
+ locals = []
705
+
706
+ Bundler.settings.local_overrides.map do |k, v|
707
+ spec = @dependencies.find {|s| s.name == k }
708
+ source = spec&.source
709
+ if source&.respond_to?(:local_override!)
710
+ source.unlock! if @unlock[:gems].include?(spec.name)
711
+ locals << [source, source.local_override!(v)]
712
+ end
713
+ end
714
+
715
+ sources_with_changes = locals.select do |source, changed|
716
+ changed || specs_changed?(source)
717
+ end.map(&:first)
718
+ !sources_with_changes.each {|source| @unlock[:sources] << source.name }.empty?
719
+ end
720
+
721
+ def check_lockfile
722
+ @missing_lockfile_dep = nil
723
+
724
+ @locked_spec_with_invalid_deps = nil
725
+ @locked_spec_with_missing_deps = nil
726
+
727
+ missing = []
728
+ invalid = []
729
+
730
+ @locked_specs.each do |s|
731
+ validation = @locked_specs.validate_deps(s)
732
+
733
+ missing << s if validation == :missing
734
+ invalid << s if validation == :invalid
735
+ end
736
+
737
+ if missing.any?
738
+ @locked_specs.delete(missing)
739
+
740
+ @locked_spec_with_missing_deps = missing.first.name
741
+ elsif !@dependency_changes
742
+ @missing_lockfile_dep = current_dependencies.find do |d|
743
+ @locked_specs[d.name].empty? && d.name != "bundler"
744
+ end&.name
745
+ end
746
+
747
+ if invalid.any?
748
+ @locked_specs.delete(invalid)
749
+
750
+ @locked_spec_with_invalid_deps = invalid.first.name
751
+ end
752
+ end
753
+
754
+ def converge_paths
755
+ sources.path_sources.any? do |source|
756
+ specs_changed?(source)
757
+ end
758
+ end
759
+
760
+ def converge_path_source_to_gemspec_source(source)
761
+ return source unless source.instance_of?(Source::Path)
762
+ gemspec_source = sources.path_sources.find {|s| s.is_a?(Source::Gemspec) && s.as_path_source == source }
763
+ gemspec_source || source
764
+ end
765
+
766
+ def converge_path_sources_to_gemspec_sources
767
+ @locked_sources.map! do |source|
768
+ converge_path_source_to_gemspec_source(source)
769
+ end
770
+ @locked_specs.each do |spec|
771
+ spec.source &&= converge_path_source_to_gemspec_source(spec.source)
772
+ end
773
+ @locked_deps.each do |_, dep|
774
+ dep.source &&= converge_path_source_to_gemspec_source(dep.source)
775
+ end
776
+ end
777
+
778
+ def converge_sources
779
+ # Replace the sources from the Gemfile with the sources from the Gemfile.lock,
780
+ # if they exist in the Gemfile.lock and are `==`. If you can't find an equivalent
781
+ # source in the Gemfile.lock, use the one from the Gemfile.
782
+ changes = sources.replace_sources!(@locked_sources)
783
+
784
+ sources.all_sources.each do |source|
785
+ # has to be done separately, because we want to keep the locked checksum
786
+ # store for a source, even when doing a full update
787
+ if @locked_checksums && @locked_gems && locked_source = @locked_gems.sources.find {|s| s == source && !s.equal?(source) }
788
+ source.checksum_store.merge!(locked_source.checksum_store)
789
+ end
790
+ # If the source is unlockable and the current command allows an unlock of
791
+ # the source (for example, you are doing a `bundle update <foo>` of a git-pinned
792
+ # gem), unlock it. For git sources, this means to unlock the revision, which
793
+ # will cause the `ref` used to be the most recent for the branch (or master) if
794
+ # an explicit `ref` is not used.
795
+ if source.respond_to?(:unlock!) && @unlock[:sources].include?(source.name)
796
+ source.unlock!
797
+ changes = true
798
+ end
799
+ end
800
+
801
+ changes
802
+ end
803
+
804
+ def converge_dependencies
805
+ changes = false
806
+
807
+ @dependencies.each do |dep|
808
+ if dep.source
809
+ dep.source = sources.get(dep.source)
810
+ end
811
+
812
+ next if unlocking?
813
+
814
+ unless locked_dep = @locked_deps[dep.name]
815
+ changes = true
816
+ next
817
+ end
818
+
819
+ # Gem::Dependency#== matches Gem::Dependency#type. As the lockfile
820
+ # doesn't carry a notion of the dependency type, if you use
821
+ # add_development_dependency in a gemspec that's loaded with the gemspec
822
+ # directive, the lockfile dependencies and resolved dependencies end up
823
+ # with a mismatch on #type. Work around that by setting the type on the
824
+ # dep from the lockfile.
825
+ locked_dep.instance_variable_set(:@type, dep.type)
826
+
827
+ # We already know the name matches from the hash lookup
828
+ # so we only need to check the requirement now
829
+ changes ||= dep.requirement != locked_dep.requirement
830
+ end
831
+
832
+ changes
833
+ end
834
+
835
+ # Remove elements from the locked specs that are expired. This will most
836
+ # commonly happen if the Gemfile has changed since the lockfile was last
837
+ # generated
838
+ def converge_locked_specs
839
+ converged = converge_specs(@locked_specs)
840
+
841
+ resolve = SpecSet.new(converged.reject {|s| @unlock[:gems].include?(s.name) })
842
+
843
+ diff = nil
844
+
845
+ # Now, we unlock any sources that do not have anymore gems pinned to it
846
+ sources.all_sources.each do |source|
847
+ next unless source.respond_to?(:unlock!)
848
+
849
+ unless resolve.any? {|s| s.source == source }
850
+ diff ||= @locked_specs.to_a - resolve.to_a
851
+ source.unlock! if diff.any? {|s| s.source == source }
852
+ end
853
+ end
854
+
855
+ resolve
856
+ end
857
+
858
+ def converge_specs(specs)
859
+ converged = []
860
+ deps = []
861
+
862
+ @specs_that_changed_sources = []
863
+
864
+ specs.each do |s|
865
+ name = s.name
866
+ dep = @dependencies.find {|d| s.satisfies?(d) }
867
+ lockfile_source = s.source
868
+
869
+ if dep
870
+ gemfile_source = dep.source || default_source
871
+
872
+ @specs_that_changed_sources << s if gemfile_source != lockfile_source
873
+ deps << dep if !dep.source || lockfile_source.include?(dep.source)
874
+ @unlock[:gems] << name if lockfile_source.include?(dep.source) && lockfile_source != gemfile_source
875
+
876
+ # Replace the locked dependency's source with the equivalent source from the Gemfile
877
+ s.source = gemfile_source
878
+ else
879
+ # Replace the locked dependency's source with the default source, if the locked source is no longer in the Gemfile
880
+ s.source = default_source unless sources.get(lockfile_source)
881
+ end
882
+
883
+ next if @unlock[:sources].include?(s.source.name)
884
+
885
+ # Path sources have special logic
886
+ if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
887
+ new_specs = begin
888
+ s.source.specs
889
+ rescue PathError
890
+ # if we won't need the source (according to the lockfile),
891
+ # don't error if the path source isn't available
892
+ next if specs.
893
+ for(requested_dependencies, false).
894
+ none? {|locked_spec| locked_spec.source == s.source }
895
+
896
+ raise
897
+ end
898
+
899
+ new_spec = new_specs[s].first
900
+ if new_spec
901
+ s.dependencies.replace(new_spec.dependencies)
902
+ else
903
+ # If the spec is no longer in the path source, unlock it. This
904
+ # commonly happens if the version changed in the gemspec
905
+ @unlock[:gems] << name
906
+ end
907
+ end
908
+
909
+ if dep.nil? && requested_dependencies.find {|d| name == d.name }
910
+ @unlock[:gems] << s.name
911
+ else
912
+ converged << s
913
+ end
914
+ end
915
+
916
+ filter_specs(converged, deps)
917
+ end
918
+
919
+ def metadata_dependencies
920
+ @metadata_dependencies ||= [
921
+ Dependency.new("Ruby\0", Bundler::RubyVersion.system.gem_version),
922
+ Dependency.new("RubyGems\0", Gem::VERSION),
923
+ ]
924
+ end
925
+
926
+ def source_requirements
927
+ # Record the specs available in each gem's source, so that those
928
+ # specs will be available later when the resolver knows where to
929
+ # look for that gemspec (or its dependencies)
930
+ source_requirements = if precompute_source_requirements_for_indirect_dependencies?
931
+ all_requirements = source_map.all_requirements
932
+ all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
933
+ { default: default_source }.merge(all_requirements)
934
+ else
935
+ { default: Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
936
+ end
937
+ source_requirements.merge!(source_map.locked_requirements) unless @remote
938
+ metadata_dependencies.each do |dep|
939
+ source_requirements[dep.name] = sources.metadata_source
940
+ end
941
+
942
+ default_bundler_source = source_requirements["bundler"] || default_source
943
+
944
+ if @unlocking_bundler
945
+ default_bundler_source.add_dependency_names("bundler")
946
+ else
947
+ source_requirements[:default_bundler] = default_bundler_source
948
+ source_requirements["bundler"] = sources.metadata_source # needs to come last to override
949
+ end
950
+
951
+ verify_changed_sources!
952
+ source_requirements
953
+ end
954
+
955
+ def default_source
956
+ sources.default_source
957
+ end
958
+
959
+ def verify_changed_sources!
960
+ @specs_that_changed_sources.each do |s|
961
+ if s.source.specs.search(s.name).empty?
962
+ raise GemNotFound, "Could not find gem '#{s.name}' in #{s.source}"
963
+ end
964
+ end
965
+ end
966
+
967
+ def requested_groups
968
+ values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
969
+ values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
970
+ values
971
+ end
972
+
973
+ def lockfiles_equal?(current, proposed, preserve_unknown_sections)
974
+ if preserve_unknown_sections
975
+ sections_to_ignore = LockfileParser.sections_to_ignore(@locked_bundler_version)
976
+ sections_to_ignore += LockfileParser.unknown_sections_in_lockfile(current)
977
+ sections_to_ignore << LockfileParser::RUBY
978
+ sections_to_ignore << LockfileParser::BUNDLED unless @unlocking_bundler
979
+ pattern = /#{Regexp.union(sections_to_ignore)}\n(\s{2,}.*\n)+/
980
+ whitespace_cleanup = /\n{2,}/
981
+ current = current.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
982
+ proposed = proposed.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
983
+ end
984
+ current == proposed
985
+ end
986
+
987
+ def additional_base_requirements_for_resolve(resolution_packages, last_resolve)
988
+ return resolution_packages unless @locked_gems && !sources.expired_sources?(@locked_gems.sources)
989
+ converge_specs(@originally_locked_specs - last_resolve).each do |locked_spec|
990
+ next if locked_spec.source.is_a?(Source::Path)
991
+ resolution_packages.base_requirements[locked_spec.name] = Gem::Requirement.new(">= #{locked_spec.version}")
992
+ end
993
+ resolution_packages
994
+ end
995
+
996
+ def remove_invalid_platforms!(dependencies)
997
+ return if Bundler.frozen_bundle?
998
+
999
+ platforms.reverse_each do |platform|
1000
+ next if local_platform == platform ||
1001
+ (@new_platform && platforms.last == platform) ||
1002
+ @path_changes ||
1003
+ @dependency_changes ||
1004
+ !@originally_locked_specs.incomplete_for_platform?(dependencies, platform)
1005
+
1006
+ remove_platform(platform)
1007
+ add_current_platform if platform == Gem::Platform::RUBY
1008
+ end
1009
+ end
1010
+
1011
+ def source_map
1012
+ @source_map ||= SourceMap.new(sources, dependencies, @locked_specs)
1013
+ end
1014
+ end
1015
+ end