rubygems-update 3.0.3 → 3.4.7

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 (795) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5556 -0
  3. data/CODE_OF_CONDUCT.md +62 -24
  4. data/CONTRIBUTING.md +111 -21
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +209 -101
  7. data/POLICIES.md +65 -22
  8. data/README.md +23 -15
  9. data/UPGRADING.md +5 -81
  10. data/bin/gem +2 -16
  11. data/bin/update_rubygems +5 -5
  12. data/bundler/CHANGELOG.md +2619 -1256
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +11 -12
  15. data/bundler/UPGRADING.md +222 -0
  16. data/bundler/bundler.gemspec +13 -33
  17. data/bundler/exe/bundle +26 -11
  18. data/bundler/exe/bundler +1 -1
  19. data/bundler/lib/bundler/.document +1 -0
  20. data/bundler/lib/bundler/build_metadata.rb +5 -13
  21. data/bundler/lib/bundler/capistrano.rb +4 -4
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +11 -3
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/check.rb +5 -3
  26. data/bundler/lib/bundler/cli/clean.rb +1 -1
  27. data/bundler/lib/bundler/cli/common.rb +41 -13
  28. data/bundler/lib/bundler/cli/config.rb +170 -86
  29. data/bundler/lib/bundler/cli/console.rb +3 -3
  30. data/bundler/lib/bundler/cli/doctor.rb +27 -10
  31. data/bundler/lib/bundler/cli/exec.rb +8 -25
  32. data/bundler/lib/bundler/cli/fund.rb +36 -0
  33. data/bundler/lib/bundler/cli/gem.rb +261 -48
  34. data/bundler/lib/bundler/cli/info.rb +52 -8
  35. data/bundler/lib/bundler/cli/init.rb +7 -3
  36. data/bundler/lib/bundler/cli/inject.rb +1 -1
  37. data/bundler/lib/bundler/cli/install.rb +38 -66
  38. data/bundler/lib/bundler/cli/issue.rb +8 -7
  39. data/bundler/lib/bundler/cli/list.rb +19 -11
  40. data/bundler/lib/bundler/cli/lock.rb +11 -4
  41. data/bundler/lib/bundler/cli/open.rb +14 -9
  42. data/bundler/lib/bundler/cli/outdated.rb +152 -121
  43. data/bundler/lib/bundler/cli/platform.rb +2 -2
  44. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  45. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  46. data/bundler/lib/bundler/cli/remove.rb +1 -2
  47. data/bundler/lib/bundler/cli/show.rb +3 -3
  48. data/bundler/lib/bundler/cli/update.rb +49 -18
  49. data/bundler/lib/bundler/cli/viz.rb +1 -1
  50. data/bundler/lib/bundler/cli.rb +269 -165
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +7 -24
  52. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  53. data/bundler/lib/bundler/compact_index_client/updater.rb +58 -57
  54. data/bundler/lib/bundler/compact_index_client.rb +28 -18
  55. data/bundler/lib/bundler/constants.rb +1 -1
  56. data/bundler/lib/bundler/current_ruby.rb +26 -11
  57. data/bundler/lib/bundler/definition.rb +359 -441
  58. data/bundler/lib/bundler/dependency.rb +29 -71
  59. data/bundler/lib/bundler/deployment.rb +1 -1
  60. data/bundler/lib/bundler/digest.rb +71 -0
  61. data/bundler/lib/bundler/dsl.rb +84 -116
  62. data/bundler/lib/bundler/endpoint_specification.rb +20 -14
  63. data/bundler/lib/bundler/env.rb +10 -15
  64. data/bundler/lib/bundler/environment_preserver.rb +30 -3
  65. data/bundler/lib/bundler/errors.rb +31 -14
  66. data/bundler/lib/bundler/feature_flag.rb +13 -33
  67. data/bundler/lib/bundler/fetcher/base.rb +7 -9
  68. data/bundler/lib/bundler/fetcher/compact_index.rb +46 -39
  69. data/bundler/lib/bundler/fetcher/dependency.rb +2 -2
  70. data/bundler/lib/bundler/fetcher/downloader.rb +15 -12
  71. data/bundler/lib/bundler/fetcher/index.rb +4 -30
  72. data/bundler/lib/bundler/fetcher.rb +39 -41
  73. data/bundler/lib/bundler/force_platform.rb +18 -0
  74. data/bundler/lib/bundler/friendly_errors.rb +49 -54
  75. data/bundler/lib/bundler/gem_helper.rb +79 -43
  76. data/bundler/lib/bundler/gem_helpers.rb +44 -28
  77. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  78. data/bundler/lib/bundler/gem_version_promoter.rb +54 -99
  79. data/bundler/lib/bundler/graph.rb +5 -5
  80. data/bundler/lib/bundler/index.rb +14 -52
  81. data/bundler/lib/bundler/injector.rb +50 -16
  82. data/bundler/lib/bundler/inline.rb +28 -29
  83. data/bundler/lib/bundler/installer/gem_installer.rb +22 -23
  84. data/bundler/lib/bundler/installer/parallel_installer.rb +51 -51
  85. data/bundler/lib/bundler/installer/standalone.rb +62 -12
  86. data/bundler/lib/bundler/installer.rb +46 -97
  87. data/bundler/lib/bundler/lazy_specification.rb +88 -48
  88. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  89. data/bundler/lib/bundler/lockfile_parser.rb +30 -62
  90. data/bundler/{man → lib/bundler/man}/bundle-add.1 +29 -5
  91. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +22 -4
  92. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  93. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  94. data/bundler/lib/bundler/man/bundle-cache.1 +61 -0
  95. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +22 -15
  96. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  97. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +2 -2
  98. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  99. data/bundler/{man → lib/bundler/man}/bundle-config.1 +78 -60
  100. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +96 -85
  101. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  102. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  104. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +6 -6
  105. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +6 -6
  106. data/bundler/lib/bundler/man/bundle-gem.1 +105 -0
  107. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  108. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  109. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  110. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  111. data/bundler/{man → lib/bundler/man}/bundle-init.1 +6 -2
  112. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +3 -1
  113. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  114. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  115. data/bundler/{man → lib/bundler/man}/bundle-install.1 +42 -37
  116. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +42 -38
  117. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  118. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  119. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  120. data/bundler/{man → lib/bundler/man}/bundle-open.1 +22 -2
  121. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
  122. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
  123. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
  124. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  125. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  126. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  127. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  128. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  129. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  130. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  131. data/bundler/{man → lib/bundler/man}/bundle-update.1 +8 -8
  132. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +8 -7
  133. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  134. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  135. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  136. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  137. data/bundler/{man → lib/bundler/man}/bundle.1 +17 -12
  138. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  139. data/bundler/lib/bundler/man/gemfile.5 +723 -0
  140. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +112 -95
  141. data/bundler/lib/bundler/man/index.txt +29 -0
  142. data/bundler/lib/bundler/match_metadata.rb +13 -0
  143. data/bundler/lib/bundler/match_platform.rb +1 -2
  144. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  145. data/bundler/lib/bundler/mirror.rb +10 -12
  146. data/bundler/lib/bundler/plugin/api/source.rb +29 -15
  147. data/bundler/lib/bundler/plugin/api.rb +1 -1
  148. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  149. data/bundler/lib/bundler/plugin/index.rb +31 -8
  150. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  151. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -9
  152. data/bundler/lib/bundler/plugin/installer.rb +35 -22
  153. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  154. data/bundler/lib/bundler/plugin.rb +102 -42
  155. data/bundler/lib/bundler/process_lock.rb +1 -1
  156. data/bundler/lib/bundler/remote_specification.rb +15 -8
  157. data/bundler/lib/bundler/resolver/base.rb +77 -0
  158. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  159. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  160. data/bundler/lib/bundler/resolver/package.rb +72 -0
  161. data/bundler/lib/bundler/resolver/root.rb +25 -0
  162. data/bundler/lib/bundler/resolver/spec_group.rb +49 -73
  163. data/bundler/lib/bundler/resolver.rb +343 -300
  164. data/bundler/lib/bundler/retry.rb +4 -4
  165. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  166. data/bundler/lib/bundler/ruby_version.rb +9 -37
  167. data/bundler/lib/bundler/rubygems_ext.rb +235 -92
  168. data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -21
  169. data/bundler/lib/bundler/rubygems_integration.rb +179 -515
  170. data/bundler/lib/bundler/runtime.rb +25 -40
  171. data/bundler/lib/bundler/self_manager.rb +168 -0
  172. data/bundler/lib/bundler/settings.rb +162 -118
  173. data/bundler/lib/bundler/setup.rb +11 -12
  174. data/bundler/lib/bundler/shared_helpers.rb +61 -102
  175. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  176. data/bundler/lib/bundler/source/git/git_proxy.rb +257 -128
  177. data/bundler/lib/bundler/source/git.rb +84 -61
  178. data/bundler/lib/bundler/source/metadata.rb +9 -9
  179. data/bundler/lib/bundler/source/path/installer.rb +11 -32
  180. data/bundler/lib/bundler/source/path.rb +28 -17
  181. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  182. data/bundler/lib/bundler/source/rubygems.rb +171 -197
  183. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  184. data/bundler/lib/bundler/source.rb +30 -10
  185. data/bundler/lib/bundler/source_list.rb +112 -67
  186. data/bundler/lib/bundler/source_map.rb +71 -0
  187. data/bundler/lib/bundler/spec_set.rb +86 -72
  188. data/bundler/lib/bundler/stub_specification.rb +45 -37
  189. data/bundler/lib/bundler/templates/Executable +3 -5
  190. data/bundler/lib/bundler/templates/Executable.bundler +21 -17
  191. data/bundler/lib/bundler/templates/Executable.standalone +4 -4
  192. data/bundler/lib/bundler/templates/Gemfile +0 -2
  193. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  194. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  195. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  196. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +22 -2
  197. data/bundler/lib/bundler/templates/newgem/README.md.tt +13 -15
  198. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +33 -5
  199. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  200. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  201. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  202. data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +2 -0
  203. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  204. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  205. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  206. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  207. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  208. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  209. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  210. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +36 -41
  211. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  212. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  213. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  214. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  215. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  216. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  217. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  218. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  219. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  220. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  221. data/bundler/lib/bundler/ui/shell.rb +39 -20
  222. data/bundler/lib/bundler/ui/silent.rb +21 -5
  223. data/bundler/lib/bundler/ui.rb +3 -3
  224. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  225. data/bundler/lib/bundler/vendor/.document +1 -0
  226. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  227. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  228. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  229. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  230. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  231. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  232. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1493 -425
  233. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  234. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  235. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  236. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  237. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  238. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  239. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  240. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  241. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  242. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +155 -0
  243. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  244. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  245. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  246. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  247. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  248. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  249. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  250. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  251. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  252. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  253. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  254. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  255. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  256. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  257. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  258. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  259. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +25 -14
  260. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +20 -10
  261. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +34 -15
  262. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  263. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  264. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  265. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
  266. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  267. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  268. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  269. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  270. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  271. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  272. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  273. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  274. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +40 -6
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +88 -13
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  284. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  285. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  286. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  287. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  288. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  289. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  290. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  291. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  292. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  293. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  294. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  295. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  296. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  297. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  298. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  299. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  300. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  301. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  302. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  303. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  304. data/bundler/lib/bundler/vendored_persistent.rb +2 -39
  305. data/bundler/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  306. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  307. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  308. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  309. data/bundler/lib/bundler/version.rb +5 -20
  310. data/bundler/lib/bundler/vlad.rb +2 -2
  311. data/bundler/lib/bundler/worker.rb +26 -15
  312. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  313. data/bundler/lib/bundler.rb +285 -183
  314. data/hide_lib_for_update/note.txt +0 -4
  315. data/lib/rubygems/available_set.rb +7 -8
  316. data/lib/rubygems/basic_specification.rb +44 -31
  317. data/lib/rubygems/bundler_version_finder.rb +28 -50
  318. data/lib/rubygems/command.rb +104 -46
  319. data/lib/rubygems/command_manager.rb +35 -16
  320. data/lib/rubygems/commands/build_command.rb +77 -26
  321. data/lib/rubygems/commands/cert_command.rb +78 -76
  322. data/lib/rubygems/commands/check_command.rb +20 -22
  323. data/lib/rubygems/commands/cleanup_command.rb +36 -32
  324. data/lib/rubygems/commands/contents_command.rb +16 -18
  325. data/lib/rubygems/commands/dependency_command.rb +39 -50
  326. data/lib/rubygems/commands/environment_command.rb +11 -13
  327. data/lib/rubygems/commands/fetch_command.rb +33 -16
  328. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  329. data/lib/rubygems/commands/help_command.rb +7 -7
  330. data/lib/rubygems/commands/info_command.rb +11 -6
  331. data/lib/rubygems/commands/install_command.rb +45 -79
  332. data/lib/rubygems/commands/list_command.rb +9 -8
  333. data/lib/rubygems/commands/lock_command.rb +7 -9
  334. data/lib/rubygems/commands/mirror_command.rb +3 -4
  335. data/lib/rubygems/commands/open_command.rb +11 -14
  336. data/lib/rubygems/commands/outdated_command.rb +5 -6
  337. data/lib/rubygems/commands/owner_command.rb +29 -22
  338. data/lib/rubygems/commands/pristine_command.rb +61 -51
  339. data/lib/rubygems/commands/push_command.rb +26 -63
  340. data/lib/rubygems/commands/query_command.rb +21 -337
  341. data/lib/rubygems/commands/rdoc_command.rb +26 -26
  342. data/lib/rubygems/commands/search_command.rb +8 -8
  343. data/lib/rubygems/commands/server_command.rb +16 -77
  344. data/lib/rubygems/commands/setup_command.rb +282 -241
  345. data/lib/rubygems/commands/signin_command.rb +9 -10
  346. data/lib/rubygems/commands/signout_command.rb +7 -9
  347. data/lib/rubygems/commands/sources_command.rb +42 -26
  348. data/lib/rubygems/commands/specification_command.rb +25 -20
  349. data/lib/rubygems/commands/stale_command.rb +3 -3
  350. data/lib/rubygems/commands/uninstall_command.rb +58 -49
  351. data/lib/rubygems/commands/unpack_command.rb +15 -44
  352. data/lib/rubygems/commands/update_command.rb +133 -81
  353. data/lib/rubygems/commands/which_command.rb +8 -11
  354. data/lib/rubygems/commands/yank_command.rb +22 -19
  355. data/lib/rubygems/compatibility.rb +7 -5
  356. data/lib/rubygems/config_file.rb +101 -47
  357. data/lib/rubygems/core_ext/kernel_gem.rb +8 -12
  358. data/lib/rubygems/core_ext/kernel_require.rb +124 -83
  359. data/lib/rubygems/core_ext/kernel_warn.rb +35 -30
  360. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  361. data/lib/rubygems/defaults.rb +131 -55
  362. data/lib/rubygems/dependency.rb +44 -27
  363. data/lib/rubygems/dependency_installer.rb +49 -205
  364. data/lib/rubygems/dependency_list.rb +24 -25
  365. data/lib/rubygems/deprecate.rb +106 -12
  366. data/lib/rubygems/doctor.rb +22 -22
  367. data/lib/rubygems/errors.rb +8 -14
  368. data/lib/rubygems/exceptions.rb +35 -33
  369. data/lib/rubygems/ext/build_error.rb +2 -0
  370. data/lib/rubygems/ext/builder.rb +71 -95
  371. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  372. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  373. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  374. data/lib/rubygems/ext/configure_builder.rb +5 -8
  375. data/lib/rubygems/ext/ext_conf_builder.rb +45 -65
  376. data/lib/rubygems/ext/rake_builder.rb +7 -10
  377. data/lib/rubygems/ext.rb +7 -6
  378. data/lib/rubygems/gem_runner.rb +15 -26
  379. data/lib/rubygems/gemcutter_utilities.rb +179 -54
  380. data/lib/rubygems/indexer.rb +38 -53
  381. data/lib/rubygems/install_default_message.rb +2 -2
  382. data/lib/rubygems/install_message.rb +2 -2
  383. data/lib/rubygems/install_update_options.rb +73 -64
  384. data/lib/rubygems/installer.rb +230 -173
  385. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  386. data/lib/rubygems/local_remote_options.rb +22 -24
  387. data/lib/rubygems/mock_gem_ui.rb +2 -5
  388. data/lib/rubygems/name_tuple.rb +10 -14
  389. data/lib/rubygems/openssl.rb +7 -0
  390. data/lib/rubygems/optparse/.document +1 -0
  391. data/lib/rubygems/optparse/COPYING +56 -0
  392. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  393. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  394. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  395. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  396. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  397. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  398. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  399. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  400. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  401. data/lib/rubygems/optparse.rb +3 -0
  402. data/lib/rubygems/package/digest_io.rb +0 -2
  403. data/lib/rubygems/package/file_source.rb +2 -4
  404. data/lib/rubygems/package/io_source.rb +4 -2
  405. data/lib/rubygems/package/old.rb +9 -11
  406. data/lib/rubygems/package/tar_header.rb +73 -66
  407. data/lib/rubygems/package/tar_reader/entry.rb +8 -9
  408. data/lib/rubygems/package/tar_reader.rb +16 -13
  409. data/lib/rubygems/package/tar_writer.rb +12 -22
  410. data/lib/rubygems/package.rb +142 -125
  411. data/lib/rubygems/package_task.rb +5 -11
  412. data/lib/rubygems/path_support.rb +3 -8
  413. data/lib/rubygems/platform.rb +113 -73
  414. data/lib/rubygems/psych_tree.rb +1 -1
  415. data/lib/rubygems/query_utils.rb +351 -0
  416. data/lib/rubygems/rdoc.rb +4 -16
  417. data/lib/rubygems/remote_fetcher.rb +64 -136
  418. data/lib/rubygems/request/connection_pools.rb +7 -11
  419. data/lib/rubygems/request/http_pool.rb +2 -3
  420. data/lib/rubygems/request.rb +31 -32
  421. data/lib/rubygems/request_set/gem_dependency_api.rb +135 -136
  422. data/lib/rubygems/request_set/lockfile/parser.rb +28 -28
  423. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -5
  424. data/lib/rubygems/request_set/lockfile.rb +21 -20
  425. data/lib/rubygems/request_set.rb +30 -43
  426. data/lib/rubygems/requirement.rb +42 -64
  427. data/lib/rubygems/resolver/activation_request.rb +29 -53
  428. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  429. data/lib/rubygems/resolver/api_set.rb +33 -26
  430. data/lib/rubygems/resolver/api_specification.rb +30 -16
  431. data/lib/rubygems/resolver/best_set.rb +9 -11
  432. data/lib/rubygems/resolver/composed_set.rb +3 -5
  433. data/lib/rubygems/resolver/conflict.rb +12 -19
  434. data/lib/rubygems/resolver/current_set.rb +0 -2
  435. data/lib/rubygems/resolver/dependency_request.rb +3 -5
  436. data/lib/rubygems/resolver/git_set.rb +2 -4
  437. data/lib/rubygems/resolver/git_specification.rb +6 -8
  438. data/lib/rubygems/resolver/index_set.rb +4 -6
  439. data/lib/rubygems/resolver/index_specification.rb +38 -7
  440. data/lib/rubygems/resolver/installed_specification.rb +4 -6
  441. data/lib/rubygems/resolver/installer_set.rb +69 -27
  442. data/lib/rubygems/resolver/local_specification.rb +2 -4
  443. data/lib/rubygems/resolver/lock_set.rb +7 -9
  444. data/lib/rubygems/resolver/lock_specification.rb +6 -8
  445. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  446. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  447. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  448. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  449. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  450. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  451. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  452. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  453. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  454. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  455. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  456. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  457. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +42 -9
  458. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +82 -8
  459. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  460. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  461. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  462. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  463. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  464. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  465. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  466. data/lib/rubygems/resolver/molinillo.rb +1 -1
  467. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  468. data/lib/rubygems/resolver/set.rb +0 -3
  469. data/lib/rubygems/resolver/source_set.rb +0 -2
  470. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  471. data/lib/rubygems/resolver/specification.rb +14 -3
  472. data/lib/rubygems/resolver/vendor_set.rb +1 -3
  473. data/lib/rubygems/resolver/vendor_specification.rb +3 -5
  474. data/lib/rubygems/resolver.rb +58 -54
  475. data/lib/rubygems/s3_uri_signer.rb +175 -0
  476. data/lib/rubygems/safe_yaml.rb +14 -16
  477. data/lib/rubygems/security/policies.rb +47 -47
  478. data/lib/rubygems/security/policy.rb +25 -29
  479. data/lib/rubygems/security/signer.rb +16 -18
  480. data/lib/rubygems/security/trust_dir.rb +5 -6
  481. data/lib/rubygems/security.rb +90 -69
  482. data/lib/rubygems/security_option.rb +7 -8
  483. data/lib/rubygems/source/git.rb +30 -30
  484. data/lib/rubygems/source/installed.rb +1 -3
  485. data/lib/rubygems/source/local.rb +4 -6
  486. data/lib/rubygems/source/lock.rb +0 -2
  487. data/lib/rubygems/source/specific_file.rb +1 -3
  488. data/lib/rubygems/source/vendor.rb +0 -2
  489. data/lib/rubygems/source.rb +50 -38
  490. data/lib/rubygems/source_list.rb +9 -13
  491. data/lib/rubygems/spec_fetcher.rb +52 -64
  492. data/lib/rubygems/specification.rb +432 -463
  493. data/lib/rubygems/specification_policy.rb +185 -87
  494. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  495. data/lib/rubygems/stub_specification.rb +24 -29
  496. data/lib/rubygems/text.rb +21 -21
  497. data/lib/rubygems/tsort/.document +1 -0
  498. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  499. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  500. data/lib/rubygems/tsort.rb +3 -0
  501. data/lib/rubygems/uninstaller.rb +110 -57
  502. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  503. data/lib/rubygems/update_suggestion.rb +69 -0
  504. data/lib/rubygems/uri.rb +126 -0
  505. data/lib/rubygems/uri_formatter.rb +2 -4
  506. data/lib/rubygems/user_interaction.rb +46 -49
  507. data/lib/rubygems/util/licenses.rb +511 -404
  508. data/lib/rubygems/util.rb +40 -56
  509. data/lib/rubygems/validator.rb +15 -37
  510. data/lib/rubygems/version.rb +48 -29
  511. data/lib/rubygems/version_option.rb +11 -5
  512. data/lib/rubygems.rb +305 -332
  513. data/rubygems-update.gemspec +6 -13
  514. data/setup.rb +11 -22
  515. data/test/rubygems/alternate_cert.pem +14 -14
  516. data/test/rubygems/alternate_cert_32.pem +15 -15
  517. data/test/rubygems/alternate_key.pem +25 -25
  518. data/test/rubygems/bundler_test_gem.rb +419 -0
  519. data/test/rubygems/ca_cert.pem +74 -65
  520. data/test/rubygems/child_cert.pem +15 -16
  521. data/test/rubygems/child_cert_32.pem +15 -16
  522. data/test/rubygems/child_key.pem +25 -25
  523. data/test/rubygems/client.pem +103 -45
  524. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  525. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  526. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  527. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  528. data/test/rubygems/encrypted_private_key.pem +26 -26
  529. data/test/rubygems/expired_cert.pem +15 -15
  530. data/test/rubygems/future_cert.pem +15 -15
  531. data/test/rubygems/future_cert_32.pem +15 -15
  532. data/test/rubygems/grandchild_cert.pem +15 -16
  533. data/test/rubygems/grandchild_cert_32.pem +15 -16
  534. data/test/rubygems/grandchild_key.pem +25 -25
  535. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +505 -507
  536. data/{lib → test}/rubygems/installer_test_case.rb +115 -53
  537. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  538. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  539. data/test/rubygems/invalid_key.pem +25 -25
  540. data/test/rubygems/invalid_signer_cert.pem +15 -15
  541. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  542. data/test/rubygems/invalidchild_cert.pem +15 -16
  543. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  544. data/test/rubygems/invalidchild_key.pem +25 -25
  545. data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
  546. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  547. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  548. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  549. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  550. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  551. data/test/rubygems/private_ec_key.pem +9 -0
  552. data/test/rubygems/private_key.pem +25 -25
  553. data/test/rubygems/public_cert.pem +16 -16
  554. data/test/rubygems/public_cert_32.pem +15 -15
  555. data/test/rubygems/public_key.pem +7 -7
  556. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  557. data/test/rubygems/rubygems_plugin.rb +2 -4
  558. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  559. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  560. data/test/rubygems/ssl_cert.pem +78 -17
  561. data/test/rubygems/ssl_key.pem +25 -13
  562. data/test/rubygems/test_bundled_ca.rb +44 -47
  563. data/test/rubygems/test_config.rb +5 -7
  564. data/test/rubygems/test_deprecate.rb +90 -10
  565. data/test/rubygems/test_exit.rb +17 -0
  566. data/test/rubygems/test_gem.rb +679 -885
  567. data/test/rubygems/test_gem_available_set.rb +24 -25
  568. data/test/rubygems/test_gem_bundler_version_finder.rb +42 -42
  569. data/test/rubygems/test_gem_command.rb +186 -39
  570. data/test/rubygems/test_gem_command_manager.rb +166 -36
  571. data/test/rubygems/test_gem_commands_build_command.rb +436 -52
  572. data/test/rubygems/test_gem_commands_cert_command.rb +193 -124
  573. data/test/rubygems/test_gem_commands_check_command.rb +9 -11
  574. data/test/rubygems/test_gem_commands_cleanup_command.rb +87 -62
  575. data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
  576. data/test/rubygems/test_gem_commands_dependency_command.rb +39 -41
  577. data/test/rubygems/test_gem_commands_environment_command.rb +60 -48
  578. data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
  579. data/test/rubygems/test_gem_commands_generate_index_command.rb +39 -9
  580. data/test/rubygems/test_gem_commands_help_command.rb +34 -19
  581. data/test/rubygems/test_gem_commands_info_command.rb +34 -9
  582. data/test/rubygems/test_gem_commands_install_command.rb +600 -173
  583. data/test/rubygems/test_gem_commands_list_command.rb +5 -7
  584. data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
  585. data/test/rubygems/test_gem_commands_mirror.rb +3 -4
  586. data/test/rubygems/test_gem_commands_open_command.rb +16 -19
  587. data/test/rubygems/test_gem_commands_outdated_command.rb +24 -7
  588. data/test/rubygems/test_gem_commands_owner_command.rb +183 -49
  589. data/test/rubygems/test_gem_commands_pristine_command.rb +222 -89
  590. data/test/rubygems/test_gem_commands_push_command.rb +178 -69
  591. data/test/rubygems/test_gem_commands_query_command.rb +114 -89
  592. data/test/rubygems/test_gem_commands_search_command.rb +2 -4
  593. data/test/rubygems/test_gem_commands_server_command.rb +6 -46
  594. data/test/rubygems/test_gem_commands_setup_command.rb +334 -157
  595. data/test/rubygems/test_gem_commands_signin_command.rb +187 -27
  596. data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
  597. data/test/rubygems/test_gem_commands_sources_command.rb +266 -33
  598. data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
  599. data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
  600. data/test/rubygems/test_gem_commands_uninstall_command.rb +230 -95
  601. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
  602. data/test/rubygems/test_gem_commands_update_command.rb +412 -102
  603. data/test/rubygems/test_gem_commands_which_command.rb +12 -14
  604. data/test/rubygems/test_gem_commands_yank_command.rb +107 -26
  605. data/test/rubygems/test_gem_config_file.rb +120 -96
  606. data/test/rubygems/test_gem_dependency.rb +94 -86
  607. data/test/rubygems/test_gem_dependency_installer.rb +305 -388
  608. data/test/rubygems/test_gem_dependency_list.rb +66 -61
  609. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
  610. data/test/rubygems/test_gem_doctor.rb +73 -47
  611. data/test/rubygems/test_gem_ext_builder.rb +116 -106
  612. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  613. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +8 -0
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +233 -0
  615. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  616. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  617. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +1 -0
  618. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  619. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +233 -0
  620. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  621. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  622. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  623. data/test/rubygems/test_gem_ext_cargo_builder.rb +166 -0
  624. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  625. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  626. data/test/rubygems/test_gem_ext_cmake_builder.rb +32 -37
  627. data/test/rubygems/test_gem_ext_configure_builder.rb +23 -31
  628. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +75 -79
  629. data/test/rubygems/test_gem_ext_rake_builder.rb +49 -30
  630. data/test/rubygems/test_gem_gem_runner.rb +52 -7
  631. data/test/rubygems/test_gem_gemcutter_utilities.rb +91 -76
  632. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
  633. data/test/rubygems/test_gem_indexer.rb +120 -105
  634. data/test/rubygems/test_gem_install_update_options.rb +57 -33
  635. data/test/rubygems/test_gem_installer.rb +1230 -644
  636. data/test/rubygems/test_gem_local_remote_options.rb +11 -13
  637. data/test/rubygems/test_gem_name_tuple.rb +4 -6
  638. data/test/rubygems/test_gem_package.rb +396 -266
  639. data/test/rubygems/test_gem_package_old.rb +57 -56
  640. data/test/rubygems/test_gem_package_tar_header.rb +108 -50
  641. data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
  642. data/test/rubygems/test_gem_package_tar_reader_entry.rb +77 -20
  643. data/test/rubygems/test_gem_package_tar_writer.rb +107 -101
  644. data/test/rubygems/test_gem_package_task.rb +58 -25
  645. data/test/rubygems/test_gem_path_support.rb +29 -29
  646. data/test/rubygems/test_gem_platform.rb +388 -199
  647. data/test/rubygems/test_gem_rdoc.rb +20 -155
  648. data/test/rubygems/test_gem_remote_fetcher.rb +474 -303
  649. data/test/rubygems/test_gem_request.rb +128 -85
  650. data/test/rubygems/test_gem_request_connection_pools.rb +32 -32
  651. data/test/rubygems/test_gem_request_set.rb +186 -110
  652. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +280 -261
  653. data/test/rubygems/test_gem_request_set_lockfile.rb +93 -94
  654. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -69
  655. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -136
  656. data/test/rubygems/test_gem_requirement.rb +140 -55
  657. data/test/rubygems/test_gem_resolver.rb +224 -115
  658. data/test/rubygems/test_gem_resolver_activation_request.rb +9 -40
  659. data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
  660. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
  661. data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
  662. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
  663. data/test/rubygems/test_gem_resolver_conflict.rb +12 -18
  664. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
  665. data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
  666. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -22
  667. data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
  668. data/test/rubygems/test_gem_resolver_index_specification.rb +21 -18
  669. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -8
  670. data/test/rubygems/test_gem_resolver_installer_set.rb +106 -44
  671. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
  672. data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
  673. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
  674. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
  675. data/test/rubygems/test_gem_resolver_specification.rb +8 -10
  676. data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
  677. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
  678. data/test/rubygems/test_gem_security.rb +109 -79
  679. data/test/rubygems/test_gem_security_policy.rb +102 -107
  680. data/test/rubygems/test_gem_security_signer.rb +51 -52
  681. data/test/rubygems/test_gem_security_trust_dir.rb +14 -16
  682. data/test/rubygems/test_gem_silent_ui.rb +47 -42
  683. data/test/rubygems/test_gem_source.rb +66 -51
  684. data/test/rubygems/test_gem_source_fetch_problem.rb +17 -8
  685. data/test/rubygems/test_gem_source_git.rb +74 -74
  686. data/test/rubygems/test_gem_source_installed.rb +16 -18
  687. data/test/rubygems/test_gem_source_list.rb +5 -5
  688. data/test/rubygems/test_gem_source_local.rb +15 -16
  689. data/test/rubygems/test_gem_source_lock.rb +31 -33
  690. data/test/rubygems/test_gem_source_specific_file.rb +18 -19
  691. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  692. data/test/rubygems/test_gem_source_vendor.rb +13 -15
  693. data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
  694. data/test/rubygems/test_gem_specification.rb +1051 -1071
  695. data/test/rubygems/test_gem_stream_ui.rb +25 -23
  696. data/test/rubygems/test_gem_stub_specification.rb +39 -56
  697. data/test/rubygems/test_gem_text.rb +8 -3
  698. data/test/rubygems/test_gem_uninstaller.rb +269 -100
  699. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
  700. data/test/rubygems/test_gem_update_suggestion.rb +208 -0
  701. data/test/rubygems/test_gem_uri.rb +39 -0
  702. data/test/rubygems/test_gem_uri_formatter.rb +14 -16
  703. data/test/rubygems/test_gem_util.rb +46 -34
  704. data/test/rubygems/test_gem_validator.rb +12 -15
  705. data/test/rubygems/test_gem_version.rb +49 -34
  706. data/test/rubygems/test_gem_version_option.rb +16 -18
  707. data/test/rubygems/test_kernel.rb +61 -53
  708. data/test/rubygems/test_project_sanity.rb +20 -0
  709. data/test/rubygems/test_remote_fetch_error.rb +7 -8
  710. data/test/rubygems/test_require.rb +415 -121
  711. data/test/rubygems/test_rubygems.rb +74 -0
  712. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +74 -50
  713. data/test/rubygems/wrong_key_cert.pem +15 -15
  714. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  715. data/test/test_changelog_generator.rb +17 -0
  716. metadata +218 -244
  717. data/.rubocop.yml +0 -66
  718. data/.travis.yml +0 -38
  719. data/History.txt +0 -3965
  720. data/Rakefile +0 -372
  721. data/appveyor.yml +0 -43
  722. data/bundler/CODE_OF_CONDUCT.md +0 -42
  723. data/bundler/CONTRIBUTING.md +0 -17
  724. data/bundler/exe/bundle_ruby +0 -60
  725. data/bundler/lib/bundler/cli/package.rb +0 -49
  726. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  727. data/bundler/lib/bundler/dep_proxy.rb +0 -48
  728. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  729. data/bundler/lib/bundler/gemdeps.rb +0 -29
  730. data/bundler/lib/bundler/psyched_yaml.rb +0 -37
  731. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  732. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  733. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  734. data/bundler/lib/bundler/templates/gems.rb +0 -8
  735. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  736. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  737. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  738. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  739. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  740. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  741. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  742. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  743. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  744. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  745. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  746. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  747. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  748. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  749. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  750. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  751. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  752. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  753. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  754. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  755. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  756. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  757. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  758. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  759. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  760. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  761. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  762. data/bundler/lib/bundler/version_ranges.rb +0 -76
  763. data/bundler/man/bundle-gem.1 +0 -80
  764. data/bundler/man/bundle-gem.ronn +0 -78
  765. data/bundler/man/bundle-package.1 +0 -55
  766. data/lib/rubygems/psych_additions.rb +0 -10
  767. data/lib/rubygems/server.rb +0 -878
  768. data/lib/rubygems/source_local.rb +0 -7
  769. data/lib/rubygems/source_specific_file.rb +0 -6
  770. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  771. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  772. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  773. data/lib/rubygems/syck_hack.rb +0 -77
  774. data/lib/ubygems.rb +0 -14
  775. data/test/rubygems/bogussources.rb +0 -9
  776. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  777. data/test/rubygems/test_gem_server.rb +0 -607
  778. data/util/CL2notes +0 -55
  779. data/util/ci +0 -77
  780. data/util/create_certs.rb +0 -171
  781. data/util/create_encrypted_key.rb +0 -16
  782. data/util/generate_spdx_license_list.rb +0 -61
  783. data/util/patch_with_prs.rb +0 -77
  784. data/util/rubocop +0 -8
  785. data/util/update_bundled_ca_certificates.rb +0 -139
  786. data/util/update_changelog.rb +0 -67
  787. /data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  788. /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  789. /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  790. /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  791. /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  792. /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  793. /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  794. /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  795. /data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
