rubygems-update 3.1.2 → 3.2.3

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 (560) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +25 -11
  4. data/History.txt +460 -232
  5. data/Manifest.txt +47 -77
  6. data/POLICIES.md +6 -12
  7. data/README.md +5 -5
  8. data/Rakefile +59 -83
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1598 -1421
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +3 -3
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +32 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +58 -21
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  20. data/bundler/lib/bundler/cli/cache.rb +1 -7
  21. data/bundler/lib/bundler/cli/clean.rb +1 -1
  22. data/bundler/lib/bundler/cli/common.rb +14 -0
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  25. data/bundler/lib/bundler/cli/exec.rb +4 -4
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +84 -11
  28. data/bundler/lib/bundler/cli/info.rb +15 -4
  29. data/bundler/lib/bundler/cli/init.rb +2 -2
  30. data/bundler/lib/bundler/cli/inject.rb +1 -1
  31. data/bundler/lib/bundler/cli/install.rb +16 -13
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +12 -10
  34. data/bundler/lib/bundler/cli/outdated.rb +87 -66
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  37. data/bundler/lib/bundler/cli/show.rb +1 -1
  38. data/bundler/lib/bundler/cli/update.rb +3 -1
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  41. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  43. data/bundler/lib/bundler/definition.rb +65 -76
  44. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  45. data/bundler/lib/bundler/dependency.rb +3 -10
  46. data/bundler/lib/bundler/dsl.rb +5 -9
  47. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  48. data/bundler/lib/bundler/env.rb +1 -1
  49. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  50. data/bundler/lib/bundler/errors.rb +1 -0
  51. data/bundler/lib/bundler/feature_flag.rb +0 -3
  52. data/bundler/lib/bundler/fetcher.rb +4 -3
  53. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  56. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  57. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  58. data/bundler/lib/bundler/gem_helper.rb +33 -19
  59. data/bundler/lib/bundler/gem_helpers.rb +36 -25
  60. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  61. data/bundler/lib/bundler/graph.rb +1 -1
  62. data/bundler/lib/bundler/index.rb +6 -2
  63. data/bundler/lib/bundler/injector.rb +22 -4
  64. data/bundler/lib/bundler/inline.rb +2 -2
  65. data/bundler/lib/bundler/installer.rb +35 -32
  66. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  68. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  69. data/bundler/lib/bundler/lazy_specification.rb +35 -11
  70. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  71. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  72. data/bundler/lib/bundler/man/.document +1 -0
  73. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  74. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  75. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  76. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  77. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  78. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  79. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  80. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  81. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  82. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  83. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  84. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  85. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  86. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  87. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  88. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  89. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  90. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  91. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  92. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  93. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  94. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  95. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  96. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  97. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  98. data/bundler/lib/bundler/mirror.rb +2 -2
  99. data/bundler/lib/bundler/plugin.rb +30 -5
  100. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  101. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  102. data/bundler/lib/bundler/plugin/index.rb +10 -1
  103. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  104. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  105. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  106. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  107. data/bundler/lib/bundler/remote_specification.rb +5 -2
  108. data/bundler/lib/bundler/resolver.rb +37 -18
  109. data/bundler/lib/bundler/resolver/spec_group.rb +36 -21
  110. data/bundler/lib/bundler/retry.rb +1 -1
  111. data/bundler/lib/bundler/ruby_version.rb +1 -1
  112. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  113. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  114. data/bundler/lib/bundler/rubygems_integration.rb +26 -61
  115. data/bundler/lib/bundler/runtime.rb +4 -14
  116. data/bundler/lib/bundler/settings.rb +49 -46
  117. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  118. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  119. data/bundler/lib/bundler/source.rb +1 -1
  120. data/bundler/lib/bundler/source/git.rb +5 -5
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +57 -60
  122. data/bundler/lib/bundler/source/path.rb +7 -3
  123. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  124. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  125. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  126. data/bundler/lib/bundler/source_list.rb +2 -2
  127. data/bundler/lib/bundler/spec_set.rb +7 -9
  128. data/bundler/lib/bundler/stub_specification.rb +17 -7
  129. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  130. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  131. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  132. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  133. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  134. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  135. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  136. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  137. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  138. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  139. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  140. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -6
  141. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  142. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  143. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  144. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  145. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  146. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  147. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  148. data/bundler/lib/bundler/ui/shell.rb +5 -5
  149. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  150. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  151. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  152. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  153. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  154. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  155. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  156. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
  157. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  161. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  162. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  163. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  164. data/bundler/lib/bundler/version.rb +1 -1
  165. data/bundler/lib/bundler/worker.rb +1 -1
  166. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  167. data/bundler/man/bundle-add.1 +1 -1
  168. data/bundler/man/bundle-binstubs.1 +5 -3
  169. data/bundler/man/bundle-cache.1 +1 -1
  170. data/bundler/man/bundle-check.1 +1 -1
  171. data/bundler/man/bundle-clean.1 +1 -1
  172. data/bundler/man/bundle-config.1 +16 -25
  173. data/bundler/man/bundle-doctor.1 +1 -1
  174. data/bundler/man/bundle-exec.1 +1 -1
  175. data/bundler/man/bundle-gem.1 +25 -3
  176. data/bundler/man/bundle-info.1 +1 -1
  177. data/bundler/man/bundle-init.1 +1 -1
  178. data/bundler/man/bundle-inject.1 +1 -1
  179. data/bundler/man/bundle-install.1 +30 -3
  180. data/bundler/man/bundle-list.1 +7 -7
  181. data/bundler/man/bundle-lock.1 +1 -1
  182. data/bundler/man/bundle-open.1 +1 -1
  183. data/bundler/man/bundle-outdated.1 +1 -1
  184. data/bundler/man/bundle-platform.1 +1 -1
  185. data/bundler/man/bundle-pristine.1 +1 -1
  186. data/bundler/man/bundle-remove.1 +1 -1
  187. data/bundler/man/bundle-show.1 +1 -1
  188. data/bundler/man/bundle-update.1 +1 -1
  189. data/bundler/man/bundle-viz.1 +1 -1
  190. data/bundler/man/bundle.1 +1 -1
  191. data/bundler/man/gemfile.5 +4 -4
  192. data/lib/rubygems.rb +138 -187
  193. data/lib/rubygems/available_set.rb +4 -6
  194. data/lib/rubygems/basic_specification.rb +12 -10
  195. data/lib/rubygems/bundler_version_finder.rb +14 -9
  196. data/lib/rubygems/command.rb +17 -17
  197. data/lib/rubygems/command_manager.rb +5 -6
  198. data/lib/rubygems/commands/build_command.rb +40 -20
  199. data/lib/rubygems/commands/cert_command.rb +2 -10
  200. data/lib/rubygems/commands/check_command.rb +0 -2
  201. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  202. data/lib/rubygems/commands/contents_command.rb +4 -6
  203. data/lib/rubygems/commands/dependency_command.rb +6 -8
  204. data/lib/rubygems/commands/environment_command.rb +1 -3
  205. data/lib/rubygems/commands/fetch_command.rb +2 -4
  206. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  207. data/lib/rubygems/commands/help_command.rb +4 -4
  208. data/lib/rubygems/commands/info_command.rb +8 -5
  209. data/lib/rubygems/commands/install_command.rb +3 -5
  210. data/lib/rubygems/commands/list_command.rb +8 -7
  211. data/lib/rubygems/commands/lock_command.rb +1 -3
  212. data/lib/rubygems/commands/mirror_command.rb +0 -2
  213. data/lib/rubygems/commands/open_command.rb +0 -4
  214. data/lib/rubygems/commands/outdated_command.rb +0 -2
  215. data/lib/rubygems/commands/owner_command.rb +9 -4
  216. data/lib/rubygems/commands/pristine_command.rb +11 -5
  217. data/lib/rubygems/commands/push_command.rb +10 -47
  218. data/lib/rubygems/commands/query_command.rb +14 -344
  219. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  220. data/lib/rubygems/commands/search_command.rb +7 -7
  221. data/lib/rubygems/commands/server_command.rb +3 -1
  222. data/lib/rubygems/commands/setup_command.rb +131 -58
  223. data/lib/rubygems/commands/signin_command.rb +0 -2
  224. data/lib/rubygems/commands/signout_command.rb +0 -2
  225. data/lib/rubygems/commands/sources_command.rb +9 -7
  226. data/lib/rubygems/commands/specification_command.rb +8 -4
  227. data/lib/rubygems/commands/stale_command.rb +1 -3
  228. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  229. data/lib/rubygems/commands/unpack_command.rb +1 -3
  230. data/lib/rubygems/commands/update_command.rb +59 -14
  231. data/lib/rubygems/commands/which_command.rb +0 -2
  232. data/lib/rubygems/commands/yank_command.rb +4 -7
  233. data/lib/rubygems/config_file.rb +11 -4
  234. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  235. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  236. data/lib/rubygems/defaults.rb +101 -7
  237. data/lib/rubygems/dependency.rb +3 -8
  238. data/lib/rubygems/dependency_installer.rb +6 -78
  239. data/lib/rubygems/dependency_list.rb +7 -9
  240. data/lib/rubygems/deprecate.rb +46 -1
  241. data/lib/rubygems/doctor.rb +4 -4
  242. data/lib/rubygems/errors.rb +3 -14
  243. data/lib/rubygems/exceptions.rb +2 -33
  244. data/lib/rubygems/ext.rb +6 -6
  245. data/lib/rubygems/ext/build_error.rb +2 -0
  246. data/lib/rubygems/ext/builder.rb +16 -35
  247. data/lib/rubygems/ext/cmake_builder.rb +5 -7
  248. data/lib/rubygems/ext/configure_builder.rb +4 -6
  249. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  250. data/lib/rubygems/ext/rake_builder.rb +4 -6
  251. data/lib/rubygems/gem_runner.rb +3 -10
  252. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  253. data/lib/rubygems/indexer.rb +1 -22
  254. data/lib/rubygems/install_update_options.rb +7 -7
  255. data/lib/rubygems/installer.rb +59 -80
  256. data/lib/rubygems/installer_test_case.rb +25 -11
  257. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  258. data/lib/rubygems/local_remote_options.rb +1 -1
  259. data/lib/rubygems/mock_gem_ui.rb +0 -6
  260. data/lib/rubygems/name_tuple.rb +3 -7
  261. data/lib/rubygems/openssl.rb +7 -0
  262. data/lib/rubygems/package.rb +14 -25
  263. data/lib/rubygems/package/digest_io.rb +0 -2
  264. data/lib/rubygems/package/file_source.rb +0 -2
  265. data/lib/rubygems/package/io_source.rb +0 -2
  266. data/lib/rubygems/package/old.rb +1 -3
  267. data/lib/rubygems/package/tar_header.rb +4 -6
  268. data/lib/rubygems/package/tar_reader.rb +0 -3
  269. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  270. data/lib/rubygems/package/tar_test_case.rb +2 -4
  271. data/lib/rubygems/package/tar_writer.rb +2 -12
  272. data/lib/rubygems/package_task.rb +1 -7
  273. data/lib/rubygems/path_support.rb +1 -3
  274. data/lib/rubygems/platform.rb +21 -12
  275. data/lib/rubygems/psych_tree.rb +0 -2
  276. data/lib/rubygems/query_utils.rb +353 -0
  277. data/lib/rubygems/rdoc.rb +0 -12
  278. data/lib/rubygems/remote_fetcher.rb +11 -28
  279. data/lib/rubygems/request.rb +4 -11
  280. data/lib/rubygems/request/connection_pools.rb +1 -5
  281. data/lib/rubygems/request/http_pool.rb +0 -2
  282. data/lib/rubygems/request/https_pool.rb +0 -2
  283. data/lib/rubygems/request_set.rb +7 -20
  284. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  285. data/lib/rubygems/request_set/lockfile.rb +8 -12
  286. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  287. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  288. data/lib/rubygems/requirement.rb +20 -21
  289. data/lib/rubygems/resolver.rb +14 -12
  290. data/lib/rubygems/resolver/activation_request.rb +9 -3
  291. data/lib/rubygems/resolver/api_set.rb +31 -24
  292. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  293. data/lib/rubygems/resolver/api_specification.rb +24 -10
  294. data/lib/rubygems/resolver/best_set.rb +1 -3
  295. data/lib/rubygems/resolver/composed_set.rb +3 -5
  296. data/lib/rubygems/resolver/conflict.rb +2 -4
  297. data/lib/rubygems/resolver/current_set.rb +0 -2
  298. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  299. data/lib/rubygems/resolver/git_set.rb +0 -2
  300. data/lib/rubygems/resolver/git_specification.rb +0 -2
  301. data/lib/rubygems/resolver/index_set.rb +1 -3
  302. data/lib/rubygems/resolver/index_specification.rb +26 -2
  303. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  304. data/lib/rubygems/resolver/installer_set.rb +60 -13
  305. data/lib/rubygems/resolver/local_specification.rb +0 -2
  306. data/lib/rubygems/resolver/lock_set.rb +2 -4
  307. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  308. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  328. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  329. data/lib/rubygems/resolver/set.rb +0 -2
  330. data/lib/rubygems/resolver/source_set.rb +0 -2
  331. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  332. data/lib/rubygems/resolver/specification.rb +13 -3
  333. data/lib/rubygems/resolver/stats.rb +0 -2
  334. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  335. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  336. data/lib/rubygems/s3_uri_signer.rb +2 -8
  337. data/lib/rubygems/safe_yaml.rb +4 -4
  338. data/lib/rubygems/security.rb +27 -34
  339. data/lib/rubygems/security/policy.rb +4 -8
  340. data/lib/rubygems/security/signer.rb +5 -7
  341. data/lib/rubygems/security/trust_dir.rb +1 -3
  342. data/lib/rubygems/server.rb +16 -13
  343. data/lib/rubygems/source.rb +23 -12
  344. data/lib/rubygems/source/git.rb +7 -8
  345. data/lib/rubygems/source/installed.rb +0 -2
  346. data/lib/rubygems/source/local.rb +2 -4
  347. data/lib/rubygems/source/lock.rb +0 -2
  348. data/lib/rubygems/source/specific_file.rb +0 -2
  349. data/lib/rubygems/source/vendor.rb +0 -2
  350. data/lib/rubygems/source_list.rb +4 -7
  351. data/lib/rubygems/spec_fetcher.rb +19 -18
  352. data/lib/rubygems/specification.rb +113 -126
  353. data/lib/rubygems/specification_policy.rb +88 -30
  354. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  355. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  356. data/lib/rubygems/stub_specification.rb +1 -5
  357. data/lib/rubygems/syck_hack.rb +0 -2
  358. data/lib/rubygems/test_case.rb +105 -132
  359. data/lib/rubygems/test_utilities.rb +12 -19
  360. data/lib/rubygems/uninstaller.rb +35 -16
  361. data/lib/rubygems/uri_formatter.rb +2 -3
  362. data/lib/rubygems/uri_parser.rb +0 -2
  363. data/lib/rubygems/user_interaction.rb +1 -26
  364. data/lib/rubygems/util.rb +15 -3
  365. data/lib/rubygems/util/licenses.rb +4 -6
  366. data/lib/rubygems/util/list.rb +0 -2
  367. data/lib/rubygems/validator.rb +1 -3
  368. data/lib/rubygems/version.rb +5 -7
  369. data/lib/rubygems/version_option.rb +6 -0
  370. data/rubygems-update.gemspec +2 -2
  371. data/setup.rb +2 -7
  372. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  373. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  374. data/test/rubygems/rubygems_plugin.rb +0 -2
  375. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  376. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  377. data/test/rubygems/test_bundled_ca.rb +42 -45
  378. data/test/rubygems/test_config.rb +0 -2
  379. data/test/rubygems/test_deprecate.rb +40 -7
  380. data/test/rubygems/test_gem.rb +151 -99
  381. data/test/rubygems/test_gem_available_set.rb +3 -5
  382. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  383. data/test/rubygems/test_gem_command.rb +24 -7
  384. data/test/rubygems/test_gem_command_manager.rb +36 -5
  385. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  386. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  387. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  388. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  389. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  390. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  391. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  392. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  393. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  394. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  395. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  396. data/test/rubygems/test_gem_commands_install_command.rb +163 -34
  397. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  398. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  399. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  400. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  401. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  402. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  403. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  404. data/test/rubygems/test_gem_commands_push_command.rb +77 -9
  405. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  406. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  407. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  408. data/test/rubygems/test_gem_commands_setup_command.rb +165 -124
  409. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  410. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  411. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  412. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  413. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  414. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  415. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  416. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  417. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  418. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  419. data/test/rubygems/test_gem_config_file.rb +7 -12
  420. data/test/rubygems/test_gem_dependency.rb +0 -2
  421. data/test/rubygems/test_gem_dependency_installer.rb +90 -193
  422. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  423. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  424. data/test/rubygems/test_gem_doctor.rb +28 -2
  425. data/test/rubygems/test_gem_ext_builder.rb +26 -47
  426. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  427. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -20
  428. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  429. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
  430. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  431. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  432. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  433. data/test/rubygems/test_gem_indexer.rb +9 -15
  434. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  435. data/test/rubygems/test_gem_installer.rb +258 -115
  436. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  437. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  438. data/test/rubygems/test_gem_package.rb +41 -39
  439. data/test/rubygems/test_gem_package_old.rb +4 -6
  440. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  441. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  442. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  443. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  444. data/test/rubygems/test_gem_package_task.rb +46 -13
  445. data/test/rubygems/test_gem_path_support.rb +0 -2
  446. data/test/rubygems/test_gem_platform.rb +63 -6
  447. data/test/rubygems/test_gem_rdoc.rb +0 -2
  448. data/test/rubygems/test_gem_remote_fetcher.rb +168 -211
  449. data/test/rubygems/test_gem_request.rb +13 -17
  450. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  451. data/test/rubygems/test_gem_request_set.rb +72 -22
  452. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  453. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  454. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  455. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  456. data/test/rubygems/test_gem_requirement.rb +10 -4
  457. data/test/rubygems/test_gem_resolver.rb +6 -8
  458. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  459. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  460. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  461. data/test/rubygems/test_gem_resolver_best_set.rb +5 -7
  462. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  463. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  464. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  466. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  467. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  468. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  470. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  471. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  472. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  473. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  475. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  476. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  477. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  478. data/test/rubygems/test_gem_security.rb +22 -24
  479. data/test/rubygems/test_gem_security_policy.rb +7 -12
  480. data/test/rubygems/test_gem_security_signer.rb +10 -12
  481. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  482. data/test/rubygems/test_gem_server.rb +10 -14
  483. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  484. data/test/rubygems/test_gem_source.rb +19 -18
  485. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  486. data/test/rubygems/test_gem_source_git.rb +12 -13
  487. data/test/rubygems/test_gem_source_installed.rb +7 -9
  488. data/test/rubygems/test_gem_source_list.rb +1 -2
  489. data/test/rubygems/test_gem_source_local.rb +8 -10
  490. data/test/rubygems/test_gem_source_lock.rb +10 -12
  491. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  492. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  493. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  494. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  495. data/test/rubygems/test_gem_specification.rb +182 -131
  496. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  497. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  498. data/test/rubygems/test_gem_text.rb +1 -3
  499. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  500. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  501. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  502. data/test/rubygems/test_gem_util.rb +7 -7
  503. data/test/rubygems/test_gem_validator.rb +1 -3
  504. data/test/rubygems/test_gem_version.rb +1 -3
  505. data/test/rubygems/test_gem_version_option.rb +1 -3
  506. data/test/rubygems/test_kernel.rb +25 -10
  507. data/test/rubygems/test_project_sanity.rb +7 -2
  508. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  509. data/test/rubygems/test_require.rb +291 -56
  510. data/test/test_changelog_generator.rb +17 -0
  511. metadata +65 -96
  512. data/.bundle/config +0 -2
  513. data/.rubocop.yml +0 -91
  514. data/Gemfile +0 -8
  515. data/Gemfile.lock +0 -43
  516. data/bundler/CODE_OF_CONDUCT.md +0 -136
  517. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  518. data/bundler/man/bundle-add.1.txt +0 -58
  519. data/bundler/man/bundle-binstubs.1.txt +0 -48
  520. data/bundler/man/bundle-cache.1.txt +0 -78
  521. data/bundler/man/bundle-check.1.txt +0 -33
  522. data/bundler/man/bundle-clean.1.txt +0 -26
  523. data/bundler/man/bundle-config.1.txt +0 -528
  524. data/bundler/man/bundle-doctor.1.txt +0 -44
  525. data/bundler/man/bundle-exec.1.txt +0 -178
  526. data/bundler/man/bundle-gem.1.txt +0 -91
  527. data/bundler/man/bundle-info.1.txt +0 -21
  528. data/bundler/man/bundle-init.1.txt +0 -34
  529. data/bundler/man/bundle-inject.1.txt +0 -32
  530. data/bundler/man/bundle-install.1.txt +0 -401
  531. data/bundler/man/bundle-list.1.txt +0 -43
  532. data/bundler/man/bundle-lock.1.txt +0 -93
  533. data/bundler/man/bundle-open.1.txt +0 -29
  534. data/bundler/man/bundle-outdated.1.txt +0 -131
  535. data/bundler/man/bundle-platform.1.txt +0 -57
  536. data/bundler/man/bundle-pristine.1.txt +0 -44
  537. data/bundler/man/bundle-remove.1.txt +0 -34
  538. data/bundler/man/bundle-show.1.txt +0 -27
  539. data/bundler/man/bundle-update.1.txt +0 -390
  540. data/bundler/man/bundle-viz.1.txt +0 -39
  541. data/bundler/man/bundle.1.txt +0 -116
  542. data/bundler/man/gemfile.5.txt +0 -649
  543. data/lib/rubygems/source_local.rb +0 -7
  544. data/lib/rubygems/source_specific_file.rb +0 -6
  545. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  546. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  547. data/lib/ubygems.rb +0 -14
  548. data/tmp/.keep +0 -0
  549. data/util/CL2notes +0 -55
  550. data/util/bisect +0 -10
  551. data/util/ci.sh +0 -62
  552. data/util/cops/deprecations.rb +0 -52
  553. data/util/create_certs.rb +0 -171
  554. data/util/create_certs.sh +0 -27
  555. data/util/create_encrypted_key.rb +0 -16
  556. data/util/generate_spdx_license_list.rb +0 -63
  557. data/util/patch_with_prs.rb +0 -77
  558. data/util/rubocop +0 -8
  559. data/util/update_bundled_ca_certificates.rb +0 -139
  560. data/util/update_changelog.rb +0 -67
