rubygems-update 3.1.6 → 3.3.22

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