@@ -5,13 +5,12 @@
5
5
  # See LICENSE.txt for permissions.
6
6
  #++
7
7
 
8
- require 'rubygems/command'
9
- require 'rubygems/exceptions'
10
- require 'rubygems/deprecate'
11
- require 'rubygems/package'
12
- require 'rubygems/ext'
13
- require 'rubygems/user_interaction'
14
- require 'fileutils'
8
+ require_relative "installer_uninstaller_utils"
9
+ require_relative "exceptions"
10
+ require_relative "deprecate"
11
+ require_relative "package"
12
+ require_relative "ext"
13
+ require_relative "user_interaction"
15
14
 
16
15
  ##
17
16
  # The installer installs the files contained in the .gem into the Gem.home.
@@ -27,7 +26,6 @@ require 'fileutils'
27
26
  # file. See Gem.pre_install and Gem.post_install for details.
28
27
 
29
28
  class Gem::Installer
30
-
31
29
  extend Gem::Deprecate
32
30
 
33
31
  ##
@@ -43,10 +41,7 @@ class Gem::Installer
43
41
 
44
42
  include Gem::UserInteraction
45
43
 
46
- ##
47
- # Filename of the gem being installed.
48
-
49
- attr_reader :gem
44
+ include Gem::InstallerUninstallerUtils
50
45
 
