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
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rubygems'
3
+ require "rubygems"
4
4
 
5
5
  # If bundler gemspec exists, add to stubs
6
- bundler_gemspec = File.expand_path("../../../bundler/bundler.gemspec", __FILE__)
6
+ bundler_gemspec = File.expand_path("../../bundler/bundler.gemspec", __dir__)
7
7
  if File.exist?(bundler_gemspec)
8
8
  Gem::Specification.dirs.unshift File.dirname(bundler_gemspec)
9
9
  Gem::Specification.class_variable_set :@@stubs, nil
@@ -12,80 +12,82 @@ if File.exist?(bundler_gemspec)
12
12
  end
13
13
 
14
14
  begin
15
- gem 'minitest', '~> 5.0'
15
+ gem "test-unit", "~> 3.0"
16
16
  rescue Gem::LoadError
17
17
  end
18
18
 
19
- begin
20
- require 'simplecov'
21
- SimpleCov.start do
22
- add_filter "/test/"
23
- add_filter "/bundler/"
24
- add_filter "/lib/rubygems/resolver/molinillo"
25
- end
26
- rescue LoadError
19
+ if File.exist?(bundler_gemspec)
20
+ require_relative "../../bundler/lib/bundler"
21
+ else
22
+ require "bundler"
27
23
  end
28
24
 
29
- require 'bundler'
25
+ require "test/unit"
30
26
 
31
- require 'minitest/autorun'
27
+ ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
32
28
 
33
- require 'rubygems/deprecate'
29
+ require "rubygems/deprecate"
34
30
 
35
- require 'fileutils'
36
- require 'pathname'
37
- require 'pp'
38
- require 'rubygems/package'
39
- require 'shellwords'
40
- require 'tmpdir'
41
- require 'uri'
42
- require 'zlib'
43
- require 'benchmark' # stdlib
44
- require 'rubygems/mock_gem_ui'
31
+ require "fileutils"
32
+ require "pathname"
33
+ require "pp"
34
+ require "rubygems/package"
35
+ require "shellwords"
36
+ require "tmpdir"
37
+ require "uri"
38
+ require "zlib"
39
+ require "benchmark" # stdlib
40
+ require "rubygems/mock_gem_ui"
45
41
 
46
42
  module Gem
47
43
 
48
44
  ##
49
- # Allows setting the gem path searcher. This method is available when
50
- # requiring 'rubygems/test_case'
45
+ # Allows setting the gem path searcher.
51
46
 
52
47
  def self.searcher=(searcher)
53
48
  @searcher = searcher
54
49
  end
55
50
 
56
51
  ##
57
- # Allows toggling Windows behavior. This method is available when requiring
58
- # 'rubygems/test_case'
52
+ # Allows toggling Windows behavior.
59
53
 
60
54
  def self.win_platform=(val)
61
55
  @@win_platform = val
62
56
  end
63
57
 
64
58
  ##
65
- # Allows setting path to Ruby. This method is available when requiring
66
- # 'rubygems/test_case'
59
+ # Allows setting path to Ruby.
67
60
 
68
61
  def self.ruby=(ruby)
69
62
  @ruby = ruby
70
63
  end
71
64
 
72
65
  ##
73
- # When rubygems/test_case is required the default user interaction is a
74
- # MockGemUi.
66
+ # Sets the default user interaction to a MockGemUi.
75
67
 
76
68
  module DefaultUserInteraction
77
69
  @ui = Gem::MockGemUi.new
78
70
  end
79
71
  end
80
72
 
73
+ require "rubygems/command"
74
+
75
+ class Gem::Command
76
+ ##
77
+ # Allows resetting the hash of specific args per command.
78
+
79
+ def self.specific_extra_args_hash=(value)
80
+ @specific_extra_args_hash = value
81
+ end
82
+ end
83
+
81
84
  ##
82
85
  # RubyGemTestCase provides a variety of methods for testing rubygems and
83
86
  # gem-related behavior in a sandbox. Through RubyGemTestCase you can install
84
87
  # and uninstall gems, fetch remote gems through a stub fetcher and be assured
85
88
  # your normal set of gems is not affected.
86
89
 
87
- class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Unit::TestCase)
88
-
90
+ class Gem::TestCase < Test::Unit::TestCase
89
91
  extend Gem::Deprecate
90
92
 
91
93
  attr_accessor :fetcher # :nodoc:
@@ -94,10 +96,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
94
96
 
95
97
  attr_accessor :uri # :nodoc:
96
98
 
97
- TEST_PATH = ENV.fetch('RUBYGEMS_TEST_PATH', File.expand_path('../../../test/rubygems', __FILE__))
98
-
99
- SPECIFICATIONS = File.expand_path(File.join(TEST_PATH, "specifications"), __FILE__)
100
-
101
99
  def assert_activate(expected, *specs)
102
100
  specs.each do |spec|
103
101
  case spec
@@ -115,32 +113,67 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
115
113
  assert_equal expected.sort, loaded.sort if expected
116
114
  end
117
115
 
118
- # TODO: move to minitest
119
- def assert_path_exists(path, msg = nil)
120
- msg = message(msg) { "Expected path '#{path}' to exist" }
121
- assert File.exist?(path), msg
122
- end
123
-
124
116
  def assert_directory_exists(path, msg = nil)
125
- msg = message(msg) { "Expected path '#{path}' to be a directory" }
126
- assert_path_exists path
117
+ msg = build_message(msg, "Expected path '#{path}' to be a directory")
118
+ assert_path_exist path
127
119
  assert File.directory?(path), msg
128
120
  end
129
121
 
122
+ def refute_directory_exists(path, msg = nil)
123
+ msg = build_message(msg, "Expected path '#{path}' not to be a directory")
124
+ assert_path_not_exist path
125
+ refute File.directory?(path), msg
126
+ end
127
+
128
+ # https://github.com/seattlerb/minitest/blob/21d9e804b63c619f602f3f4ece6c71b48974707a/lib/minitest/assertions.rb#L188
129
+ def _synchronize
130
+ yield
131
+ end
132
+
133
+ # https://github.com/seattlerb/minitest/blob/21d9e804b63c619f602f3f4ece6c71b48974707a/lib/minitest/assertions.rb#L546
134
+ def capture_subprocess_io
135
+ _synchronize do
136
+ begin
137
+ require "tempfile"
138
+
139
+ captured_stdout, captured_stderr = Tempfile.new("out"), Tempfile.new("err")
140
+
141
+ orig_stdout, orig_stderr = $stdout.dup, $stderr.dup
142
+ $stdout.reopen captured_stdout
143
+ $stderr.reopen captured_stderr
144
+
145
+ yield
146
+
147
+ $stdout.rewind
148
+ $stderr.rewind
149
+
150
+ return captured_stdout.read, captured_stderr.read
151
+ ensure
152
+ $stdout.reopen orig_stdout
153
+ $stderr.reopen orig_stderr
154
+
155
+ orig_stdout.close
156
+ orig_stderr.close
157
+ captured_stdout.close!
158
+ captured_stderr.close!
159
+ end
160
+ end
161
+ end
162
+
130
163
  ##
131
164
  # Sets the ENABLE_SHARED entry in RbConfig::CONFIG to +value+ and restores
132
165
  # the original value when the block ends
133
166
 
134
167
  def enable_shared(value)
