rubygems-update 2.6.1 → 3.5.0

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