51
46
  ##
52
47
  # The directory a gem's executables will be installed into
@@ -65,22 +60,35 @@ class Gem::Installer
65
60
 
66
61
  attr_reader :options
67
62
 
68
- @path_warning = false
63
+ ##
64
+ # The gem package instance.
65
+
66
+ attr_reader :package
69
67
 
70
- @install_lock = Mutex.new
68
+ @path_warning = false
71
69
 
72
70
  class << self
71
+ #
72
+ # Changes in rubygems to lazily loading `rubygems/command` (in order to
73
+ # lazily load `optparse` as a side effect) affect bundler's custom installer
74
+ # which uses `Gem::Command` without requiring it (up until bundler 2.2.29).
75
+ # This hook is to compensate for that missing require.
76
+ #
77
+ # TODO: Remove when rubygems no longer supports running on bundler older
78
+ # than 2.2.29.
73
79
 
74
- ##
75
- # True if we've warned about PATH not including Gem.bindir
80
+ def inherited(klass)
81
+ if klass.name == "Bundler::RubyGemsGemInstaller"
82
+ require "rubygems/command"
83
+ end
76
84
 
77
- attr_accessor :path_warning
85
+ super(klass)
86
+ end
78
87
 
79
88
  ##
80
- # Certain aspects of the install process are not thread-safe. This lock is
81
- # used to allow multiple threads to install Gems at the same time.
89
+ # True if we've warned about PATH not including Gem.bindir
82
90
 