135
- enable_shared = RbConfig::CONFIG['ENABLE_SHARED']
136
- RbConfig::CONFIG['ENABLE_SHARED'] = value
168
+ enable_shared = RbConfig::CONFIG["ENABLE_SHARED"]
169
+ RbConfig::CONFIG["ENABLE_SHARED"] = value
137
170
 
138
171
  yield
139
172
  ensure
140
173
  if enable_shared
141
- RbConfig::CONFIG['enable_shared'] = enable_shared
174
+ RbConfig::CONFIG["ENABLE_SHARED"] = enable_shared
142
175
  else
143
- RbConfig::CONFIG.delete 'enable_shared'
176
+ RbConfig::CONFIG.delete "ENABLE_SHARED"
144
177
  end
145
178
  end
146
179
 
@@ -149,20 +182,20 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
149
182
  # original value when the block ends
150
183
  #
151
184
  def vendordir(value)
152
- vendordir = RbConfig::CONFIG['vendordir']
185
+ vendordir = RbConfig::CONFIG["vendordir"]
153
186
 
154
187
  if value
155
- RbConfig::CONFIG['vendordir'] = value
188
+ RbConfig::CONFIG["vendordir"] = value
156
189
  else
157
- RbConfig::CONFIG.delete 'vendordir'
190
+ RbConfig::CONFIG.delete "vendordir"
158
191
  end
159
192
 
160
193
  yield
161
194
  ensure
162
195
  if vendordir
163
- RbConfig::CONFIG['vendordir'] = vendordir
196
+ RbConfig::CONFIG["vendordir"] = vendordir
164
197
  else
165
- RbConfig::CONFIG.delete 'vendordir'
198
+ RbConfig::CONFIG.delete "vendordir"
166
199
  end
167
200
  end
168
201
 
@@ -172,21 +205,21 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
172
205
  #
173
206
  def bindir(value)
174
207
  with_clean_path_to_ruby do
175
- bindir = RbConfig::CONFIG['bindir']
208
+ bindir = RbConfig::CONFIG["bindir"]
176
209
 
177
210
  if value
178
- RbConfig::CONFIG['bindir'] = value
211
+ RbConfig::CONFIG["bindir"] = value
179
212
  else
180
- RbConfig::CONFIG.delete 'bindir'
213
+ RbConfig::CONFIG.delete "bindir"
181
214
  end
182
215
 
183
216
  begin
184
217
  yield
185
218
  ensure
186
219
  if bindir
187
- RbConfig::CONFIG['bindir'] = bindir
220
+ RbConfig::CONFIG["bindir"] = bindir
188
221
  else
189
- RbConfig::CONFIG.delete 'bindir'
222
+ RbConfig::CONFIG.delete "bindir"
190
223
  end
191
224
  end
192
225
  end
@@ -197,79 +230,66 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
197
230
  # original value when the block ends
198
231
  #
199
232
  def exeext(value)
200
- exeext = RbConfig::CONFIG['EXEEXT']
233
+ exeext = RbConfig::CONFIG["EXEEXT"]
201
234
 
202
235
  if value
203
- RbConfig::CONFIG['EXEEXT'] = value
236
+ RbConfig::CONFIG["EXEEXT"] = value
204
237
  else
205
- RbConfig::CONFIG.delete 'EXEEXT'
238
+ RbConfig::CONFIG.delete "EXEEXT"
206
239
  end
207
240
 
208
241
  yield
209
242
  ensure
210
243
  if exeext
211
- RbConfig::CONFIG['EXEEXT'] = exeext
244
+ RbConfig::CONFIG["EXEEXT"] = exeext
212
245
  else
213
- RbConfig::CONFIG.delete 'EXEEXT'
246
+ RbConfig::CONFIG.delete "EXEEXT"
214
247
  end
215
248
  end
216
249
 
217
- # TODO: move to minitest
218
- def refute_path_exists(path, msg = nil)
219
- msg = message(msg) { "Expected path '#{path}' to not exist" }
220
- refute File.exist?(path), msg
221
- end
222
-
223
250
  def scan_make_command_lines(output)
224
251
  output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
225
252
  end
226
253
 