@@ -1,11 +1,9 @@
1
- # coding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'rubygems/test_case'
5
4
  require 'rubygems/ext'
6
5
 
7
6
  class TestGemExtExtConfBuilder < Gem::TestCase
8
-
9
7
  def setup
10
8
  super
11
9
 
@@ -31,12 +29,9 @@ class TestGemExtExtConfBuilder < Gem::TestCase
31
29
 
32
30
  output = []
33
31
 
34
- Dir.chdir @ext do
35
- result =
36
- Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
32
+ result = Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output, [], nil, @ext
37
33
 
38
- assert_same result, output
39
- end
34
+ assert_same result, output
40
35
 
41
36
  assert_match(/^current directory:/, output[0])
42
37
  assert_match(/^#{Gem.ruby}.* extconf.rb/, output[1])
@@ -61,9 +56,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
61
56
 
62
57
  output = []
63
58
 
64
- Dir.chdir @ext do
65
- Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
66
- end
59
+ Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output, [], nil, @ext
67
60
 
68
61
  assert_equal "creating Makefile\n", output[2]
69
62
  assert_contains_make_command 'clean', output[4]
@@ -88,9 +81,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
88
81
  output = []
89
82
 
90
83
  assert_raises Gem::InstallError do
91
- Dir.chdir @ext do
92
- Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
93
- end
84
+ Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output, [], nil, @ext
94
85
  end
95
86
 
96
87
  assert_equal "creating Makefile\n", output[2]
@@ -114,9 +105,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
114
105
  output = []
115
106
 
116
107
  error = assert_raises Gem::InstallError do
117
- Dir.chdir @ext do
118
- Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
119
- end
108
+ Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output, [], nil, @ext
120
109
  end
121
110
 
122
111
  assert_equal 'extconf failed, exit code 1', error.message
@@ -141,9 +130,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
141
130
 
142
131
  output = []
143
132
 
144
- Dir.chdir @ext do
145
- Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
146
- end
133
+ Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output, [], nil, @ext
147
134
 
148
135
  refute_includes(output, "To see why this extension failed to compile, please check the mkmf.log which can be found here:\n")
149
136
 
@@ -183,9 +170,7 @@ end
183
170
 
184
171
  output = []
185
172
 
186
- Dir.chdir @ext do
187
- Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
188
- end
173
+ Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output, [], nil, @ext
189
174
 
190
175
  assert_contains_make_command 'clean', output[4]
191
176
  assert_contains_make_command '', output[7]
@@ -209,9 +194,7 @@ end
209
194
  makefile.puts "install:"
210
195
  end
211
196
 
212
- Dir.chdir @ext do
213
- Gem::Ext::ExtConfBuilder.make @ext, output
214
- end
197
+ Gem::Ext::ExtConfBuilder.make @ext, output, @ext
215
198
 
216
199
  assert_contains_make_command 'clean', output[1]
217
200
  assert_contains_make_command '', output[4]
@@ -220,9 +203,7 @@ end
220
203
 
221
204
  def test_class_make_no_Makefile
222
205
  error = assert_raises Gem::InstallError do
223
- Dir.chdir @ext do
224
- Gem::Ext::ExtConfBuilder.make @ext, ['output']
225
- end
206
+ Gem::Ext::ExtConfBuilder.make @ext, ['output'], @ext
226
207
  end
227
208
 
228
209
  assert_equal 'Makefile not found', error.message
@@ -241,5 +222,4 @@ end
241
222
  RbConfig::CONFIG.delete 'configure_args'
242
223
  end
243
224
  end
244
-
245
225
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/ext'
4
4
 
5
5
  class TestGemExtRakeBuilder < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -19,15 +18,13 @@ class TestGemExtRakeBuilder < Gem::TestCase
19
18
  output = []
20
19
 
21
20
  build_rake_in do |rake|
22
- Dir.chdir @ext do
23
- Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output
24
- end
21
+ Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, [], nil, @ext
25
22
 
26
23
  output = output.join "\n"
27
24
 
28
- refute_match %r%^rake failed:%, output
29
- assert_match %r%^#{Regexp.escape @@ruby} mkrf_conf\.rb%, output
30
- assert_match %r%^#{Regexp.escape rake} RUBYARCHDIR\\=#{Regexp.escape @dest_path} RUBYLIBDIR\\=#{Regexp.escape @dest_path}%, output
25
+ refute_match %r{^rake failed:}, output
26
+ assert_match %r{^#{Regexp.escape Gem.ruby} mkrf_conf\.rb}, output
27
+ assert_match %r{^#{Regexp.escape rake} RUBYARCHDIR\\=#{Regexp.escape @dest_path} RUBYLIBDIR\\=#{Regexp.escape @dest_path}}, output
31
28
  end
32
29
  end
33
30
 
@@ -39,31 +36,52 @@ class TestGemExtRakeBuilder < Gem::TestCase
39
36
  output = []
40
37
 
41
38
  build_rake_in do |rake|
42
- Dir.chdir @ext do
43
- non_empty_args_list = ['']
44
- Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, non_empty_args_list
45
- end
39
+ non_empty_args_list = ['']
40
+ Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, non_empty_args_list, nil, @ext
46
41
 
47
42
  output = output.join "\n"
48
43
 
49
- refute_match %r%^rake failed:%, output
50
- assert_match %r%^#{Regexp.escape @@ruby} mkrf_conf\.rb%, output
51
- assert_match %r%^#{Regexp.escape rake} RUBYARCHDIR\\=#{Regexp.escape @dest_path} RUBYLIBDIR\\=#{Regexp.escape @dest_path}%, output
44
+ refute_match %r{^rake failed:}, output
45
+ assert_match %r{^#{Regexp.escape Gem.ruby} mkrf_conf\.rb}, output
46
+ assert_match %r{^#{Regexp.escape rake} RUBYARCHDIR\\=#{Regexp.escape @dest_path} RUBYLIBDIR\\=#{Regexp.escape @dest_path}}, output
52
47
  end
53
48
  end
54
49
 
50
+ def test_class_no_openssl_override
51
+ create_temp_mkrf_file('task :default')
52
+
53
+ rake = util_spec 'rake' do |s|
54
+ s.executables = %w[rake]
55
+ s.files = %w[bin/rake]
56
+ end
57
+
58
+ output = []
59
+
60
+ write_file File.join(@tempdir, 'bin', 'rake') do |fp|
61
+ fp.puts "#!/usr/bin/ruby"
62
+ fp.puts "require 'openssl'; puts OpenSSL"
63
+ end
64
+
65
+ install_gem rake
66
+
67
+ Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, [''], nil, @ext
68
+
69
+ output = output.join "\n"
70
+
71
+ assert_match "OpenSSL", output
72
+ assert_match %r{^#{Regexp.escape Gem.ruby} mkrf_conf\.rb}, output
73
+ end
74
+
55
75
  def test_class_build_no_mkrf_passes_args
56
76
  output = []
57
77
 
58
78
  build_rake_in do |rake|
59
- Dir.chdir @ext do
60
- Gem::Ext::RakeBuilder.build "ext/Rakefile", @dest_path, output, ["test1", "test2"]
61
- end
79
+ Gem::Ext::RakeBuilder.build "ext/Rakefile", @dest_path, output, ["test1", "test2"], nil, @ext
62
80
 
63
81
  output = output.join "\n"
64
82
 
65
- refute_match %r%^rake failed:%, output
66
- assert_match %r%^#{Regexp.escape rake} RUBYARCHDIR\\=#{Regexp.escape @dest_path} RUBYLIBDIR\\=#{Regexp.escape @dest_path} test1 test2%, output
83
+ refute_match %r{^rake failed:}, output
84
+ assert_match %r{^#{Regexp.escape rake} RUBYARCHDIR\\=#{Regexp.escape @dest_path} RUBYLIBDIR\\=#{Regexp.escape @dest_path} test1 test2}, output
67
85
  end
68
86
  end
69
87
 
@@ -73,12 +91,10 @@ class TestGemExtRakeBuilder < Gem::TestCase
73
91
 
74
92
  build_rake_in(false) do |rake|
75
93
  error = assert_raises Gem::InstallError do
76
- Dir.chdir @ext do
77
- Gem::Ext::RakeBuilder.build "mkrf_conf.rb", @dest_path, output
78
- end
94
+ Gem::Ext::RakeBuilder.build "mkrf_conf.rb", @dest_path, output, [], nil, @ext
79
95
  end
80
96
 
81
- assert_match %r%^rake failed%, error.message
97
+ assert_match %r{^rake failed}, error.message
82
98
  end
83
99
  end
84
100
 
@@ -91,5 +107,4 @@ class TestGemExtRakeBuilder < Gem::TestCase
91
107
  EO_MKRF
92
108
  end
93
109
  end
94
-
95
110
  end
@@ -2,12 +2,13 @@
2
2
  require 'rubygems/test_case'
3
3
 
4
4
  class TestGemGemRunner < Gem::TestCase
5
-
6
5
  def setup
7
6
  super
8
7
 
9
8
  require 'rubygems/command'
10
9
  @orig_args = Gem::Command.build_args
10
+ @orig_specific_extra_args = Gem::Command.specific_extra_args_hash.dup
11
+ @orig_extra_args = Gem::Command.extra_args.dup
11
12
 
12
13
  require 'rubygems/gem_runner'
13
14
  @runner = Gem::GemRunner.new
@@ -17,6 +18,8 @@ class TestGemGemRunner < Gem::TestCase
17
18
  super
18
19
 
19
20
  Gem::Command.build_args = @orig_args
21
+ Gem::Command.specific_extra_args_hash = @orig_specific_extra_args
22
+ Gem::Command.extra_args = @orig_extra_args
20
23
  end
21
24
 
22
25
  def test_do_configuration
@@ -67,4 +70,44 @@ class TestGemGemRunner < Gem::TestCase
67
70
  assert_equal %w[--foo], args
68
71
  end
69
72
 
73
+ def test_query_is_deprecated
74
+ args = %w[query]
75
+
76
+ use_ui @ui do
77
+ @runner.run(args)
78
+ end
79
+
80
+ assert_match(/WARNING: query command is deprecated. It will be removed in Rubygems [0-9]+/, @ui.error)
81
+ assert_match(/WARNING: It is recommended that you use `gem search` or `gem list` instead/, @ui.error)
82
+ end
83
+
84
+ def test_info_succeeds
85
+ args = %w[info]
86
+
87
+ use_ui @ui do
88
+ @runner.run(args)
89
+ end
90
+
91
+ assert_empty @ui.error
92
+ end
93
+
94
+ def test_list_succeeds
95
+ args = %w[list]
96
+
97
+ use_ui @ui do
98
+ @runner.run(args)
99
+ end
100
+
101
+ assert_empty @ui.error
102
+ end
103
+
104
+ def test_search_succeeds
105
+ args = %w[search]
106
+
107
+ use_ui @ui do
108
+ @runner.run(args)
109
+ end
110
+
111
+ assert_empty @ui.error
112
+ end
70
113
  end
@@ -5,9 +5,11 @@ require 'rubygems/command'
5
5
  require 'rubygems/gemcutter_utilities'
6
6
 
7
7
  class TestGemGemcutterUtilities < Gem::TestCase
8
-
9
8
  def setup
10
9
  super
10
+
11
+ credential_setup
12
+
11
13
  # below needed for random testing, class property
12
14
  Gem.configuration.disable_default_gem_server = nil
13
15
 
@@ -22,13 +24,15 @@ class TestGemGemcutterUtilities < Gem::TestCase
22
24
  ENV['RUBYGEMS_HOST'] = nil
23
25
  Gem.configuration.rubygems_api_key = nil
24
26
 
27
+ credential_teardown
28
+
25
29
  super
26
30
  end
27
31
 
28
32
  def test_alternate_key_alternate_host
29
33
  keys = {
30
34
  :rubygems_api_key => 'KEY',
31
- "http://rubygems.engineyard.com" => "EYKEY"
35
+ "http://rubygems.engineyard.com" => "EYKEY",
32
36
  }
33
37
 
34
38
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -198,7 +202,7 @@ class TestGemGemcutterUtilities < Gem::TestCase
198
202
 
199
203
  assert_match 'You have enabled multi-factor authentication. Please enter OTP code.', @sign_in_ui.output
200
204
  assert_match 'Code: ', @sign_in_ui.output
201
- assert_match 'Signed in.', @sign_in_ui.output
205
+ assert_match 'Signed in with API key:', @sign_in_ui.output
202
206
  assert_equal '111111', @fetcher.last_request['OTP']
203
207
  end
204
208
 
@@ -229,7 +233,7 @@ class TestGemGemcutterUtilities < Gem::TestCase
229
233
  @fetcher.data["#{host}/api/v1/api_key"] = response
230
234
  Gem::RemoteFetcher.fetcher = @fetcher
231
235
 
232
- @sign_in_ui = Gem::MockGemUi.new("#{email}\n#{password}\n" + extra_input)
236
+ @sign_in_ui = Gem::MockGemUi.new("#{email}\n#{password}\n\n\n\n\n\n\n\n\n" + extra_input)
233
237
 
234
238
  use_ui @sign_in_ui do
235
239
  if args.length > 0
@@ -257,5 +261,4 @@ class TestGemGemcutterUtilities < Gem::TestCase
257
261
  @cmd.verify_api_key :missing
258
262
  end
259
263
  end
260
-
261
264
  end
@@ -2,7 +2,6 @@
2
2
  require 'rubygems/test_case'
3
3
 
4
4
  class TestGemImpossibleDependenciesError < Gem::TestCase
5
-
6
5
  def test_message_conflict
7
6
  request = dependency_request dep('net-ssh', '>= 2.0.13'), 'rye', '0.9.8'
8
7
 
@@ -57,5 +56,4 @@ rye-0.9.8 requires net-ssh (>= 2.0.13) but it conflicted:
57
56
 
58
57
  assert_equal expected, error.message
59
58
  end
60
-
61
59
  end
@@ -2,12 +2,7 @@
2
2
  require 'rubygems/test_case'
3
3
  require 'rubygems/indexer'
4
4
 
5
- unless defined?(Builder::XChar)
6
- warn "Gem::Indexer tests are being skipped. Install builder gem."
7
- end
8
-
9
5
  class TestGemIndexer < Gem::TestCase
10
-
11
6
  def setup
12
7
  super
13
8
 
@@ -189,15 +184,15 @@ class TestGemIndexer < Gem::TestCase
189
184
  @indexer.generate_index
190
185
  end
191
186
 
192
- assert_match %r%^\.\.\.\.\.\.\.\.\.\.\.\.$%, @ui.output
193
- assert_match %r%^Generating Marshal quick index gemspecs for 12 gems$%,
187
+ assert_match %r{^\.\.\.\.\.\.\.\.\.\.\.\.$}, @ui.output
188
+ assert_match %r{^Generating Marshal quick index gemspecs for 12 gems$},
194
189
  @ui.output
195
- assert_match %r%^Complete$%, @ui.output
196
- assert_match %r%^Generating specs index$%, @ui.output
197
- assert_match %r%^Generating latest specs index$%, @ui.output
198
- assert_match %r%^Generating prerelease specs index$%, @ui.output
199
- assert_match %r%^Complete$%, @ui.output
200
- assert_match %r%^Compressing indices$%, @ui.output
190
+ assert_match %r{^Complete$}, @ui.output
191
+ assert_match %r{^Generating specs index$}, @ui.output
192
+ assert_match %r{^Generating latest specs index$}, @ui.output
193
+ assert_match %r{^Generating prerelease specs index$}, @ui.output
194
+ assert_match %r{^Complete$}, @ui.output
195
+ assert_match %r{^Compressing indices$}, @ui.output
201
196
 
202
197
  assert_equal '', @ui.error
203
198
  end
@@ -359,5 +354,4 @@ class TestGemIndexer < Gem::TestCase
359
354
  file = File.join dir, name
360
355
  refute File.exist?(file), "#{file} exists"
361
356
  end
362
-
363
- end if defined?(Builder::XChar)
357
+ end
@@ -5,7 +5,6 @@ require 'rubygems/command'
5
5
  require 'rubygems/dependency_installer'
6
6
 
7
7
  class TestGemInstallUpdateOptions < Gem::InstallerTestCase
8
-
9
8
  def setup
10
9
  super
11
10
 
@@ -31,7 +30,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
31
30
 
32
31
  args.concat %w[--vendor] unless Gem.java_platform?
33
32
 
34
- args.concat %w[-P HighSecurity] if defined?(OpenSSL::SSL)
33
+ args.concat %w[-P HighSecurity] if Gem::HAVE_OPENSSL
35
34
 
36
35
  assert @cmd.handles?(args)
37
36
  end
@@ -93,7 +92,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
93
92
  end
94
93
 
95
94
  def test_security_policy
96
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
95
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
97
96
 
98
97
  @cmd.handle_options %w[-P HighSecurity]
99
98
 
@@ -101,7 +100,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
101
100
  end
102
101
 
103
102
  def test_security_policy_unknown
104
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
103
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
105
104
 
106
105
  @cmd.add_install_update_options
107
106
 
@@ -194,4 +193,15 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
194
193
  assert_equal true, @cmd.options[:post_install_message]
195
194
  end
196
195
 
196
+ def test_minimal_deps_no
197
+ @cmd.handle_options %w[--no-minimal-deps]
198
+
199
+ assert_equal false, @cmd.options[:minimal_deps]
200
+ end
201
+
202
+ def test_minimal_deps
203
+ @cmd.handle_options %w[--minimal-deps]
204
+
205
+ assert_equal true, @cmd.options[:minimal_deps]
206
+ end
197
207
  end
@@ -2,25 +2,6 @@
2
2
  require 'rubygems/installer_test_case'
3
3
 
4
4
  class TestGemInstaller < Gem::InstallerTestCase
5
-
6
- @@symlink_supported = nil
7
-
8
- # Our CI does not currently hit the "symlink not supported" case, but this is
9
- # needed for Windows developers without symlink support enabled (the default
10
- # for non admin) to be able to run the tests successfully
11
- def symlink_supported?
12
- if @@symlink_supported.nil?
13
- begin
14
- File.symlink("", "")
15
- rescue Errno::ENOENT, Errno::EEXIST
16
- @@symlink_supported = true
17
- rescue NotImplementedError, SystemCallError
18
- @@symlink_supported = false
19
- end
20
- end
21
- @@symlink_supported
22
- end
23
-
24
5
  def setup
25
6
  super
26
7
  common_installer_setup
@@ -98,11 +79,11 @@ end
98
79
  assert_path_exists installed_exec
99
80
 
100
81
  wrapper = File.read installed_exec
101
- assert_match %r|generated by RubyGems|, wrapper
82
+ assert_match %r{generated by RubyGems}, wrapper
102
83
  end
103
84
 
104
85
  def test_check_executable_overwrite_default_bin_dir
105
- installer = setup_base_installer
86
+ installer = setup_base_installer(false)
106
87
 
107
88
  bindir(Gem.bindir) do
108
89
  util_conflict_executable false
@@ -114,7 +95,7 @@ end
114
95
  end
115
96
 
116
97
  conflicted = File.join @gemhome, 'bin', 'executable'
117
- assert_match %r%\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z%,
98
+ assert_match %r{\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z},
118
99
  e.message
119
100
  end
120
101
  end
@@ -156,13 +137,13 @@ gem 'other', version
156
137
  assert_path_exists installed_exec
157
138
 
158
139
  wrapper = File.read installed_exec
159
- assert_match %r|generated by RubyGems|, wrapper
140
+ assert_match %r{generated by RubyGems}, wrapper
160
141
  ensure
161
142
  Gem::Installer.exec_format = nil
162
143
  end
163
144
 
164
145
  def test_check_executable_overwrite_other_gem
165
- installer = setup_base_installer
146
+ installer = setup_base_installer(false)
166
147
 
167
148
  util_conflict_executable true
168
149
 
@@ -191,7 +172,7 @@ gem 'other', version
191
172
  assert_path_exists installed_exec
192
173
 
193
174
  wrapper = File.read installed_exec
194
- assert_match %r|generated by RubyGems|, wrapper
175
+ assert_match %r{generated by RubyGems}, wrapper
195
176
  end
196
177
 
197
178
  def test_check_executable_overwrite_other_non_gem
@@ -206,7 +187,7 @@ gem 'other', version
206
187
  assert_path_exists installed_exec
207
188
 
208
189
  wrapper = File.read installed_exec
209
- assert_match %r|generated by RubyGems|, wrapper
190
+ assert_match %r{generated by RubyGems}, wrapper
210
191
  end unless Gem.win_platform?
211
192
 
212
193
  def test_check_that_user_bin_dir_is_in_path
@@ -215,7 +196,7 @@ gem 'other', version
215
196
  bin_dir = installer.bin_dir
216
197
 
217
198
  if Gem.win_platform?
218
- bin_dir = bin_dir.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
199
+ bin_dir = bin_dir.downcase
219
200
  end
220
201
 
221
202
  orig_PATH, ENV['PATH'] =
@@ -226,6 +207,16 @@ gem 'other', version
226
207
  end
227
208
 
228
209
  assert_empty @ui.error
210
+
211
+ return unless win_platform?
212
+
213
+ ENV['PATH'] = [orig_PATH, bin_dir.tr(File::SEPARATOR, File::ALT_SEPARATOR)].join(File::PATH_SEPARATOR)
214
+
215
+ use_ui @ui do
216
+ installer.check_that_user_bin_dir_is_in_path
217
+ end
218
+
219
+ assert_empty @ui.error
229
220
  ensure
230
221
  ENV['PATH'] = orig_PATH
231
222
  end
@@ -258,7 +249,7 @@ gem 'other', version
258
249
  expected = installer.bin_dir
259
250
 
260
251
  if Gem.win_platform?
261
- expected = expected.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
252
+ expected = expected.downcase
262
253
  end
263
254
 
264
255
  assert_match expected, @ui.error
@@ -296,7 +287,7 @@ gem 'other', version
296
287
  end
297
288
 
298
289
  def test_ensure_loadable_spec_security_policy
299
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
290
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
300
291
 
301
292
  _, a_gem = util_gem 'a', 2 do |s|
302
293
  s.add_dependency 'garbage ~> 5'
@@ -342,7 +333,7 @@ gem 'other', version
342
333
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
343
334
 
344
335
  wrapper = File.read installed_exec
345
- assert_match %r|generated by RubyGems|, wrapper
336
+ assert_match %r{generated by RubyGems}, wrapper
346
337
  end
347
338
 
348
339
  def test_generate_bin_bindir_with_user_install_warning
@@ -354,7 +345,7 @@ gem 'other', version
354
345
 
355
346
  options = {
356
347
  :bin_dir => bin_dir,
357
- :install_dir => "/non/existent"
348
+ :install_dir => "/non/existent",
358
349
  }
359
350
 
360
351
  inst = Gem::Installer.at '', options
@@ -385,7 +376,7 @@ gem 'other', version
385
376
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
386
377
 
387
378
  wrapper = File.read installed_exec
388
- assert_match %r|generated by RubyGems|, wrapper
379
+ assert_match %r{generated by RubyGems}, wrapper
389
380
  end
390
381
 
391
382
  def test_generate_bin_script_format
@@ -444,7 +435,7 @@ gem 'other', version
444
435
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
445
436
 
446
437
  wrapper = File.read installed_exec
447
- assert_match %r|generated by RubyGems|, wrapper
438
+ assert_match %r{generated by RubyGems}, wrapper
448
439
  end
449
440
 
450
441
  def test_generate_bin_script_no_execs
@@ -501,7 +492,7 @@ gem 'other', version
501
492
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
502
493
 
503
494
  wrapper = File.read installed_exec
504
- assert_match %r|generated by RubyGems|, wrapper
495
+ assert_match %r{generated by RubyGems}, wrapper
505
496
  # HACK some gems don't have #! in their executables, restore 2008/06
506
497
  #assert_no_match %r|generated by RubyGems|, wrapper
507
498
  end
@@ -527,9 +518,9 @@ gem 'other', version
527
518
  assert_path_exists installed_exec
528
519
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
529
520
 
530
- assert_match %r|generated by RubyGems|, File.read(installed_exec)
521
+ assert_match %r{generated by RubyGems}, File.read(installed_exec)
531
522
 
532
- refute_match %r|generated by RubyGems|, File.read(real_exec),
523
+ refute_match %r{generated by RubyGems}, File.read(real_exec),
533
524
  'real executable overwritten'
534
525
  end
535
526
 
@@ -739,11 +730,152 @@ gem 'other', version
739
730
  installer.generate_bin
740
731
 
741
732
  default_shebang = Gem.ruby
742
- shebang_line = open("#{@gemhome}/bin/executable") { |f| f.readlines.first }
733
+ shebang_line = open("#{@gemhome}/bin/executable") {|f| f.readlines.first }
743
734
  assert_match(/\A#!/, shebang_line)
744
735
  assert_match(/#{default_shebang}/, shebang_line)
745
736
  end
746
737
 
738
+ def test_generate_plugins
739
+ installer = util_setup_installer do |spec|
740
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
741
+ io.write "puts __FILE__"
742
+ end
743
+
744
+ spec.files += %w[lib/rubygems_plugin.rb]
745
+ end
746
+
747
+ build_rake_in do
748
+ installer.install
749
+ end
750
+
751
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
752
+
753
+ FileUtils.rm plugin_path
754
+
755
+ installer.generate_plugins
756
+
757
+ assert File.exist?(plugin_path), 'plugin not written'
758
+ end
759
+
760
+ def test_generate_plugins_with_install_dir
761
+ spec = quick_gem 'a' do |s|
762
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
763
+ io.write "puts __FILE__"
764
+ end
765
+
766
+ s.files += %w[lib/rubygems_plugin.rb]
767
+ end
768
+
769
+ util_build_gem spec
770
+
771
+ plugin_path = File.join "#{@gemhome}2", 'plugins', 'a_plugin.rb'
772
+ installer = util_installer spec, "#{@gemhome}2"
773
+
774
+ assert_equal spec, installer.install
775
+
776
+ assert File.exist?(plugin_path), 'plugin not written to install_dir'
777
+ end
778
+
779
+ def test_generate_plugins_with_user_install
780
+ spec = quick_gem 'a' do |s|
781
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
782
+ io.write "puts __FILE__"
783
+ end
784
+
785
+ s.files += %w[lib/rubygems_plugin.rb]
786
+ end
787
+
788
+ util_build_gem spec
789
+
790
+ File.chmod(0555, Gem.plugindir)
791
+ system_path = File.join(Gem.plugindir, 'a_plugin.rb')
792
+ user_path = File.join(Gem.plugindir(Gem.user_dir), 'a_plugin.rb')
793
+ installer = util_installer spec, Gem.dir, :user
794
+
795
+ assert_equal spec, installer.install
796
+
797
+ assert !File.exist?(system_path), 'plugin incorrectly written to system plugins_dir'
798
+ assert File.exist?(user_path), 'plugin not written to user plugins_dir'
799
+ end
800
+
801
+ def test_generate_plugins_with_build_root
802
+ spec = quick_gem 'a' do |s|
803
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
804
+ io.write "puts __FILE__"
805
+ end
806
+
807
+ s.files += %w[lib/rubygems_plugin.rb]
808
+ end
809
+
810
+ util_build_gem spec
811
+
812
+ File.chmod(0555, Gem.plugindir)
813
+ system_path = File.join(Gem.plugindir, 'a_plugin.rb')
814
+
815
+ build_root = File.join(@tempdir, 'build_root')
816
+ build_root_path = File.join(build_root, Gem.plugindir.gsub(/^[a-zA-Z]:/, ''), 'a_plugin.rb')
817
+
818
+ installer = Gem::Installer.at spec.cache_file, :build_root => build_root
819
+
820
+ assert_equal spec, installer.install
821
+
822
+ assert !File.exist?(system_path), 'plugin written incorrect written to system plugins_dir'
823
+ assert File.exist?(build_root_path), 'plugin not written to build_root'
824
+ end
825
+
826
+ def test_keeps_plugins_up_to_date
827
+ # NOTE: version a-2 is already installed by setup hooks
828
+
829
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
830
+ io.write "puts __FILE__"
831
+ end
832
+
833
+ build_rake_in do
834
+ util_setup_installer do |spec|
835
+ spec.version = '1'
836
+ spec.files += %w[lib/rubygems_plugin.rb]
837
+ end.install
838
+
839
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
840
+ refute File.exist?(plugin_path), 'old version installed while newer version without plugin also installed, but plugin written'
841
+
842
+ util_setup_installer do |spec|
843
+ spec.version = '2'
844
+ spec.files += %w[lib/rubygems_plugin.rb]
845
+ end.install
846
+
847
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
848
+ assert File.exist?(plugin_path), 'latest version reinstalled, but plugin not written'
849
+ assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
850
+
851
+ util_setup_installer do |spec|
852
+ spec.version = '3'
853
+ spec.files += %w[lib/rubygems_plugin.rb]
854
+ end.install
855
+
856
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
857
+ assert File.exist?(plugin_path), 'latest version installed, but plugin removed'
858
+ assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
859
+
860
+ util_setup_installer do |spec|
861
+ spec.version = '4'
862
+ end.install
863
+
864
+ refute File.exist?(plugin_path), 'new version installed without a plugin while older version with a plugin installed, but plugin not removed'
865
+ end
866
+ end
867
+
868
+ def test_generates_plugins_dir_under_install_dir_if_not_there
869
+ Gem.use_paths "#{@gemhome}2" # Set GEM_HOME to an uninitialized repo
870
+
871
+ @spec = util_spec 'a'
872
+
873
+ path = Gem::Package.build @spec
874
+
875
+ installer = Gem::Installer.at path, :install_dir => "#{@gemhome}3"
876
+ assert_equal @spec, installer.install
877
+ end
878
+
747
879
  def test_initialize
748
880
  spec = util_spec 'a' do |s|
749
881
  s.platform = Gem::Platform.new 'mswin32'
@@ -940,7 +1072,13 @@ gem 'other', version
940
1072
  end
941
1073
 
942
1074
  def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
943
- install_default_gems new_default_spec('default', '2')
1075
+ default_spec = new_default_spec('default', '2', nil, 'exe/executable')
1076
+ default_spec.executables = 'executable'
1077
+ install_default_gems default_spec
1078
+
1079
+ exe = File.join @gemhome, 'bin', 'executable'
1080
+
1081
+ assert_path_exists exe, "default gem's executable not installed"
944
1082
 
945
1083
  installer = util_setup_installer do |spec|
946
1084
  spec.name = 'default'
@@ -958,8 +1096,6 @@ gem 'other', version
958
1096
  end
959
1097
  end
960
1098
 
961
- exe = File.join @gemhome, 'bin', 'executable'
962
-
963
1099
  e = assert_raises RuntimeError do
964
1100
  instance_eval File.read(exe)
965
1101
  end
@@ -1023,7 +1159,7 @@ gem 'other', version
1023
1159
  Gem::Package.build @spec
1024
1160
  end
1025
1161
  end
1026
- installer = Gem::Installer.at @gem
1162
+ installer = Gem::Installer.at @gem, :force => true
1027
1163
  build_rake_in do
1028
1164
  use_ui @ui do
1029
1165
  assert_equal @spec, installer.install
@@ -1036,15 +1172,28 @@ gem 'other', version
1036
1172
  end
1037
1173
 
1038
1174
  def test_install_force
1175
+ _, missing_dep_gem = util_gem 'missing_dep', '1' do |s|
1176
+ s.add_dependency 'doesnt_exist', '1'
1177
+ end
1178
+
1039
1179
  use_ui @ui do
1040
- installer = Gem::Installer.at old_ruby_required('= 1.4.6'), :force => true
1180
+ installer = Gem::Installer.at missing_dep_gem, :force => true
1041
1181
  installer.install
1042
1182
  end
1043
1183
 
1044
- gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1')
1184
+ gem_dir = File.join(@gemhome, 'gems', 'missing_dep-1')
1045
1185
  assert_path_exists gem_dir
1046
1186
  end
1047
1187
 
1188
+ def test_install_build_root
1189
+ build_root = File.join(@tempdir, 'build_root')
1190
+
1191
+ @gem = setup_base_gem
1192
+ installer = Gem::Installer.at @gem, :build_root => build_root
1193
+
1194
+ assert_equal @spec, installer.install
1195
+ end
1196
+
1048
1197
  def test_install_missing_dirs
1049
1198
  installer = setup_base_installer
1050
1199
 
@@ -1153,7 +1302,7 @@ gem 'other', version
1153
1302
  installer.install
1154
1303
  end
1155
1304
 
1156
- assert_match %r|I am a shiny gem!|, @ui.output
1305
+ assert_match %r{I am a shiny gem!}, @ui.output
1157
1306
  end
1158
1307
 
1159
1308
  def test_install_with_skipped_message
@@ -1167,7 +1316,7 @@ gem 'other', version
1167
1316
  installer.install
1168
1317
  end
1169
1318
 
1170
- refute_match %r|I am a shiny gem!|, @ui.output
1319
+ refute_match %r{I am a shiny gem!}, @ui.output
1171
1320
  end
1172
1321
 
1173
1322
  def test_install_extension_dir
@@ -1226,7 +1375,7 @@ gem 'other', version
1226
1375
 
1227
1376
  # reinstall the gem, this is also the same as pristine
1228
1377
  use_ui @ui do
1229
- installer = Gem::Installer.at path
1378
+ installer = Gem::Installer.at path, :force => true
1230
1379
  installer.install
1231
1380
  end
1232
1381
 
@@ -1303,7 +1452,7 @@ gem 'other', version
1303
1452
  installer.install
1304
1453
  end
1305
1454
 
1306
- expected = File.join @spec.full_require_paths.find { |path|
1455
+ expected = File.join @spec.full_require_paths.find {|path|
1307
1456
  File.exist? File.join path, 'b.rb'
1308
1457
  }, 'b.rb'
1309
1458
  assert_equal expected, @spec.matches_for_glob('b.rb').first
@@ -1371,7 +1520,7 @@ gem 'other', version
1371
1520
  end
1372
1521
 
1373
1522
  # empty depend file for no auto dependencies
1374
- @spec.files += %W"depend #{@spec.name}.c".each do |file|
1523
+ @spec.files += %W[depend #{@spec.name}.c].each do |file|
1375
1524
  write_file File.join(@tempdir, file)
1376
1525
  end
1377
1526
 
@@ -1426,6 +1575,7 @@ gem 'other', version
1426
1575
  installer = setup_base_installer
1427
1576
  @spec.add_dependency 'b', '> 5'
1428
1577
  installer = util_setup_gem
1578
+ installer.force = false
1429
1579
 
1430
1580
  use_ui @ui do
1431
1581
  assert_raises Gem::InstallError do
@@ -1474,54 +1624,6 @@ gem 'other', version
1474
1624
  end
1475
1625
  end
1476
1626
 
1477
- def test_pre_install_checks_ruby_version
1478
- use_ui @ui do
1479
- installer = Gem::Installer.at old_ruby_required('= 1.4.6')
1480
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1481
- installer.pre_install_checks
1482
- end
1483
- rv = Gem.ruby_version
1484
- assert_equal "old_ruby_required requires Ruby version = 1.4.6. The current ruby version is #{rv}.",
1485
- e.message
1486
- end
1487
- end
1488
-
1489
- def test_pre_install_checks_ruby_version_with_prereleases
1490
- util_set_RUBY_VERSION '2.6.0', -1, '63539', 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
1491
-
1492
- installer = Gem::Installer.at old_ruby_required('>= 2.6.0.preview2')
1493
- assert installer.pre_install_checks
1494
-
1495
- installer = Gem::Installer.at old_ruby_required('> 2.6.0.preview2')
1496
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1497
- assert installer.pre_install_checks
1498
- end
1499
- assert_equal "old_ruby_required requires Ruby version > 2.6.0.preview2. The current ruby version is 2.6.0.preview2.",
1500
- e.message
1501
- ensure
1502
- util_restore_RUBY_VERSION
1503
- end
1504
-
1505
- def test_pre_install_checks_wrong_rubygems_version
1506
- spec = util_spec 'old_rubygems_required', '1' do |s|
1507
- s.required_rubygems_version = '< 0'
1508
- end
1509
-
1510
- util_build_gem spec
1511
-
1512
- gem = File.join(@gemhome, 'cache', spec.file_name)
1513
-
1514
- use_ui @ui do
1515
- installer = Gem::Installer.at gem
1516
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1517
- installer.pre_install_checks
1518
- end
1519
- rgv = Gem::VERSION
1520
- assert_equal "old_rubygems_required requires RubyGems version < 0. The current RubyGems version is #{rgv}. " +
1521
- "Try 'gem update --system' to update RubyGems itself.", e.message
1522
- end
1523
- end
1524
-
1525
1627
  def test_pre_install_checks_malicious_name
1526
1628
  spec = util_spec '../malicious', '1'
1527
1629
  def spec.full_name # so the spec is buildable
@@ -1670,13 +1772,24 @@ gem 'other', version
1670
1772
 
1671
1773
  def test_process_options_build_root
1672
1774
  build_root = File.join @tempdir, 'build_root'
1775
+ bin_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'bin')
1776
+ gem_home = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''))
1777
+ plugins_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'plugins')
1673
1778
 
1674
1779
  @gem = setup_base_gem
1675
- installer = Gem::Installer.at @gem, :build_root => build_root
1780
+ installer = use_ui(@ui) { Gem::Installer.at @gem, :build_root => build_root }
1781
+
1782
+ assert_equal build_root, installer.build_root
1783
+ assert_equal bin_dir, installer.bin_dir
1784
+ assert_equal gem_home, installer.gem_home
1676
1785
 
1677
- assert_equal Pathname(build_root), installer.build_root
1678
- assert_equal File.join(build_root, @gemhome, 'bin'), installer.bin_dir
1679
- assert_equal File.join(build_root, @gemhome), installer.gem_home
1786
+ errors = @ui.error.split("\n")
1787
+
1788
+ assert_equal "WARNING: You build with buildroot.", errors.shift
1789
+ assert_equal " Build root: #{build_root}", errors.shift
1790
+ assert_equal " Bin dir: #{bin_dir}", errors.shift
1791
+ assert_equal " Gem home: #{gem_home}", errors.shift
1792
+ assert_equal " Plugins dir: #{plugins_dir}", errors.shift
1680
1793
  end
1681
1794
 
1682
1795
  def test_shebang_arguments
@@ -1726,9 +1839,9 @@ gem 'other', version
1726
1839
 
1727
1840
  shebang = installer.shebang 'executable'
1728
1841
 
1729
- env_shebang = "/usr/bin/env" unless Gem.win_platform?
1842
+ bin_env = get_bin_env
1730
1843
 
1731
- assert_equal("#!#{env_shebang} #{RbConfig::CONFIG['ruby_install_name']}",
1844
+ assert_equal("#!#{bin_env} #{RbConfig::CONFIG['ruby_install_name']}",
1732
1845
  shebang)
1733
1846
  end
1734
1847
 
@@ -1807,10 +1920,18 @@ gem 'other', version
1807
1920
  assert_equal "#!test", shebang
1808
1921
  end
1809
1922
 
1923
+ def get_bin_env
1924
+ if win_platform?
1925
+ ""
1926
+ else
1927
+ %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) }
1928
+ end
1929
+ end
1930
+
1810
1931
  def test_shebang_custom_with_expands
1811
1932
  installer = setup_base_installer
1812
1933
 
1813
- bin_env = win_platform? ? '' : '/usr/bin/env'
1934
+ bin_env = get_bin_env
1814
1935
  conf = Gem::ConfigFile.new []
1815
1936
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
1816
1937
 
@@ -1826,7 +1947,7 @@ gem 'other', version
1826
1947
  def test_shebang_custom_with_expands_and_arguments
1827
1948
  installer = setup_base_installer
1828
1949
 
1829
- bin_env = win_platform? ? '' : '/usr/bin/env'
1950
+ bin_env = get_bin_env
1830
1951
  conf = Gem::ConfigFile.new []
1831
1952
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
1832
1953
 
@@ -1951,7 +2072,7 @@ gem 'other', version
1951
2072
  def test_dir
1952
2073
  installer = setup_base_installer
1953
2074
 
1954
- assert_match %r!/gemhome/gems/a-2$!, installer.dir
2075
+ assert_match %r{/gemhome/gems/a-2$}, installer.dir
1955
2076
  end
1956
2077
 
1957
2078
  def test_default_gem_loaded_from
@@ -1991,7 +2112,13 @@ gem 'other', version
1991
2112
  assert_path_exists installed_exec
1992
2113
 
1993
2114
  wrapper = File.read installed_exec
1994
- refute_match %r|generated by RubyGems|, wrapper
2115
+
2116
+ if symlink_supported?
2117
+ refute_match %r{generated by RubyGems}, wrapper
2118
+ else # when symlink not supported, it warns and fallbacks back to installing wrapper
2119
+ assert_match %r{Unable to use symlinks, installing wrapper}, @ui.error
2120
+ assert_match %r{generated by RubyGems}, wrapper
2121
+ end
1995
2122
  end
1996
2123
 
1997
2124
  def test_default_gem_with_wrappers
@@ -2011,7 +2138,7 @@ gem 'other', version
2011
2138
  assert_path_exists installed_exec
2012
2139
 
2013
2140
  wrapper = File.read installed_exec
2014
- assert_match %r|generated by RubyGems|, wrapper
2141
+ assert_match %r{generated by RubyGems}, wrapper
2015
2142
  end
2016
2143
 
2017
2144
  def test_default_gem_with_exe_as_bindir
@@ -2044,6 +2171,23 @@ gem 'other', version
2044
2171
  assert_equal ['exe/executable'], default_spec.files
2045
2172
  end
2046
2173
 
2174
+ def test_default_gem_to_specific_install_dir
2175
+ @gem = setup_base_gem
2176
+ installer = util_installer @spec, "#{@gemhome}2"
2177
+ installer.options[:install_as_default] = true
2178
+
2179
+ use_ui @ui do
2180
+ installer.install
2181
+ end
2182
+
2183
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications')
2184
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications', 'default')
2185
+
2186
+ default_spec = eval File.read File.join("#{@gemhome}2", 'specifications', 'default', 'a-2.gemspec')
2187
+ assert_equal Gem::Version.new("2"), default_spec.version
2188
+ assert_equal ['bin/executable'], default_spec.files
2189
+ end
2190
+
2047
2191
  def test_package_attribute
2048
2192
  gem = quick_gem 'c' do |spec|
2049
2193
  util_make_exec spec, '#!/usr/bin/ruby', 'exe'
@@ -2054,14 +2198,14 @@ gem 'other', version
2054
2198
  assert_kind_of(Gem::Package, installer.package)
2055
2199
  end
2056
2200
 
2057
- def old_ruby_required(requirement)
2058
- spec = util_spec 'old_ruby_required', '1' do |s|
2059
- s.required_ruby_version = requirement
2201
+ def test_gem_attribute
2202
+ gem = quick_gem 'c' do |spec|
2203
+ util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2060
2204
  end
2061
2205
 
2062
- util_build_gem spec
2063
-
2064
- spec.cache_file
2206
+ installer = util_installer(gem, @gemhome)
2207
+ assert_respond_to(installer, :gem)
2208
+ assert_kind_of(String, installer.gem)
2065
2209
  end
2066
2210
 
2067
2211
  def util_execless
@@ -2084,7 +2228,6 @@ gem 'other', version
2084
2228
  end
2085
2229
 
2086
2230
  def mask
2087
- 0100755 & (~File.umask)
2231
+ 0100755
2088
2232
  end
2089
-
2090
2233
  end