83
- attr_reader :install_lock
91
+ attr_accessor :path_warning
84
92
 
85
93
  ##
86
94
  # Overrides the executable format.
@@ -95,7 +103,6 @@ class Gem::Installer
95
103
  def exec_format
96
104
  @exec_format ||= Gem.default_exec_format
97
105
  end
98
-
99
106
  end
100
107
 
101
108
  ##
@@ -118,14 +125,16 @@ class Gem::Installer
118
125
  @spec = spec
119
126
  end
120
127
 
121
- def extract_files(destination_dir, pattern = '*')
128
+ def extract_files(destination_dir, pattern = "*")
122
129
  FileUtils.mkdir_p destination_dir
123
130
 
124
131
  spec.files.each do |file|
125
132
  file = File.join destination_dir, file
126
133
  next if File.exist? file
127
134
  FileUtils.mkdir_p File.dirname(file)
128
- File.open file, 'w' do |fp| fp.puts "# #{file}" end
135
+ File.open file, "w" do |fp|
136
+ fp.puts "# #{file}"
137
+ end
129
138
  end
130
139
  end
131
140
 
@@ -168,18 +177,10 @@ class Gem::Installer
168
177
  # :post_install_message:: Print gem post install message if true
169
178
 
170
179
  def initialize(package, options={})