227
- def parse_make_command_line(line)
228
- command, *args = line.shellsplit
254
+ def parse_make_command_line_targets(line)
255
+ args = line.sub(/^#{Regexp.escape make_command}/, "").shellsplit
229
256
 
230
257
  targets = []
231
- macros = {}
232
258
 
233
259
  args.each do |arg|
234
260
  case arg
235
261
  when /\A(\w+)=/
236
- macros[$1] = $'
237
262
  else
238
263
  targets << arg
239
264
  end
240
265
  end
241
266
 
242
- targets << '' if targets.empty?
267
+ targets << "" if targets.empty?
243
268
 
244
- {
245
- :command => command,
246
- :targets => targets,
247
- :macros => macros,
248
- }
269
+ targets
249
270
  end
250
271
 
251
272
  def assert_contains_make_command(target, output, msg = nil)
252
273
  if output.match(/\n/)
253
- msg = message(msg) do
254
- 'Expected output containing make command "%s": %s' % [
255
- ('%s %s' % [make_command, target]).rstrip,
256
- output.inspect
274
+ msg = build_message(msg,
275
+ "Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
276
+ ("%s %s" % [make_command, target]).rstrip,
277
+ output,
257
278
  ]
258
- end
279
+ )
259
280
  else
260
- msg = message(msg) do
261
- 'Expected make command "%s": %s' % [
262
- ('%s %s' % [make_command, target]).rstrip,
263
- output.inspect
281
+ msg = build_message(msg,
282
+ 'Expected make command "%s", but was "%s"' % [
283
+ ("%s %s" % [make_command, target]).rstrip,
284
+ output,
264
285
  ]
265
- end
286
+ )
266
287
  end
267
288
 
268
- assert scan_make_command_lines(output).any? { |line|
269
- make = parse_make_command_line(line)
289
+ assert scan_make_command_lines(output).any? {|line|
290
+ targets = parse_make_command_line_targets(line)
270
291
 
271
- if make[:targets].include?(target)
272
- yield make, line if block_given?
292
+ if targets.include?(target)
273
293
  true
274
294
  else
275
295
  false
@@ -279,9 +299,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
279
299
 
280
300
  include Gem::DefaultUserInteraction
281
301
 
282
- undef_method :default_test if instance_methods.include? 'default_test' or
283
- instance_methods.include? :default_test
284
-
285
302
  ##
286
303
  # #setup prepares a sandboxed location to install gems. All installs are
287
304
  # directed to a temporary directory. All install plugins are removed.
@@ -291,13 +308,22 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
291
308
  # or <tt>i686-darwin8.10.1</tt> otherwise.
292
309
 
293
310
  def setup
294
- super
295
-
311
+ @orig_hooks = {}
296
312
  @orig_env = ENV.to_hash
313
+ @tmp = File.expand_path("tmp")
297
314
 
298
- ENV['GEM_VENDOR'] = nil
299
- ENV['GEMRC'] = nil
300
- ENV['SOURCE_DATE_EPOCH'] = nil
315
+ FileUtils.mkdir_p @tmp
316
+
317
+ @tempdir = Dir.mktmpdir("test_rubygems_", @tmp)
318
+ @tempdir.tap(&Gem::UNTAINT)
319
+
320
+ ENV["GEM_VENDOR"] = nil
321
+ ENV["GEMRC"] = nil
322
+ ENV["XDG_CACHE_HOME"] = nil
323
+ ENV["XDG_CONFIG_HOME"] = nil
324
+ ENV["XDG_DATA_HOME"] = nil
325
+ ENV["SOURCE_DATE_EPOCH"] = nil
326
+ ENV["BUNDLER_VERSION"] = nil
301
327
 
302
328
  @current_dir = Dir.pwd
303
329
  @fetcher = nil
@@ -308,38 +334,25 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
308
334
  # capture output
309
335
  Gem::DefaultUserInteraction.ui = Gem::MockGemUi.new
310
336
 
311
- tmpdir = File.realpath Dir.tmpdir
312
- tmpdir.tap(&Gem::UNTAINT)
337
+ @orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
338
+ Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
339
+ Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
340
+ File.join(@tempdir, "system-gemrc")
313
341
 
314
- @tempdir = File.join(tmpdir, "test_rubygems_#{$$}")
315
- @tempdir.tap(&Gem::UNTAINT)
342
+ @gemhome = File.join @tempdir, "gemhome"
343
+ @userhome = File.join @tempdir, "userhome"
344
+ ENV["GEM_SPEC_CACHE"] = File.join @tempdir, "spec_cache"
316
345
 
317
- FileUtils.mkdir_p @tempdir
318
-
319
- # This makes the tempdir consistent on Windows.
320
- # Dir.tmpdir may return short path name, but Dir[Dir.tmpdir] returns long
321
- # path name. https://bugs.ruby-lang.org/issues/10819
322
- # File.expand_path or File.realpath doesn't convert path name to long path
323
- # name. Only Dir[] (= Dir.glob) works.
324
- # Short and long path name is specific to Windows filesystem.
325
- if win_platform?
326
- @tempdir = Dir[@tempdir][0]
327
- @tempdir.tap(&Gem::UNTAINT)
346
+ @orig_ruby = if ENV["RUBY"]
347
+ ruby = Gem.ruby
348
+ Gem.ruby = ENV["RUBY"]
349
+ ruby
328
350
  end
329
351
 
330
- @gemhome = File.join @tempdir, 'gemhome'
331
- @userhome = File.join @tempdir, 'userhome'
332
- ENV["GEM_SPEC_CACHE"] = File.join @tempdir, 'spec_cache'
333
-
334
- @orig_ruby = if ENV['RUBY']
335
- ruby = Gem.ruby
336
- Gem.ruby = ENV['RUBY']
337
- ruby
338
- end
339
-
340
- @git = ENV['GIT'] || 'git'
352
+ @git = ENV["GIT"] || (win_platform? ? "git.exe" : "git")
341
353
 
342
354
  Gem.ensure_gem_subdirectories @gemhome
355
+ Gem.ensure_default_gem_subdirectories @gemhome
343
356
 
344
357
  @orig_LOAD_PATH = $LOAD_PATH.dup
345
358
  $LOAD_PATH.map! do |s|
@@ -357,33 +370,42 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
357
370
 
358
371
  Dir.chdir @tempdir
359
372
 
360
- ENV['HOME'] = @userhome
373
+ ENV["HOME"] = @userhome
374
+ Gem.instance_variable_set :@config_file, nil
361
375
  Gem.instance_variable_set :@user_home, nil
376
+ Gem.instance_variable_set :@config_home, nil
377
+ Gem.instance_variable_set :@data_home, nil
362
378
  Gem.instance_variable_set :@gemdeps, nil
363
379
  Gem.instance_variable_set :@env_requirements_by_name, nil
364
380
  Gem.send :remove_instance_variable, :@ruby_version if
365
381
  Gem.instance_variables.include? :@ruby_version
366
382
 
367
- FileUtils.mkdir_p @gemhome
368
383
  FileUtils.mkdir_p @userhome
369
384
 
370
- ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
385
+ ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = PRIVATE_KEY_PASSPHRASE
371
386
 
372
- @default_dir = File.join @tempdir, 'default'
373
- @default_spec_dir = File.join @default_dir, "specifications", "default"
387
+ Gem.instance_variable_set(:@default_specifications_dir, nil)
374
388
  if Gem.java_platform?
375
- @orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
376
- RbConfig::CONFIG['default_gem_home'] = @default_dir
389
+ @orig_default_gem_home = RbConfig::CONFIG["default_gem_home"]
390
+ RbConfig::CONFIG["default_gem_home"] = @gemhome
377
391
  else
378
- Gem.instance_variable_set(:@default_dir, @default_dir)
392
+ Gem.instance_variable_set(:@default_dir, @gemhome)
379
393
  end
380
- FileUtils.mkdir_p @default_spec_dir
394
+
395
+ @orig_bindir = RbConfig::CONFIG["bindir"]
396
+ RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
397
+
398
+ @orig_sitelibdir = RbConfig::CONFIG["sitelibdir"]
399
+ new_sitelibdir = @orig_sitelibdir.sub(RbConfig::CONFIG["prefix"], @gemhome)
400
+ $LOAD_PATH.insert(Gem.load_path_insert_index, new_sitelibdir)
401
+ RbConfig::CONFIG["sitelibdir"] = new_sitelibdir
402
+
403
+ @orig_mandir = RbConfig::CONFIG["mandir"]
404
+ RbConfig::CONFIG["mandir"] = File.join @gemhome, "share", "man"
381
405
 
382
406
  Gem::Specification.unresolved_deps.clear
383
407
  Gem.use_paths(@gemhome)
384
408
 
385
- Gem::Security.reset
386
-
387
409
  Gem.loaded_specs.clear
388
410
  Gem.instance_variable_set(:@activated_gem_paths, 0)
389
411
  Gem.clear_default_specs
@@ -401,15 +423,14 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
401
423
  Gem.searcher = nil
402
424
  Gem::SpecFetcher.fetcher = nil
403
425
 
404
- @orig_arch = RbConfig::CONFIG['arch']
426
+ @orig_arch = RbConfig::CONFIG["arch"]
405
427
 
406
428
  if win_platform?
407
- util_set_arch 'i386-mswin32'
429
+ util_set_arch "i386-mswin32"
408
430
  else
409
- util_set_arch 'i686-darwin8.10.1'
431
+ util_set_arch "i686-darwin8.10.1"
410
432
  end
411
433
 
412
- @orig_hooks = {}
413
434
  %w[post_install_hooks done_installing_hooks post_uninstall_hooks pre_uninstall_hooks pre_install_hooks pre_reset_hooks post_reset_hooks post_build_hooks].each do |name|
414
435
  @orig_hooks[name] = Gem.send(name).dup
415
436
  end
@@ -426,18 +447,15 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
426
447
  $LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
427
448
  if @orig_LOADED_FEATURES
428
449
  if @orig_LOAD_PATH
429
- paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
430
450
  ($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
431
- unless paths.any? {|path| feat.start_with?(path)}
432
- $LOADED_FEATURES.delete(feat)
433
- end
451
+ $LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
434
452
  end
435
453
  else
436
454
  $LOADED_FEATURES.replace @orig_LOADED_FEATURES
437
455
  end
438
456
  end
439
457
 
440
- RbConfig::CONFIG['arch'] = @orig_arch
458
+ RbConfig::CONFIG["arch"] = @orig_arch
441
459
 
442
460
  if defined? Gem::RemoteFetcher
443
461
  Gem::RemoteFetcher.fetcher = nil
@@ -449,15 +467,23 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
449
467
 
450
468
  ENV.replace(@orig_env)
451
469
 
470
+ Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
471
+ Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
472
+ @orig_SYSTEM_WIDE_CONFIG_FILE
473
+
452
474
  Gem.ruby = @orig_ruby if @orig_ruby
453
475
 
476
+ RbConfig::CONFIG["mandir"] = @orig_mandir
477
+ RbConfig::CONFIG["sitelibdir"] = @orig_sitelibdir
478
+ RbConfig::CONFIG["bindir"] = @orig_bindir
479
+
480
+ Gem.instance_variable_set :@default_specifications_dir, nil
454
481
  if Gem.java_platform?
455
- RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
482
+ RbConfig::CONFIG["default_gem_home"] = @orig_default_gem_home
456
483
  else
457
484
  Gem.instance_variable_set :@default_dir, nil
458
485
  end
459
486
 
460
- Gem::Specification._clear_load_cache
461
487
  Gem::Specification.unresolved_deps.clear
462
488
  Gem::refresh
463
489
 
@@ -468,6 +494,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
468
494
  @back_ui.close
469
495
  end
470
496
 
497
+ def credential_setup
498
+ @temp_cred = File.join(@userhome, ".gem", "credentials")
499
+ FileUtils.mkdir_p File.dirname(@temp_cred)
500
+ File.write @temp_cred, ":rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97"
501
+ File.chmod 0600, @temp_cred
502
+ end
503
+
504
+ def credential_teardown
505
+ FileUtils.rm_rf @temp_cred
506
+ end
507
+
471
508
  def common_installer_setup
472
509
  common_installer_teardown
473
510
 
@@ -505,16 +542,20 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
505
542
  Gem.pre_uninstall_hooks.clear
506
543
  end
507
544
 
545
+ def without_any_upwards_gemfiles
546
+ ENV["BUNDLE_GEMFILE"] = File.join(@tempdir, "Gemfile")
547
+ end
548
+
508
549
  ##
509
550
  # A git_gem is used with a gem dependencies file. The gem created here
510
551
  # has no files, just a gem specification for the given +name+ and +version+.
511
552
  #
512
553
  # Yields the +specification+ to the block, if given
513
554
 
514
- def git_gem(name = 'a', version = 1)
555
+ def git_gem(name = "a", version = 1)
515
556
  have_git?
516
557
 
517
- directory = File.join 'git', name
558
+ directory = File.join "git", name
518
559
  directory = File.expand_path directory
519
560
 
520
561
  git_spec = Gem::Specification.new name, version do |specification|
@@ -525,22 +566,22 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
525
566
 
526
567
  gemspec = "#{name}.gemspec"
527
568
 
528
- File.open File.join(directory, gemspec), 'w' do |io|
569
+ File.open File.join(directory, gemspec), "w" do |io|
529
570
  io.write git_spec.to_ruby
530
571
  end
531
572
 
532
573
  head = nil
533
574
 
534
575
  Dir.chdir directory do
535
- unless File.exist? '.git'
536
- system @git, 'init', '--quiet'
537
- system @git, 'config', 'user.name', 'RubyGems Tests'
538
- system @git, 'config', 'user.email', 'rubygems@example'
576
+ unless File.exist? ".git"
577
+ system @git, "init", "--quiet"
578
+ system @git, "config", "user.name", "RubyGems Tests"
579
+ system @git, "config", "user.email", "rubygems@example"
539
580
  end
540
581
 
541
- system @git, 'add', gemspec
542
- system @git, 'commit', '-a', '-m', 'a non-empty commit message', '--quiet'
543
- head = Gem::Util.popen(@git, 'rev-parse', 'master').strip
582
+ system @git, "add", gemspec
583
+ system @git, "commit", "-a", "-m", "a non-empty commit message", "--quiet"
584
+ head = Gem::Util.popen(@git, "rev-parse", "master").strip
544
585
  end
545
586
 
546
587
  return name, git_spec.version, directory, head
@@ -552,13 +593,13 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
552
593
  def have_git?
553
594
  return if in_path? @git
554
595
 
555
- skip 'cannot find git executable, use GIT environment variable to set'
596
+ pend "cannot find git executable, use GIT environment variable to set"
556
597
  end
557
598
 
558
599
  def in_path?(executable) # :nodoc:
559
- return true if %r%\A([A-Z]:|/)% =~ executable and File.exist? executable
600
+ return true if %r{\A([A-Z]:|/)} =~ executable && File.exist?(executable)
560
601
 
561
- ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
602
+ ENV["PATH"].split(File::PATH_SEPARATOR).any? do |directory|
562
603
  File.exist? File.join directory, executable
563
604
  end
564
605
  end
@@ -567,9 +608,9 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
567
608
  # Builds and installs the Gem::Specification +spec+
568
609
 
569
610
  def install_gem(spec, options = {})
570
- require 'rubygems/installer'
611
+ require "rubygems/installer"
571
612
 
572
- gem = File.join @tempdir, "gems", "#{spec.full_name}.gem"
613
+ gem = spec.cache_file
573
614
 
574
615
  unless File.exist? gem
575
616
  use_ui Gem::MockGemUi.new do
@@ -578,10 +619,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
578
619
  end
579
620
  end
580
621
 
581
- gem = File.join(@tempdir, File.basename(spec.cache_file)).tap(&Gem::UNTAINT)
622
+ gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
582
623
  end
583
624
 
584
- Gem::Installer.at(gem, options.merge({:wrappers => true})).install
625
+ Gem::Installer.at(gem, options.merge({ :wrappers => true })).install
585
626
  end
586
627
 
587
628
  ##
@@ -594,7 +635,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
594
635
  ##
595
636
  # Uninstalls the Gem::Specification +spec+
596
637
  def uninstall_gem(spec)
597
- require 'rubygems/uninstaller'
638
+ require "rubygems/uninstaller"
598
639
 
599
640
  Class.new(Gem::Uninstaller) do
600
641
  def ask_if_ok(spec)
@@ -617,7 +658,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
617
658
  # Reads a Marshal file at +path+
618
659
 
619
660
  def read_cache(path)
620
- File.open path.dup.tap(&Gem::UNTAINT), 'rb' do |io|
661
+ File.open path.dup.tap(&Gem::UNTAINT), "rb" do |io|
621
662
  Marshal.load io.read
622
663
  end
623
664
  end
@@ -637,13 +678,35 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
637
678
  dir = File.dirname path
638
679
  FileUtils.mkdir_p dir unless File.directory? dir
639
680
 
640
- File.open path, 'wb' do |io|
681
+ File.open path, "wb" do |io|
641
682
  yield io if block_given?
642
683
  end
643
684
 
644
685
  path
645
686
  end
646
687
 
688
+ ##
689
+ # Load a YAML string, the psych 3 way
690
+
691
+ def load_yaml(yaml)
692
+ if Psych.respond_to?(:unsafe_load)
693
+ Psych.unsafe_load(yaml)
694
+ else
695
+ Psych.load(yaml)
696
+ end
697
+ end
698
+
699
+ ##
700
+ # Load a YAML file, the psych 3 way
701
+
702
+ def load_yaml_file(file)
703
+ if Psych.respond_to?(:unsafe_load_file)
704
+ Psych.unsafe_load_file(file)
705
+ else
706
+ Psych.load_file(file)
707
+ end
708
+ end
709
+
647
710
  def all_spec_names
648
711
  Gem::Specification.map(&:full_name)
649
712
  end
@@ -658,24 +721,22 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
658
721
  #
659
722
  # Use this with #write_file to build an installed gem.
660
723
 
661
- def quick_gem(name, version='2')
662
- require 'rubygems/specification'
724
+ def quick_gem(name, version="2")
725
+ require "rubygems/specification"
663
726
 
664
727
  spec = Gem::Specification.new do |s|
665
728
  s.platform = Gem::Platform::RUBY
666
729
  s.name = name
667
730
  s.version = version
668
- s.author = 'A User'
669
- s.email = 'example@example.com'
670
- s.homepage = 'http://example.com'
731
+ s.author = "A User"
732
+ s.email = "example@example.com"
733
+ s.homepage = "http://example.com"
671
734
  s.summary = "this is a summary"
672
735
  s.description = "This is a test description"
673
736
 
674
737
  yield(s) if block_given?
675
738
  end
676
739
 
677
- Gem::Specification.map # HACK: force specs to (re-)load before we write
678
-
679
740
  written_path = write_file spec.spec_file do |io|
680
741
  io.write spec.to_ruby_for_cache
681
742
  end
@@ -700,7 +761,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
700
761
  next if File.exist? file
701
762
  FileUtils.mkdir_p File.dirname(file)
702
763
 
703
- File.open file, 'w' do |fp|
764
+ File.open file, "w" do |fp|
704
765
  fp.puts "# #{file}"
705
766
  end
706
767
  end
@@ -735,7 +796,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
735
796
 
736
797
  def install_specs(*specs)
737
798
  specs.each do |spec|
738
- Gem::Installer.for_spec(spec).install
799
+ Gem::Installer.for_spec(spec, :force => true).install
739
800
  end
740
801
 
741
802
  Gem.searcher = nil
@@ -745,19 +806,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
745
806
  # Installs the provided default specs including writing the spec file
746
807
 
747
808
  def install_default_gems(*specs)
748
- install_default_specs(*specs)
749
-
750
- specs.each do |spec|
751
- File.open spec.loaded_from, 'w' do |io|
752
- io.write spec.to_ruby_for_cache
753
- end
754
- end
755
- end
756
-
757
- ##
758
- # Install the provided default specs
759
-
760
- def install_default_specs(*specs)
761
809
  specs.each do |spec|
762
810
  installer = Gem::Installer.for_spec(spec, :install_as_default => true)
763
811
  installer.install
@@ -773,24 +821,15 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
773
821
  Gem::Specification.unresolved_deps.values.map(&:to_s).sort
774
822
  end
775
823
 
776
- def save_loaded_features
777
- old_loaded_features = $LOADED_FEATURES.dup
778
- yield
779
- ensure
780
- prefix = File.dirname(__FILE__) + "/"
781
- new_features = ($LOADED_FEATURES - old_loaded_features)
782
- old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0)})
783
- $LOADED_FEATURES.replace old_loaded_features
784
- end
785
-
786
824
  def new_default_spec(name, version, deps = nil, *files)
787
825
  spec = util_spec name, version, deps
788
826
 
789
- spec.loaded_from = File.join(@default_spec_dir, spec.spec_name)
827
+ spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
790
828
  spec.files = files
791
829
 
792
830
  lib_dir = File.join(@tempdir, "default_gems", "lib")
793
831
  lib_dir.instance_variable_set(:@gem_prelude_index, lib_dir)
832
+ Gem.instance_variable_set(:@default_gem_load_paths, [*Gem.send(:default_gem_load_paths), lib_dir])
794
833
  $LOAD_PATH.unshift(lib_dir)
795
834
  files.each do |file|
796
835
  rb_path = File.join(lib_dir, file)
@@ -808,15 +847,15 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
808
847
  # or a +block+ can be given for full customization of the specification.
809
848
 
810
849
  def util_spec(name, version = 2, deps = nil, *files) # :yields: specification
811
- raise "deps or block, not both" if deps and block_given?
850
+ raise "deps or block, not both" if deps && block_given?
812
851
 
813
852
  spec = Gem::Specification.new do |s|
814
853
  s.platform = Gem::Platform::RUBY
815
854
  s.name = name
816
855
  s.version = version
817
- s.author = 'A User'
818
- s.email = 'example@example.com'
819
- s.homepage = 'http://example.com'
856
+ s.author = "A User"
857
+ s.email = "example@example.com"
858
+ s.homepage = "http://example.com"
820
859
  s.summary = "this is a summary"
821
860
  s.description = "This is a test description"
822
861
 
@@ -826,10 +865,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
826
865
  end
827
866
 
828
867
  if deps
829
- # Since Hash#each is unordered in 1.8, sort the keys and iterate that
830
- # way so the tests are deterministic on all implementations.
831
- deps.keys.sort.each do |n|
832
- spec.add_dependency n, (deps[n] || '>= 0')
868
+ deps.keys.each do |n|
869
+ spec.add_dependency n, (deps[n] || ">= 0")
833
870
  end
834
871
  end
835
872
 
@@ -840,9 +877,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
840
877
 
841
878
  util_build_gem spec
842
879
 
843
- cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
844
- FileUtils.mkdir_p File.dirname cache_file
845
- FileUtils.mv spec.cache_file, cache_file
846
880
  FileUtils.rm spec.spec_file
847
881
  end
848
882
 
@@ -858,11 +892,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
858
892
  def util_gem(name, version, deps = nil, &block)
859
893
  if deps
860
894
  block = proc do |s|
861
- # Since Hash#each is unordered in 1.8, sort
862
- # the keys and iterate that way so the tests are
863
- # deterministic on all implementations.
864
- deps.keys.sort.each do |n|
865
- s.add_dependency n, (deps[n] || '>= 0')
895
+ deps.keys.each do |n|
896
+ s.add_dependency n, (deps[n] || ">= 0")
866
897
  end
867
898
  end
868
899
  end
@@ -871,7 +902,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
871
902
 
872
903
  util_build_gem spec
873
904
 
874
- cache_file = File.join @tempdir, 'gems', "#{spec.original_name}.gem"
905
+ cache_file = File.join @tempdir, "gems", "#{spec.original_name}.gem"
875
906
  FileUtils.mkdir_p File.dirname cache_file
876
907
  FileUtils.mv spec.cache_file, cache_file
877
908
  FileUtils.rm spec.spec_file
@@ -913,11 +944,11 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
913
944
  # TODO: nuke this and fix tests. this should speed up a lot
914
945
 
915
946
  def util_make_gems(prerelease = false)
916
- @a1 = quick_gem 'a', '1' do |s|
947
+ @a1 = quick_gem "a", "1" do |s|
917
948
  s.files = %w[lib/code.rb]
918
949
  s.require_paths = %w[lib]
919
950
  s.date = Gem::Specification::TODAY - 86400
920
- s.homepage = 'http://a.example.com'
951
+ s.homepage = "http://a.example.com"
921
952
  s.email = %w[example@example.com example2@example.com]
922
953
  s.authors = %w[Example Example2]
923
954
  s.description = <<-DESC
@@ -934,27 +965,27 @@ Also, a list:
934
965
  s.require_paths = %w[lib]
935
966
  end
936
967
 
937
- @a2 = quick_gem('a', '2', &init)
938
- @a3a = quick_gem('a', '3.a', &init)
939
- @a_evil9 = quick_gem('a_evil', '9', &init)
940
- @b2 = quick_gem('b', '2', &init)
941
- @c1_2 = quick_gem('c', '1.2', &init)
942
- @x = quick_gem('x', '1', &init)
943
- @dep_x = quick_gem('dep_x', '1') do |s|
968
+ @a2 = quick_gem("a", "2", &init)
969
+ @a3a = quick_gem("a", "3.a", &init)
970
+ @a_evil9 = quick_gem("a_evil", "9", &init)
971
+ @b2 = quick_gem("b", "2", &init)
972
+ @c1_2 = quick_gem("c", "1.2", &init)
973
+ @x = quick_gem("x", "1", &init)
974
+ @dep_x = quick_gem("dep_x", "1") do |s|
944
975
  s.files = %w[lib/code.rb]
945
976
  s.require_paths = %w[lib]
946
- s.add_dependency 'x', '>= 1'
977
+ s.add_dependency "x", ">= 1"
947
978
  end
948
979
 
949
- @pl1 = quick_gem 'pl', '1' do |s| # l for legacy
980
+ @pl1 = quick_gem "pl", "1" do |s| # l for legacy
950
981
  s.files = %w[lib/code.rb]
951
982
  s.require_paths = %w[lib]
952
- s.platform = Gem::Platform.new 'i386-linux'
953
- s.instance_variable_set :@original_platform, 'i386-linux'
983
+ s.platform = Gem::Platform.new "i386-linux"
984
+ s.instance_variable_set :@original_platform, "i386-linux"
954
985
  end
955
986
 
956
987
  if prerelease
957
- @a2_pre = quick_gem('a', '2.a', &init)
988
+ @a2_pre = quick_gem("a", "2.a", &init)
958
989
  write_file File.join(*%W[gems #{@a2_pre.original_name} lib code.rb])
959
990
  util_build_gem @a2_pre
960
991
  end
@@ -980,7 +1011,7 @@ Also, a list:
980
1011
  # Set the platform to +arch+
981
1012
 
982
1013
  def util_set_arch(arch)
983
- RbConfig::CONFIG['arch'] = arch
1014
+ RbConfig::CONFIG["arch"] = arch
984
1015
  platform = Gem::Platform.new arch
985
1016
 
986
1017
  Gem.instance_variable_set :@platforms, nil
@@ -1009,7 +1040,7 @@ Also, a list:
1009
1040
 
1010
1041
  spec_fetcher = Gem::SpecFetcher.fetcher
1011
1042
 
1012
- prerelease, all = all_specs.partition { |spec| spec.version.prerelease? }
1043
+ prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
1013
1044
  latest = Gem::Specification._latest_specs all_specs
1014
1045
 
1015
1046
  spec_fetcher.specs[@uri] = []
@@ -1031,7 +1062,7 @@ Also, a list:
1031
1062
  unless Gem::RemoteFetcher === @fetcher
1032
1063
  v = Gem.marshal_version
1033
1064
 
1034
- specs = all.map { |spec| spec.name_tuple }
1065
+ specs = all.map {|spec| spec.name_tuple }
1035
1066
  s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
1036
1067
 
1037
1068
  latest_specs = latest.map do |spec|
@@ -1040,26 +1071,30 @@ Also, a list:
1040
1071
 
1041
1072
  l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
1042
1073
 
1043
- prerelease_specs = prerelease.map { |spec| spec.name_tuple }
1074
+ prerelease_specs = prerelease.map {|spec| spec.name_tuple }
1044
1075
  p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
1045
1076
 
1046
1077
  @fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
1047
1078
  @fetcher.data["#{@gem_repo}latest_specs.#{v}.gz"] = l_zip
1048
1079
  @fetcher.data["#{@gem_repo}prerelease_specs.#{v}.gz"] = p_zip
1049
1080
 
1050
- v = Gem.marshal_version
1051
-
1052
- all_specs.each do |spec|
1053
- path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
1054
- data = Marshal.dump spec
1055
- data_deflate = Zlib::Deflate.deflate data
1056
- @fetcher.data[path] = data_deflate
1057
- end
1081
+ write_marshalled_gemspecs(*all_specs)
1058
1082
  end
1059
1083
 
1060
1084
  nil # force errors
1061
1085
  end
1062
1086
 
1087
+ def write_marshalled_gemspecs(*all_specs)
1088
+ v = Gem.marshal_version
1089
+
1090
+ all_specs.each do |spec|
1091
+ path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
1092
+ data = Marshal.dump spec
1093
+ data_deflate = Zlib::Deflate.deflate data
1094
+ @fetcher.data[path] = data_deflate
1095
+ end
1096
+ end
1097
+
1063
1098
  ##
1064
1099
  # Deflates +data+
1065
1100
 
@@ -1067,7 +1102,7 @@ Also, a list:
1067
1102
  Zlib::Deflate.deflate data
1068
1103
  end
1069
1104
 
1070
- def util_set_RUBY_VERSION(version, patchlevel = nil, revision = nil, description = nil, engine = "ruby", engine_version = nil)
1105
+ def util_set_RUBY_VERSION(version, patchlevel, revision, description, engine = "ruby", engine_version = nil)
1071
1106
  if Gem.instance_variables.include? :@ruby_version
1072
1107
  Gem.send :remove_instance_variable, :@ruby_version
1073
1108
  end
@@ -1075,16 +1110,16 @@ Also, a list:
1075
1110
  @RUBY_VERSION = RUBY_VERSION
1076
1111
  @RUBY_PATCHLEVEL = RUBY_PATCHLEVEL if defined?(RUBY_PATCHLEVEL)
1077
1112
  @RUBY_REVISION = RUBY_REVISION if defined?(RUBY_REVISION)
1078
- @RUBY_DESCRIPTION = RUBY_DESCRIPTION if defined?(RUBY_DESCRIPTION)
1113
+ @RUBY_DESCRIPTION = RUBY_DESCRIPTION
1079
1114
  @RUBY_ENGINE = RUBY_ENGINE
1080
1115
  @RUBY_ENGINE_VERSION = RUBY_ENGINE_VERSION if defined?(RUBY_ENGINE_VERSION)
1081
1116
 
1082
1117
  util_clear_RUBY_VERSION
1083
1118
 
1084
1119
  Object.const_set :RUBY_VERSION, version
1085
- Object.const_set :RUBY_PATCHLEVEL, patchlevel if patchlevel
1086
- Object.const_set :RUBY_REVISION, revision if revision
1087
- Object.const_set :RUBY_DESCRIPTION, description if description
1120
+ Object.const_set :RUBY_PATCHLEVEL, patchlevel
1121
+ Object.const_set :RUBY_REVISION, revision
1122
+ Object.const_set :RUBY_DESCRIPTION, description
1088
1123
  Object.const_set :RUBY_ENGINE, engine
1089
1124
  Object.const_set :RUBY_ENGINE_VERSION, engine_version if engine_version
1090
1125
  end
@@ -1097,8 +1132,7 @@ Also, a list:
1097
1132
  defined?(@RUBY_PATCHLEVEL)
1098
1133
  Object.const_set :RUBY_REVISION, @RUBY_REVISION if
1099
1134
  defined?(@RUBY_REVISION)
1100
- Object.const_set :RUBY_DESCRIPTION, @RUBY_DESCRIPTION if
1101
- defined?(@RUBY_DESCRIPTION)
1135
+ Object.const_set :RUBY_DESCRIPTION, @RUBY_DESCRIPTION
1102
1136
  Object.const_set :RUBY_ENGINE, @RUBY_ENGINE
1103
1137
  Object.const_set :RUBY_ENGINE_VERSION, @RUBY_ENGINE_VERSION if
1104
1138
  defined?(@RUBY_ENGINE_VERSION)
@@ -1146,7 +1180,7 @@ Also, a list:
1146
1180
  # Borland) versus Cygwin, Mingw, etc.
1147
1181
 
1148
1182
  def self.vc_windows?
1149
- RUBY_PLATFORM.match('mswin')
1183
+ RUBY_PLATFORM.match("mswin")
1150
1184
  end
1151
1185
 
1152
1186
  ##
@@ -1154,7 +1188,15 @@ Also, a list:
1154
1188
  # Borland) versus Cygwin, Mingw, etc.
1155
1189
 
1156
1190
  def vc_windows?
1157
- RUBY_PLATFORM.match('mswin')
1191
+ RUBY_PLATFORM.match("mswin")
1192
+ end
1193
+
1194
+ ##
1195
+ # Is this test being run on a ruby/ruby repository?
1196
+ #
1197
+
1198
+ def ruby_repo?
1199
+ !ENV["GEM_COMMAND"].nil?
1158
1200
  end
1159
1201
 
1160
1202
  ##
@@ -1163,7 +1205,7 @@ Also, a list:
1163
1205
  # other platforms, including Cygwin, it will return 'make'.
1164
1206
 
1165
1207
  def self.make_command
1166
- ENV["make"] || ENV["MAKE"] || (vc_windows? ? 'nmake' : 'make')
1208
+ ENV["make"] || ENV["MAKE"] || (vc_windows? ? "nmake" : "make")
1167
1209
  end
1168
1210
 
1169
1211
  ##
@@ -1172,14 +1214,14 @@ Also, a list:
1172
1214
  # other platforms, including Cygwin, it will return 'make'.
1173
1215
 
1174
1216
  def make_command
1175
- ENV["make"] || ENV["MAKE"] || (vc_windows? ? 'nmake' : 'make')
1217
+ ENV["make"] || ENV["MAKE"] || (vc_windows? ? "nmake" : "make")
1176
1218
  end
1177
1219
 
1178
1220
  ##
1179
1221
  # Returns whether or not the nmake command could be found.
1180
1222
 
1181
1223
  def nmake_found?
1182
- system('nmake /? 1>NUL 2>&1')
1224
+ system("nmake /? 1>NUL 2>&1")
1183
1225
  end
1184
1226
 
1185
1227
  # In case we're building docs in a background process, this method waits for
@@ -1211,7 +1253,7 @@ Also, a list:
1211
1253
 
1212
1254
  def build_rake_in(good=true)
1213
1255
  gem_ruby = Gem.ruby
1214
- Gem.ruby = @@ruby
1256
+ Gem.ruby = self.class.rubybin
1215
1257
  env_rake = ENV["rake"]
1216
1258
  rake = (good ? @@good_rake : @@bad_rake)
1217
1259
  ENV["rake"] = rake
@@ -1235,25 +1277,30 @@ Also, a list:
1235
1277
  rubyexe = "#{ruby}.exe"
1236
1278
 
1237
1279
  3.times do
1238
- if File.exist? ruby and File.executable? ruby and !File.directory? ruby
1280
+ if File.exist?(ruby) && File.executable?(ruby) && !File.directory?(ruby)
1239
1281
  return File.expand_path(ruby)
1240
1282
  end
1241
- if File.exist? rubyexe and File.executable? rubyexe
1283
+ if File.exist?(rubyexe) && File.executable?(rubyexe)
1242
1284
  return File.expand_path(rubyexe)
1243
1285
  end
1244
1286
  ruby = File.join("..", ruby)
1245
1287
  end
1246
1288
 
1247
1289
  begin
1248
- require "rbconfig"
1249
- File.join(RbConfig::CONFIG["bindir"],
1250
- RbConfig::CONFIG["ruby_install_name"] +
1251
- RbConfig::CONFIG["EXEEXT"])
1290
+ Gem.ruby
1252
1291
  rescue LoadError
1253
1292
  "ruby"
1254
1293
  end
1255
1294
  end
1256
1295
 
1296
+ def ruby_with_rubygems_in_load_path
1297
+ [Gem.ruby, "-I", rubygems_path]
1298
+ end
1299
+
1300
+ def rubygems_path
1301
+ $LOAD_PATH.find {|p| p == File.dirname($LOADED_FEATURES.find {|f| f.end_with?("/rubygems.rb") }) }
1302
+ end
1303
+
1257
1304
  def with_clean_path_to_ruby
1258
1305
  orig_ruby = Gem.ruby
1259
1306
 
@@ -1264,28 +1311,42 @@ Also, a list:
1264
1311
  Gem.instance_variable_set :@ruby, orig_ruby
1265
1312
  end
1266
1313
 
1267
- class << self
1314
+ def with_internal_encoding(encoding)
1315
+ int_enc = Encoding.default_internal
1316
+ silence_warnings { Encoding.default_internal = encoding }
1268
1317
 
1318
+ yield
1319
+ ensure
1320
+ silence_warnings { Encoding.default_internal = int_enc }
1321
+ end
1322
+
1323
+ def silence_warnings
1324
+ old_verbose, $VERBOSE = $VERBOSE, false
1325
+ yield
1326
+ ensure
1327
+ $VERBOSE = old_verbose
1328
+ end
1329
+
1330
+ class << self
1269
1331
  # :nodoc:
1270
1332
  ##
1271
1333
  # Return the join path, with escaping backticks, dollars, and
1272
1334
  # double-quotes. Unlike `shellescape`, equal-sign is not escaped.
1335
+
1273
1336
  private
1274
1337
 
1275
1338
  def escape_path(*path)
1276
1339
  path = File.join(*path)
1277
- if %r'\A[-+:/=@,.\w]+\z' =~ path
1340
+ if %r{\A[-+:/=@,.\w]+\z} =~ path
1278
1341
  path
1279
1342
  else
1280
1343
  "\"#{path.gsub(/[`$"]/, '\\&')}\""
1281
1344
  end
1282
1345
  end
1283
-
1284
1346
  end
1285
1347
 
1286
- @@ruby = rubybin
1287
- @@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
1288
- @@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
1348
+ @@good_rake = "#{rubybin} #{escape_path(__dir__, 'good_rake.rb')}"
1349
+ @@bad_rake = "#{rubybin} #{escape_path(__dir__, 'bad_rake.rb')}"
1289
1350
 
1290
1351
  ##
1291
1352
  # Construct a new Gem::Dependency.
@@ -1368,8 +1429,8 @@ Also, a list:
1368
1429
  #
1369
1430
  # Yields the +specification+ to the block, if given
1370
1431
 
1371
- def vendor_gem(name = 'a', version = 1)
1372
- directory = File.join 'vendor', name
1432
+ def vendor_gem(name = "a", version = 1)
1433
+ directory = File.join "vendor", name
1373
1434
 
1374
1435
  FileUtils.mkdir_p directory
1375
1436
 
@@ -1382,12 +1443,12 @@ Also, a list:
1382
1443
  #
1383
1444
  # Yields the +specification+ to the block, if given
1384
1445
 
1385
- def save_gemspec(name = 'a', version = 1, directory = '.')
1446
+ def save_gemspec(name = "a", version = 1, directory = ".")
1386
1447
  vendor_spec = Gem::Specification.new name, version do |specification|
1387
1448
  yield specification if block_given?
1388
1449
  end
1389
1450
 
1390
- File.open File.join(directory, "#{name}.gemspec"), 'w' do |io|
1451
+ File.open File.join(directory, "#{name}.gemspec"), "w" do |io|
1391
1452
  io.write vendor_spec.to_ruby
1392
1453
  end
1393
1454
 
@@ -1399,7 +1460,6 @@ Also, a list:
1399
1460
  # It is available by requiring Gem::TestCase.
1400
1461
 
1401
1462
  class StaticSet < Gem::Resolver::Set
1402
-
1403
1463
  ##
1404
1464
  # A StaticSet ignores remote because it has a fixed set of gems.
1405
1465
 
@@ -1436,7 +1496,7 @@ Also, a list:
1436
1496
  # Finds all gems matching +dep+ in this set.
1437
1497
 
1438
1498
  def find_all(dep)
1439
- @specs.find_all { |s| dep.match? s, @prerelease }
1499
+ @specs.find_all {|s| dep.match? s, @prerelease }
1440
1500
  end
1441
1501
 
1442
1502
  ##
@@ -1454,7 +1514,6 @@ Also, a list:
1454
1514
 
1455
1515
  def prefetch(reqs) # :nodoc:
1456
1516
  end
1457
-
1458
1517
  end
1459
1518
 
1460
1519
  ##
@@ -1474,81 +1533,88 @@ Also, a list:
1474
1533
 
1475
1534
  def self.cert_path(cert_name)
1476
1535
  if 32 == (Time.at(2**32) rescue 32)
1477
- cert_file = "#{TEST_PATH}/#{cert_name}_cert_32.pem"
1536
+ cert_file = "#{__dir__}/#{cert_name}_cert_32.pem"
1478
1537
 
1479
1538
  return cert_file if File.exist? cert_file
1480
1539
  end
1481
1540
 
1482
- "#{TEST_PATH}/#{cert_name}_cert.pem"
1541
+ "#{__dir__}/#{cert_name}_cert.pem"
1483
1542
  end
1484
1543
 
1485
1544
  ##
1486
- # Loads an RSA private key named +key_name+ with +passphrase+ in <tt>test/rubygems/</tt>
1545
+ # Loads a private key named +key_name+ with +passphrase+ in <tt>test/rubygems/</tt>
1487
1546
 
1488
1547
  def self.load_key(key_name, passphrase = nil)
1489
1548
  key_file = key_path key_name
1490
1549
 
1491
1550
  key = File.read key_file
1492
1551
 
1493
- OpenSSL::PKey::RSA.new key, passphrase
1552
+ OpenSSL::PKey.read key, passphrase
1494
1553
  end
1495
1554
 
1496
1555
  ##
1497
1556
  # Returns the path to the key named +key_name+ from <tt>test/rubygems</tt>
1498
1557
 
1499
1558
  def self.key_path(key_name)
1500
- "#{TEST_PATH}/#{key_name}_key.pem"
1559
+ "#{__dir__}/#{key_name}_key.pem"
1501
1560
  end
1502
1561
 
1503
1562
  # :stopdoc:
1504
1563
  # only available in RubyGems tests
1505
1564
 
1506
- PRIVATE_KEY_PASSPHRASE = 'Foo bar'.freeze
1565
+ PRIVATE_KEY_PASSPHRASE = "Foo bar".freeze
1507
1566
 
1508
1567
  begin
1509
- PRIVATE_KEY = load_key 'private'
1510
- PRIVATE_KEY_PATH = key_path 'private'
1568
+ PRIVATE_KEY = load_key "private"
1569
+ PRIVATE_KEY_PATH = key_path "private"
1511
1570
 
1512
1571
  # ENCRYPTED_PRIVATE_KEY is PRIVATE_KEY encrypted with PRIVATE_KEY_PASSPHRASE
1513
- ENCRYPTED_PRIVATE_KEY = load_key 'encrypted_private', PRIVATE_KEY_PASSPHRASE
1514
- ENCRYPTED_PRIVATE_KEY_PATH = key_path 'encrypted_private'
1572
+ ENCRYPTED_PRIVATE_KEY = load_key "encrypted_private", PRIVATE_KEY_PASSPHRASE
1573
+ ENCRYPTED_PRIVATE_KEY_PATH = key_path "encrypted_private"
1515
1574
 
1516
1575
  PUBLIC_KEY = PRIVATE_KEY.public_key
1517
1576
 
1518
- PUBLIC_CERT = load_cert 'public'
1519
- PUBLIC_CERT_PATH = cert_path 'public'
1577
+ PUBLIC_CERT = load_cert "public"
1578
+ PUBLIC_CERT_PATH = cert_path "public"
1520
1579
  rescue Errno::ENOENT
1521
1580
  PRIVATE_KEY = nil
1522
1581
  PUBLIC_KEY = nil
1523
1582
  PUBLIC_CERT = nil
1524
- end if defined?(OpenSSL::SSL)
1525
-
1583
+ end if Gem::HAVE_OPENSSL
1526
1584
  end
1527
1585
 
1528
- # require dependencies that are not discoverable once GEM_HOME and GEM_PATH
1529
- # are wiped
1530
- begin
1531
- gem 'rake'
1532
- rescue Gem::LoadError
1533
- end
1586
+ # https://github.com/seattlerb/minitest/blob/13c48a03d84a2a87855a4de0c959f96800100357/lib/minitest/mock.rb#L192
1587
+ class Object
1588
+ def stub(name, val_or_callable, *block_args)
1589
+ new_name = "__minitest_stub__#{name}"
1534
1590
 
1535
- begin
1536
- require 'rake/packagetask'
1537
- rescue LoadError
1538
- end
1591
+ metaclass = class << self; self; end
1539
1592
 
1540
- begin
1541
- gem 'rdoc'
1542
- require 'rdoc'
1593
+ if respond_to?(name) && !methods.map(&:to_s).include?(name.to_s)
1594
+ metaclass.send :define_method, name do |*args|
1595
+ super(*args)
1596
+ end
1597
+ end
1543
1598
 
1544
- require 'rubygems/rdoc'
1545
- rescue LoadError, Gem::LoadError
1546
- end
1599
+ metaclass.send :alias_method, new_name, name
1547
1600
 
1548
- begin
1549
- gem 'builder'
1550
- require 'builder/xchar'
1551
- rescue LoadError, Gem::LoadError
1601
+ metaclass.send :define_method, name do |*args, &blk|
1602
+ if val_or_callable.respond_to? :call
1603
+ val_or_callable.call(*args, &blk)
1604
+ else
1605
+ blk.call(*block_args) if blk
1606
+ val_or_callable
1607
+ end
1608
+ end
1609
+
1610
+ metaclass.send(:ruby2_keywords, name) if metaclass.respond_to?(:ruby2_keywords, true)
1611
+
1612
+ yield self
1613
+ ensure
1614
+ metaclass.send :undef_method, name
1615
+ metaclass.send :alias_method, name, new_name
1616
+ metaclass.send :undef_method, new_name
1617
+ end unless method_defined?(:stub) # lib/resolv/test_dns.rb also has the same method definition
1552
1618
  end
1553
1619
 
1554
- require 'rubygems/test_utilities'
1620
+ require_relative "utilities"