171
- require 'fileutils'
180
+ require "fileutils"
172
181
 
173
182
  @options = options
174
- if package.is_a? String
175
- security_policy = options[:security_policy]
176
- @package = Gem::Package.new package, security_policy
177
- if $VERBOSE
178
- warn "constructing an Installer object with a string is deprecated. Please use Gem::Installer.at (called from: #{caller.first})"
179
- end
180
- else
181
- @package = package
182
- end
183
+ @package = package
183
184
 
184
185
  process_options
185
186
 
@@ -187,11 +188,10 @@ class Gem::Installer
187
188
  @package.prog_mode = options[:prog_mode]
188
189
  @package.data_mode = options[:data_mode]
189
190
 
190
- @bin_dir = options[:bin_dir] if options[:bin_dir]
191
-
192
- if options[:user_install] and not options[:unpack]
191
+ if options[:user_install]
193
192
  @gem_home = Gem.user_dir
194
193
  @bin_dir = Gem.bindir gem_home unless options[:bin_dir]
194
+ @plugins_dir = Gem.plugindir(gem_home)
195
195
  check_that_user_bin_dir_is_in_path
196
196
  end
197
197
  end
@@ -201,8 +201,8 @@ class Gem::Installer
201
201
  #
202
202
  # If +@force+ is set +filename+ is overwritten.
203
203
  #
204
- # If +filename+ exists and is a RubyGems wrapper for different gem the user
205
- # is consulted.
204
+ # If +filename+ exists and it is a RubyGems wrapper for a different gem, then
205
+ # the user is consulted.
206
206
  #
207
207
  # If +filename+ exists and +@bin_dir+ is Gem.default_bindir (/usr/local) the
208
208
  # user is consulted.
@@ -219,13 +219,23 @@ class Gem::Installer
219
219
  ruby_executable = false
220
220
  existing = nil
221
221
 
222
- File.open generated_bin, 'rb' do |io|
223
- next unless io.gets =~ /^#!/ # shebang
222
+ File.open generated_bin, "rb" do |io|
223
+ line = io.gets
224
+ shebang = /^#!.*ruby/
225
+
226
+ if load_relative_enabled?
227
+ until line.nil? || line =~ shebang do
228
+ line = io.gets
229
+ end
230
+ end
231
+
232
+ next unless line =~ shebang
233
+
224
234
  io.gets # blankline
225
235
 
226
236
  # TODO detect a specially formatted comment instead of trying
227
- # to run a regexp against Ruby code.
228
- next unless io.gets =~ /This file was generated by RubyGems/
237
+ # to find a string inside Ruby code.
238
+ next unless io.gets.to_s.include?("This file was generated by RubyGems")
229
239
 
230
240
  ruby_executable = true
231
241
  existing = io.read.slice(%r{
@@ -241,12 +251,12 @@ class Gem::Installer
241
251
  return if spec.name == existing
242
252
 
243
253
  # somebody has written to RubyGems' directory, overwrite, too bad
244
- return if Gem.default_bindir != @bin_dir and not ruby_executable
254
+ return if Gem.default_bindir != @bin_dir && !ruby_executable
245
255
 
246
256
  question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
247
257
 
248
258
  if ruby_executable
249
- question << (existing || 'an unknown executable')
259
+ question << (existing || "an unknown executable")
250
260
 
251
261
  return if ask_yes_no "#{question}\nOverwrite the executable?", false
252
262
 
@@ -275,8 +285,6 @@ class Gem::Installer
275
285
 
276
286
  def spec
277
287
  @package.spec
278
- rescue Gem::Package::Error => e
279
- raise Gem::InstallError, "invalid gem: #{e.message}"
280
288
  end
281
289
 
282
290
  ##
@@ -293,8 +301,6 @@ class Gem::Installer
293
301
  def install
294
302
  pre_install_checks
295
303
 
296
- FileUtils.rm_f File.join gem_home, 'specifications', spec.spec_name
297
-
298
304
  run_pre_install_hooks
299
305
 
300
306
  # Set loaded_from to ensure extension_dir is correct
@@ -320,8 +326,12 @@ class Gem::Installer
320
326
  build_extensions
321
327
  write_build_info_file
322
328
  run_post_build_hooks
329
+ end
330
+
331
+ generate_bin
332
+ generate_plugins
323
333
 
324
- generate_bin
334
+ unless @options[:install_as_default]
325
335
  write_spec
326
336
  write_cache_file
327
337
  end
@@ -330,7 +340,7 @@ class Gem::Installer
330
340
 
331
341
  say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
332
342
 
333
- Gem::Installer.install_lock.synchronize { Gem::Specification.reset }
343
+ Gem::Specification.add_spec(spec)
334
344
 
335
345
  run_post_install_hooks
336
346
 
@@ -345,7 +355,7 @@ class Gem::Installer
345
355
  def run_pre_install_hooks # :nodoc:
346
356
  Gem.pre_install_hooks.each do |hook|
347
357
  if hook.call(self) == false
348
- location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
358
+ location = " at #{$1}" if hook.inspect =~ /[ @](.*:\d+)/
349
359
 
350
360
  message = "pre-install hook#{location} failed for #{spec.full_name}"
351
361
  raise Gem::InstallError, message
@@ -358,7 +368,7 @@ class Gem::Installer
358
368
  if hook.call(self) == false
359
369
  FileUtils.rm_rf gem_dir
360
370
 
361
- location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
371
+ location = " at #{$1}" if hook.inspect =~ /[ @](.*:\d+)/
362
372
 
363
373
  message = "post-build hook#{location} failed for #{spec.full_name}"
364
374
  raise Gem::InstallError, message
@@ -382,7 +392,7 @@ class Gem::Installer
382
392
  specs = []
383
393
 
384
394
  Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
385
- spec = Gem::Specification.load path.untaint
395
+ spec = Gem::Specification.load path.tap(&Gem::UNTAINT)
386
396
  specs << spec if spec
387
397
  end
388
398
 
@@ -408,10 +418,10 @@ class Gem::Installer
408
418
  # True if the gems in the system satisfy +dependency+.
409
419
 
410
420
  def installation_satisfies_dependency?(dependency)
411
- return true if @options[:development] and dependency.type == :development
412
- return true if installed_specs.detect { |s| dependency.matches_spec? s }
421
+ return true if @options[:development] && dependency.type == :development
422
+ return true if installed_specs.detect {|s| dependency.matches_spec? s }
413
423
  return false if @only_install_dir
414
- not dependency.matching_specs.empty?
424
+ !dependency.matching_specs.empty?
415
425
  end
416
426
 
417
427
  ##
@@ -421,6 +431,7 @@ class Gem::Installer
421
431
  @gem_dir = directory
422
432
  extract_files
423
433
  end
434
+ rubygems_deprecate :unpack
424
435
 
425
436
  ##
426
437
  # The location of the spec file that is installed.
@@ -435,7 +446,7 @@ class Gem::Installer
435
446
  #
436
447
 
437
448
  def default_spec_file
438
- File.join Gem::Specification.default_specifications_dir, "#{spec.full_name}.gemspec"
449
+ File.join gem_home, "specifications", "default", "#{spec.full_name}.gemspec"
439
450
  end
440
451
 
441
452
  ##
@@ -443,13 +454,9 @@ class Gem::Installer
443
454
  # specifications directory.
444
455
 
445
456
  def write_spec
446
- File.open spec_file, 'w' do |file|
447
- spec.installed_by_version = Gem.rubygems_version
457
+ spec.installed_by_version = Gem.rubygems_version
448
458
 
449
- file.puts spec.to_ruby_for_cache
450
-
451
- file.fsync rescue nil # for filesystems without fsync(2)
452
- end
459
+ Gem.write_binary(spec_file, spec.to_ruby_for_cache)
453
460
  end
454
461
 
455
462
  ##
@@ -457,9 +464,7 @@ class Gem::Installer
457
464
  # specifications/default directory.
458
465
 
459
466
  def write_default_spec
460
- File.open(default_spec_file, "w") do |file|
461
- file.puts spec.to_ruby
462
- end
467
+ Gem.write_binary(default_spec_file, spec.to_ruby)
463
468
  end
464
469
 
465
470
  ##
@@ -467,9 +472,9 @@ class Gem::Installer
467
472
 
468
473
  def generate_windows_script(filename, bindir)
469
474
  if Gem.win_platform?
470
- script_name = filename + ".bat"
475
+ script_name = formatted_program_filename(filename) + ".bat"
471
476
  script_path = File.join bindir, File.basename(script_name)
472
- File.open script_path, 'w' do |file|
477
+ File.open script_path, "w" do |file|
473
478
  file.puts windows_stub_script(bindir, filename)
474
479
  end
475
480
 
@@ -478,29 +483,22 @@ class Gem::Installer
478
483
  end
479
484
 
480
485
  def generate_bin # :nodoc:
481
- return if spec.executables.nil? or spec.executables.empty?
486
+ return if spec.executables.nil? || spec.executables.empty?
482
487
 
483
- begin
484
- Dir.mkdir @bin_dir, *[options[:dir_mode] && 0755].compact
485
- rescue SystemCallError
486
- raise unless File.directory? @bin_dir
487
- end
488
-
489
- raise Gem::FilePermissionError.new(@bin_dir) unless File.writable? @bin_dir
488
+ ensure_writable_dir @bin_dir
490
489
 
491
490
  spec.executables.each do |filename|
492
- filename.untaint
491
+ filename.tap(&Gem::UNTAINT)
493
492
  bin_path = File.join gem_dir, spec.bindir, filename
494
-
495
- unless File.exist? bin_path
496
- # TODO change this to a more useful warning
497
- warn "`#{bin_path}` does not exist, maybe `gem pristine #{spec.name}` will fix it?"
498
- next
499
- end
493
+ next unless File.exist? bin_path
500
494
 
501
495
  mode = File.stat(bin_path).mode
502
496
  dir_mode = options[:prog_mode] || (mode | 0111)
503
- FileUtils.chmod dir_mode, bin_path unless dir_mode == mode
497
+
498
+ unless dir_mode == mode
499
+ require "fileutils"
500
+ FileUtils.chmod dir_mode, bin_path
501
+ end
504
502
 
505
503
  check_executable_overwrite filename
506
504
 
@@ -509,7 +507,19 @@ class Gem::Installer
509
507
  else
510
508
  generate_bin_symlink filename, @bin_dir
511
509
  end
510
+ end
511
+ end
512
+
513
+ def generate_plugins # :nodoc:
514
+ latest = Gem::Specification.latest_spec_for(spec.name)
515
+ return if latest && latest.version > spec.version
512
516
 
517
+ ensure_writable_dir @plugins_dir
518
+
519
+ if spec.plugins.empty?
520
+ remove_plugins_for(spec, @plugins_dir)
521
+ else
522
+ regenerate_plugins_for(spec, @plugins_dir)
513
523
  end
514
524
  end
515
525
 
@@ -523,9 +533,10 @@ class Gem::Installer
523
533
  def generate_bin_script(filename, bindir)
524
534
  bin_script_path = File.join bindir, formatted_program_filename(filename)
525
535
 
536
+ require "fileutils"
526
537
  FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
527
538
 
528
- File.open bin_script_path, 'wb', 0755 do |file|
539
+ File.open bin_script_path, "wb", 0755 do |file|
529
540
  file.print app_script_text(filename)
530
541
  file.chmod(options[:prog_mode] || 0755)
531
542
  end
@@ -546,7 +557,7 @@ class Gem::Installer
546
557
  if File.exist? dst
547
558
  if File.symlink? dst
548
559
  link = File.readlink(dst).split File::SEPARATOR
549
- cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ''))
560
+ cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ""))
550
561
  return if spec.version < cur_version
551
562
  end
552
563
  File.unlink dst
@@ -574,11 +585,10 @@ class Gem::Installer
574
585
  #
575
586
 
576
587
  def shebang(bin_file_name)
577
- ruby_name = RbConfig::CONFIG['ruby_install_name'] if @env_shebang
578
588
  path = File.join gem_dir, spec.bindir, bin_file_name
579
- first_line = File.open(path, "rb") {|file| file.gets}
589
+ first_line = File.open(path, "rb") {|file| file.gets } || ""
580
590
 
581
- if /\A#!/ =~ first_line
591
+ if first_line.start_with?("#!")
582
592
  # Preserve extra words on shebang line, like "-w". Thanks RPA.
583
593
  shebang = first_line.sub(/\A\#!.*?ruby\S*((\s+\S+)+)/, "#!#{Gem.ruby}")
584
594
  opts = $1
@@ -587,7 +597,7 @@ class Gem::Installer
587
597
 
588
598
  if which = Gem.configuration[:custom_shebang]
589
599
  # replace bin_file_name with "ruby" to avoid endless loops
590
- which = which.gsub(/ #{bin_file_name}$/," #{RbConfig::CONFIG['ruby_install_name']}")
600
+ which = which.gsub(/ #{bin_file_name}$/," #{ruby_install_name}")
591
601
 
592
602
  which = which.gsub(/\$(\w+)/) do
593
603
  case $1
@@ -603,14 +613,12 @@ class Gem::Installer
603
613
  end
604
614
 
605
615
  "#!#{which}"
606
- elsif not ruby_name
607
- "#!#{Gem.ruby}#{opts}"
608
- elsif opts
609
- "#!/bin/sh\n'exec' #{ruby_name.dump} '-x' \"$0\" \"$@\"\n#{shebang}"
610
- else
616
+ elsif @env_shebang
611
617
  # Create a plain shebang line.
612
618
  @env_path ||= ENV_PATHS.find {|env_path| File.executable? env_path }
613
- "#!#{@env_path} #{ruby_name}"
619
+ "#!#{@env_path} #{ruby_install_name}"
620
+ else
621
+ "#{bash_prolog_script}#!#{Gem.ruby}#{opts}"
614
622
  end
615
623
  end
616
624
 
@@ -620,7 +628,7 @@ class Gem::Installer
620
628
 
621
629
  def ensure_loadable_spec
622
630
  ruby = spec.to_ruby_for_cache
623
- ruby.untaint
631
+ ruby.tap(&Gem::UNTAINT)
624
632
 
625
633
  begin
626
634
  eval ruby
@@ -630,27 +638,6 @@ class Gem::Installer
630
638
  end
631
639
  end
632
640
 
633
- def ensure_required_ruby_version_met # :nodoc:
634
- if rrv = spec.required_ruby_version
635
- ruby_version = Gem.ruby_version
636
- unless rrv.satisfied_by? ruby_version
637
- raise Gem::RuntimeRequirementNotMetError,
638
- "#{spec.name} requires Ruby version #{rrv}. The current ruby version is #{ruby_version}."
639
- end
640
- end
641
- end
642
-
643
- def ensure_required_rubygems_version_met # :nodoc:
644
- if rrgv = spec.required_rubygems_version
645
- unless rrgv.satisfied_by? Gem.rubygems_version
646
- rg_version = Gem::VERSION
647
- raise Gem::RuntimeRequirementNotMetError,
648
- "#{spec.name} requires RubyGems version #{rrgv}. The current RubyGems version is #{rg_version}. " +
649
- "Try 'gem update --system' to update RubyGems itself."
650
- end
651
- end
652
- end
653
-
654
641
  def ensure_dependencies_met # :nodoc:
655
642
  deps = spec.runtime_dependencies
656
643
  deps |= spec.development_dependencies if @development
@@ -662,17 +649,18 @@ class Gem::Installer
662
649
 
663
650
  def process_options # :nodoc:
664
651
  @options = {
665
- :bin_dir => nil,
666
- :env_shebang => false,
667
- :force => false,
652
+ :bin_dir => nil,
653
+ :env_shebang => false,
654
+ :force => false,
668
655
  :only_install_dir => false,
669
- :post_install_message => true
656
+ :post_install_message => true,
670
657
  }.merge options
671
658
 
672
659
  @env_shebang = options[:env_shebang]
673
660
  @force = options[:force]
674
661
  @install_dir = options[:install_dir]
675
662
  @gem_home = options[:install_dir] || Gem.dir
663
+ @plugins_dir = Gem.plugindir(@gem_home)
676
664
  @ignore_dependencies = options[:ignore_dependencies]
677
665
  @format_executable = options[:format_executable]
678
666
  @wrappers = options[:wrappers]
@@ -685,23 +673,25 @@ class Gem::Installer
685
673
  @development = options[:development]
686
674
  @build_root = options[:build_root]
687
675
 
688
- @build_args = options[:build_args] || Gem::Command.build_args
676
+ @build_args = options[:build_args]
689
677
 
690
678
  unless @build_root.nil?
691
- require 'pathname'
692
- @build_root = Pathname.new(@build_root).expand_path
693
- @bin_dir = File.join(@build_root, options[:bin_dir] || Gem.bindir(@gem_home))
694
- @gem_home = File.join(@build_root, @gem_home)
695
- alert_warning "You build with buildroot.\n Build root: #{@build_root}\n Bin dir: #{@bin_dir}\n Gem home: #{@gem_home}"
679
+ @bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ""))
680
+ @gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ""))
681
+ @plugins_dir = File.join(@build_root, @plugins_dir.gsub(/^[a-zA-Z]:/, ""))
682
+ alert_warning "You build with buildroot.\n Build root: #{@build_root}\n Bin dir: #{@bin_dir}\n Gem home: #{@gem_home}\n Plugins dir: #{@plugins_dir}"
696
683
  end
697
684
  end
698
685
 
699
686
  def check_that_user_bin_dir_is_in_path # :nodoc:
687
+ return if self.class.path_warning
688
+
700
689
  user_bin_dir = @bin_dir || Gem.bindir(gem_home)
701
- user_bin_dir = user_bin_dir.gsub(File::SEPARATOR, File::ALT_SEPARATOR) if
702
- File::ALT_SEPARATOR
690
+ user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
691
+
692
+ path = ENV["PATH"]
693
+ path = path.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
703
694
 
704
- path = ENV['PATH']
705
695
  if Gem.win_platform?
706
696
  path = path.downcase
707
697
  user_bin_dir = user_bin_dir.downcase
@@ -710,19 +700,16 @@ class Gem::Installer
710
700
  path = path.split(File::PATH_SEPARATOR)
711
701
 
712
702
  unless path.include? user_bin_dir
713
- unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV['HOME'], '~'))
714
- unless self.class.path_warning
715
- alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
716
- self.class.path_warning = true
717
- end
703
+ unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV["HOME"], "~"))
704
+ alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
705
+ self.class.path_warning = true
718
706
  end
719
707
  end
720
708
  end
721
709
 
722
- def verify_gem_home(unpack = false) # :nodoc:
710
+ def verify_gem_home # :nodoc:
723
711
  FileUtils.mkdir_p gem_home, :mode => options[:dir_mode] && 0755
724
- raise Gem::FilePermissionError, gem_home unless
725
- unpack or File.writable?(gem_home)
712
+ raise Gem::FilePermissionError, gem_home unless File.writable?(gem_home)
726
713
  end
727
714
 
728
715
  def verify_spec
@@ -730,19 +717,27 @@ class Gem::Installer
730
717
  raise Gem::InstallError, "#{spec} has an invalid name"
731
718
  end
732
719
 
733
- if spec.raw_require_paths.any?{|path| path =~ /\R/ }
720
+ if spec.raw_require_paths.any? {|path| path =~ /\R/ }
734
721
  raise Gem::InstallError, "#{spec} has an invalid require_paths"
735
722
  end
736
723
 
737
- if spec.extensions.any?{|ext| ext =~ /\R/ }
724
+ if spec.extensions.any? {|ext| ext =~ /\R/ }
738
725
  raise Gem::InstallError, "#{spec} has an invalid extensions"
739
726
  end
740
727
 
728
+ if spec.platform.to_s =~ /\R/
729
+ raise Gem::InstallError, "#{spec.platform} is an invalid platform"
730
+ end
731
+
741
732
  unless spec.specification_version.to_s =~ /\A\d+\z/
742
733
  raise Gem::InstallError, "#{spec} has an invalid specification_version"
743
734
  end
744
735
 
745
- if spec.dependencies.any? {|dep| dep.type =~ /\R/ || dep.name =~ /\R/ }
736
+ if spec.dependencies.any? {|dep| dep.type != :runtime && dep.type != :development }
737
+ raise Gem::InstallError, "#{spec} has an invalid dependencies"
738
+ end
739
+
740
+ if spec.dependencies.any? {|dep| dep.name =~ /(?:\R|[<>])/ }
746
741
  raise Gem::InstallError, "#{spec} has an invalid dependencies"
747
742
  end
748
743
  end
@@ -763,14 +758,14 @@ class Gem::Installer
763
758
  #
764
759
 
765
760
  require 'rubygems'
766
-
767
- version = "#{Gem::Requirement.default}.a"
761
+ #{gemdeps_load(spec.name)}
762
+ version = "#{Gem::Requirement.default_prerelease}"
768
763
 
769
764
  str = ARGV.first
770
765
  if str
771
766
  str = str.b[/\\A_(.*)_\\z/, 1]
772
767
  if str and Gem::Version.correct?(str)
773
- version = str
768
+ #{explicit_version_requirement(spec.name)}
774
769
  ARGV.shift
775
770
  end
776
771
  end
@@ -784,11 +779,29 @@ end
784
779
  TEXT
785
780
  end
786
781
 
782
+ def gemdeps_load(name)
783
+ return "" if name == "bundler"
784
+
785
+ <<-TEXT
786
+
787
+ Gem.use_gemdeps
788
+ TEXT
789
+ end
790
+
791
+ def explicit_version_requirement(name)
792
+ code = "version = str"
793
+ return code unless name == "bundler"
794
+
795
+ code += <<-TEXT
796
+
797
+ ENV['BUNDLER_VERSION'] = str
798
+ TEXT
799
+ end
800
+
787
801
  ##
788
802
  # return the stub script text used to launch the true Ruby script
789
803
 
790
804
  def windows_stub_script(bindir, bin_file_name)
791
- rb_config = RbConfig::CONFIG
792
805
  rb_topdir = RbConfig::TOPDIR || File.dirname(rb_config["bindir"])
793
806
 
794
807
  # get ruby executable file name from RbConfig
@@ -796,27 +809,27 @@ TEXT
796
809
  ruby_exe = "ruby.exe" if ruby_exe.empty?
797
810
 
798
811
  if File.exist?(File.join bindir, ruby_exe)
799
- # stub & ruby.exe withing same folder. Portable
812
+ # stub & ruby.exe within same folder. Portable
800
813
  <<-TEXT
801
814
  @ECHO OFF
802
- @"%~dp0ruby.exe" "%~dpn0" %*
815
+ @"%~dp0#{ruby_exe}" "%~dpn0" %*
803
816
  TEXT
804
817
  elsif bindir.downcase.start_with? rb_topdir.downcase
805
818
  # stub within ruby folder, but not standard bin. Portable
806
- require 'pathname'
819
+ require "pathname"
807
820
  from = Pathname.new bindir
808
821
  to = Pathname.new "#{rb_topdir}/bin"
809
822
  rel = to.relative_path_from from
810
823
  <<-TEXT
811
824
  @ECHO OFF
812
- @"%~dp0#{rel}/ruby.exe" "%~dpn0" %*
825
+ @"%~dp0#{rel}/#{ruby_exe}" "%~dpn0" %*
813
826
  TEXT
814
827
  else
815
828
  # outside ruby folder, maybe -user-install or bundler. Portable, but ruby
816
829
  # is dependent on PATH
817
830
  <<-TEXT
818
831
  @ECHO OFF
819
- @ruby.exe "%~dpn0" %*
832
+ @#{ruby_exe} "%~dpn0" %*
820
833
  TEXT
821
834
  end
822
835
  end
@@ -825,23 +838,11 @@ TEXT
825
838
  # configure scripts and rakefiles or mkrf_conf files.
826
839
 
827
840
  def build_extensions
828
- builder = Gem::Ext::Builder.new spec, @build_args
841
+ builder = Gem::Ext::Builder.new spec, build_args
829
842
 
830
843
  builder.build_extensions
831
844
  end
832
845
 
833
- ##
834
- # Logs the build +output+ in +build_dir+, then raises Gem::Ext::BuildError.
835
- #
836
- # TODO: Delete this for RubyGems 4. It remains for API compatibility
837
-
838
- def extension_build_error(build_dir, output, backtrace = nil) # :nodoc:
839
- builder = Gem::Ext::Builder.new spec, @build_args
840
-
841
- builder.build_error build_dir, output, backtrace
842
- end
843
- deprecate :extension_build_error, :none, 2018, 12
844
-
845
846
  ##
846
847
  # Reads the file index and extracts each file into the gem directory.
847
848
  #
@@ -857,7 +858,7 @@ TEXT
857
858
  # without the full gem installed.
858
859
 
859
860
  def extract_bin
860
- @package.extract_files gem_dir, "bin/*"
861
+ @package.extract_files gem_dir, "#{spec.bindir}/*"
861
862
  end
862
863
 
863
864
  ##
@@ -881,6 +882,13 @@ TEXT
881
882
  gem_dir.to_s
882
883
  end
883
884
 
885
+ ##
886
+ # Filename of the gem being installed.
887
+
888
+ def gem
889
+ @package.gem.path
890
+ end
891
+
884
892
  ##
885
893
  # Performs various checks before installing the gem such as the install
886
894
  # repository is writable and its directories exist, required Ruby and
@@ -891,7 +899,7 @@ TEXT
891
899
  # The dependent check will be skipped if the install is ignoring dependencies.
892
900
 
893
901
  def pre_install_checks
894
- verify_gem_home options[:unpack]
902
+ verify_gem_home
895
903
 
896
904
  # The name and require_paths must be verified first, since it could contain
897
905
  # ruby code that would be eval'ed in #ensure_loadable_spec
@@ -907,8 +915,6 @@ TEXT
907
915
 
908
916
  return true if @force
909
917
 
910
- ensure_required_ruby_version_met
911
- ensure_required_rubygems_version_met
912
918
  ensure_dependencies_met unless @ignore_dependencies
913
919
 
914
920
  true
@@ -919,17 +925,17 @@ TEXT
919
925
  # extensions.
920
926
 
921
927
  def write_build_info_file
922
- return if @build_args.empty?
928
+ return if build_args.empty?
923
929
 
924
- build_info_dir = File.join gem_home, 'build_info'
930
+ build_info_dir = File.join gem_home, "build_info"
925
931
 
926
932
  dir_mode = options[:dir_mode]
927
933
  FileUtils.mkdir_p build_info_dir, :mode => dir_mode && 0755
928
934
 
929
935
  build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
930
936
 
931
- File.open build_info_file, 'w' do |io|
932
- @build_args.each do |arg|
937
+ File.open build_info_file, "w" do |io|
938
+ build_args.each do |arg|
933
939
  io.puts arg
934
940
  end
935
941
  end
@@ -941,8 +947,59 @@ TEXT
941
947
  # Writes the .gem file to the cache directory
942
948
 
943
949
  def write_cache_file
944
- cache_file = File.join gem_home, 'cache', spec.file_name
950
+ cache_file = File.join gem_home, "cache", spec.file_name
945
951
  @package.copy_to cache_file
946
952
  end
947
953
 
954
+ def ensure_writable_dir(dir) # :nodoc:
955
+ begin
956
+ Dir.mkdir dir, *[options[:dir_mode] && 0755].compact
957
+ rescue SystemCallError
958
+ raise unless File.directory? dir
959
+ end
960
+
961
+ raise Gem::FilePermissionError.new(dir) unless File.writable? dir
962
+ end
963
+
964
+ private
965
+
966
+ def build_args
967
+ @build_args ||= begin
968
+ require_relative "command"
969
+ Gem::Command.build_args
970
+ end
971
+ end
972
+
973
+ def rb_config
974
+ RbConfig::CONFIG
975
+ end
976
+
977
+ def ruby_install_name
978
+ rb_config["ruby_install_name"]
979
+ end
980
+
981
+ def load_relative_enabled?
982
+ rb_config["LIBRUBY_RELATIVE"] == "yes"
983
+ end
984
+
985
+ def bash_prolog_script
986
+ if load_relative_enabled?
987
+ script = +<<~EOS
988
+ bindir="${0%/*}"
989
+ EOS
990
+
991
+ script << %Q(exec "$bindir/#{ruby_install_name}" "-x" "$0" "$@"\n)
992
+
993
+ <<~EOS
994
+ #!/bin/sh
995
+ # -*- ruby -*-
996
+ _=_\\
997
+ =begin
998
+ #{script.chomp}
999
+ =end
1000
+ EOS
1001
+ else
1002
+ ""
1003
+ end
1004
+ end
948
1005
  end