rubygems-update 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) 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 +435 -179
  5. data/Manifest.txt +44 -77
  6. data/POLICIES.md +2 -9
  7. data/README.md +5 -5
  8. data/Rakefile +50 -83
  9. data/bin/update_rubygems +2 -2
  10. data/bundler/CHANGELOG.md +1590 -1400
  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 +25 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +56 -20
  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 +7 -16
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +75 -11
  28. data/bundler/lib/bundler/cli/info.rb +8 -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 +12 -18
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +1 -1
  34. data/bundler/lib/bundler/cli/outdated.rb +2 -4
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  37. data/bundler/lib/bundler/cli/show.rb +1 -1
  38. data/bundler/lib/bundler/cli/update.rb +2 -0
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  41. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  42. data/bundler/lib/bundler/definition.rb +47 -61
  43. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  44. data/bundler/lib/bundler/dependency.rb +0 -9
  45. data/bundler/lib/bundler/dsl.rb +5 -9
  46. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  47. data/bundler/lib/bundler/env.rb +1 -1
  48. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  49. data/bundler/lib/bundler/errors.rb +1 -0
  50. data/bundler/lib/bundler/feature_flag.rb +0 -3
  51. data/bundler/lib/bundler/fetcher.rb +4 -3
  52. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  53. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  56. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  57. data/bundler/lib/bundler/gem_helper.rb +33 -19
  58. data/bundler/lib/bundler/gem_helpers.rb +6 -1
  59. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  60. data/bundler/lib/bundler/graph.rb +1 -1
  61. data/bundler/lib/bundler/index.rb +6 -2
  62. data/bundler/lib/bundler/injector.rb +22 -4
  63. data/bundler/lib/bundler/inline.rb +2 -2
  64. data/bundler/lib/bundler/installer.rb +35 -32
  65. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  66. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  67. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  68. data/bundler/lib/bundler/lazy_specification.rb +20 -9
  69. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  70. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  71. data/bundler/lib/bundler/man/.document +1 -0
  72. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  73. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  74. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  75. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  76. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  77. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  78. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  79. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  80. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  81. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  82. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  83. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  84. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  85. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +0 -0
  86. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  87. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  88. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  89. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  90. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  91. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  92. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  93. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  94. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  95. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  96. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  97. data/bundler/lib/bundler/mirror.rb +2 -2
  98. data/bundler/lib/bundler/plugin.rb +30 -5
  99. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  100. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  101. data/bundler/lib/bundler/plugin/index.rb +10 -1
  102. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  103. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  104. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  105. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  106. data/bundler/lib/bundler/remote_specification.rb +5 -2
  107. data/bundler/lib/bundler/resolver.rb +32 -10
  108. data/bundler/lib/bundler/resolver/spec_group.rb +27 -6
  109. data/bundler/lib/bundler/retry.rb +1 -1
  110. data/bundler/lib/bundler/ruby_version.rb +1 -1
  111. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  112. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  113. data/bundler/lib/bundler/rubygems_integration.rb +35 -25
  114. data/bundler/lib/bundler/runtime.rb +4 -14
  115. data/bundler/lib/bundler/settings.rb +49 -46
  116. data/bundler/lib/bundler/setup.rb +5 -0
  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 +1 -1
  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 +2 -1
  128. data/bundler/lib/bundler/stub_specification.rb +17 -5
  129. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  130. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +7 -2
  131. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  132. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -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 +13 -5
  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 +72 -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 +1 -1
  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 -3
  216. data/lib/rubygems/commands/pristine_command.rb +11 -5
  217. data/lib/rubygems/commands/push_command.rb +10 -46
  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 +158 -70
  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 -6
  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 +5 -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 +3 -5
  251. data/lib/rubygems/gem_runner.rb +3 -10
  252. data/lib/rubygems/gemcutter_utilities.rb +91 -15
  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 -57
  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 +10 -27
  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 +5 -7
  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 +8 -11
  290. data/lib/rubygems/resolver/activation_request.rb +9 -3
  291. data/lib/rubygems/resolver/api_set.rb +4 -6
  292. data/lib/rubygems/resolver/api_specification.rb +21 -8
  293. data/lib/rubygems/resolver/best_set.rb +0 -2
  294. data/lib/rubygems/resolver/composed_set.rb +3 -5
  295. data/lib/rubygems/resolver/conflict.rb +2 -4
  296. data/lib/rubygems/resolver/current_set.rb +0 -2
  297. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  298. data/lib/rubygems/resolver/git_set.rb +0 -2
  299. data/lib/rubygems/resolver/git_specification.rb +0 -2
  300. data/lib/rubygems/resolver/index_set.rb +1 -3
  301. data/lib/rubygems/resolver/index_specification.rb +11 -2
  302. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  303. data/lib/rubygems/resolver/installer_set.rb +4 -7
  304. data/lib/rubygems/resolver/local_specification.rb +0 -2
  305. data/lib/rubygems/resolver/lock_set.rb +2 -4
  306. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  307. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  308. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  327. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  328. data/lib/rubygems/resolver/set.rb +0 -2
  329. data/lib/rubygems/resolver/source_set.rb +0 -2
  330. data/lib/rubygems/resolver/spec_specification.rb +0 -2
  331. data/lib/rubygems/resolver/specification.rb +1 -3
  332. data/lib/rubygems/resolver/stats.rb +0 -2
  333. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  334. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  335. data/lib/rubygems/s3_uri_signer.rb +2 -8
  336. data/lib/rubygems/safe_yaml.rb +4 -4
  337. data/lib/rubygems/security.rb +27 -34
  338. data/lib/rubygems/security/policy.rb +4 -8
  339. data/lib/rubygems/security/signer.rb +5 -7
  340. data/lib/rubygems/security/trust_dir.rb +1 -3
  341. data/lib/rubygems/server.rb +10 -12
  342. data/lib/rubygems/source.rb +13 -7
  343. data/lib/rubygems/source/git.rb +7 -8
  344. data/lib/rubygems/source/installed.rb +0 -2
  345. data/lib/rubygems/source/local.rb +2 -4
  346. data/lib/rubygems/source/lock.rb +0 -2
  347. data/lib/rubygems/source/specific_file.rb +0 -2
  348. data/lib/rubygems/source/vendor.rb +0 -2
  349. data/lib/rubygems/source_list.rb +6 -7
  350. data/lib/rubygems/spec_fetcher.rb +19 -18
  351. data/lib/rubygems/specification.rb +113 -126
  352. data/lib/rubygems/specification_policy.rb +88 -30
  353. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  354. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  355. data/lib/rubygems/stub_specification.rb +1 -5
  356. data/lib/rubygems/syck_hack.rb +0 -2
  357. data/lib/rubygems/test_case.rb +135 -118
  358. data/lib/rubygems/test_utilities.rb +6 -14
  359. data/lib/rubygems/uninstaller.rb +35 -16
  360. data/lib/rubygems/uri_formatter.rb +2 -3
  361. data/lib/rubygems/uri_parser.rb +0 -2
  362. data/lib/rubygems/user_interaction.rb +1 -26
  363. data/lib/rubygems/util.rb +15 -3
  364. data/lib/rubygems/util/licenses.rb +4 -6
  365. data/lib/rubygems/util/list.rb +0 -2
  366. data/lib/rubygems/validator.rb +1 -3
  367. data/lib/rubygems/version.rb +5 -7
  368. data/lib/rubygems/version_option.rb +6 -0
  369. data/rubygems-update.gemspec +2 -2
  370. data/setup.rb +2 -7
  371. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  372. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  373. data/test/rubygems/rubygems_plugin.rb +0 -2
  374. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  375. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  376. data/test/rubygems/test_bundled_ca.rb +42 -45
  377. data/test/rubygems/test_config.rb +0 -2
  378. data/test/rubygems/test_deprecate.rb +40 -7
  379. data/test/rubygems/test_gem.rb +153 -106
  380. data/test/rubygems/test_gem_available_set.rb +3 -5
  381. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  382. data/test/rubygems/test_gem_command.rb +24 -7
  383. data/test/rubygems/test_gem_command_manager.rb +36 -5
  384. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  385. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  386. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  387. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  388. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  389. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  390. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  391. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  392. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  393. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  394. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  395. data/test/rubygems/test_gem_commands_install_command.rb +32 -34
  396. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  397. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  398. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  399. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  400. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  401. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  402. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  403. data/test/rubygems/test_gem_commands_push_command.rb +38 -9
  404. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  405. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  406. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  407. data/test/rubygems/test_gem_commands_setup_command.rb +211 -124
  408. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  409. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  410. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  411. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  412. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  413. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  414. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  415. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  416. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  417. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  418. data/test/rubygems/test_gem_config_file.rb +7 -12
  419. data/test/rubygems/test_gem_dependency.rb +0 -2
  420. data/test/rubygems/test_gem_dependency_installer.rb +90 -193
  421. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  422. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  423. data/test/rubygems/test_gem_doctor.rb +28 -2
  424. data/test/rubygems/test_gem_ext_builder.rb +26 -47
  425. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  426. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -20
  427. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  428. data/test/rubygems/test_gem_ext_rake_builder.rb +14 -24
  429. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  430. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  431. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  432. data/test/rubygems/test_gem_indexer.rb +9 -15
  433. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  434. data/test/rubygems/test_gem_installer.rb +265 -81
  435. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  436. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  437. data/test/rubygems/test_gem_package.rb +41 -39
  438. data/test/rubygems/test_gem_package_old.rb +4 -6
  439. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  440. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  441. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  442. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  443. data/test/rubygems/test_gem_package_task.rb +46 -13
  444. data/test/rubygems/test_gem_path_support.rb +0 -2
  445. data/test/rubygems/test_gem_platform.rb +63 -6
  446. data/test/rubygems/test_gem_rdoc.rb +0 -2
  447. data/test/rubygems/test_gem_remote_fetcher.rb +168 -211
  448. data/test/rubygems/test_gem_request.rb +13 -17
  449. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  450. data/test/rubygems/test_gem_request_set.rb +72 -22
  451. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  452. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  453. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  454. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  455. data/test/rubygems/test_gem_requirement.rb +10 -4
  456. data/test/rubygems/test_gem_resolver.rb +6 -8
  457. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  458. data/test/rubygems/test_gem_resolver_api_set.rb +11 -13
  459. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
  460. data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
  461. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  462. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  463. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  464. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  466. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  467. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  468. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  470. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  471. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  472. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  473. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  475. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  476. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  477. data/test/rubygems/test_gem_security.rb +22 -24
  478. data/test/rubygems/test_gem_security_policy.rb +7 -12
  479. data/test/rubygems/test_gem_security_signer.rb +10 -12
  480. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  481. data/test/rubygems/test_gem_server.rb +10 -14
  482. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  483. data/test/rubygems/test_gem_source.rb +17 -16
  484. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  485. data/test/rubygems/test_gem_source_git.rb +12 -13
  486. data/test/rubygems/test_gem_source_installed.rb +7 -9
  487. data/test/rubygems/test_gem_source_list.rb +1 -2
  488. data/test/rubygems/test_gem_source_local.rb +8 -10
  489. data/test/rubygems/test_gem_source_lock.rb +10 -12
  490. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  491. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  492. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  493. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  494. data/test/rubygems/test_gem_specification.rb +182 -131
  495. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  496. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  497. data/test/rubygems/test_gem_text.rb +1 -3
  498. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  499. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  500. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  501. data/test/rubygems/test_gem_util.rb +7 -7
  502. data/test/rubygems/test_gem_validator.rb +1 -3
  503. data/test/rubygems/test_gem_version.rb +1 -3
  504. data/test/rubygems/test_gem_version_option.rb +1 -3
  505. data/test/rubygems/test_kernel.rb +25 -10
  506. data/test/rubygems/test_project_sanity.rb +7 -2
  507. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  508. data/test/rubygems/test_require.rb +291 -56
  509. metadata +66 -100
  510. data/.bundle/config +0 -2
  511. data/.rubocop.yml +0 -91
  512. data/Gemfile +0 -8
  513. data/Gemfile.lock +0 -43
  514. data/bundler/CODE_OF_CONDUCT.md +0 -136
  515. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  516. data/bundler/man/bundle-add.1.txt +0 -58
  517. data/bundler/man/bundle-binstubs.1.txt +0 -48
  518. data/bundler/man/bundle-cache.1.txt +0 -78
  519. data/bundler/man/bundle-check.1.txt +0 -33
  520. data/bundler/man/bundle-clean.1.txt +0 -26
  521. data/bundler/man/bundle-config.1.txt +0 -528
  522. data/bundler/man/bundle-doctor.1.txt +0 -44
  523. data/bundler/man/bundle-exec.1.txt +0 -178
  524. data/bundler/man/bundle-gem.1.txt +0 -91
  525. data/bundler/man/bundle-info.1.txt +0 -21
  526. data/bundler/man/bundle-init.1.txt +0 -34
  527. data/bundler/man/bundle-inject.1.txt +0 -32
  528. data/bundler/man/bundle-install.1.txt +0 -401
  529. data/bundler/man/bundle-list.1.txt +0 -44
  530. data/bundler/man/bundle-lock.1.txt +0 -93
  531. data/bundler/man/bundle-open.1.txt +0 -29
  532. data/bundler/man/bundle-outdated.1.txt +0 -131
  533. data/bundler/man/bundle-platform.1.txt +0 -57
  534. data/bundler/man/bundle-pristine.1.txt +0 -44
  535. data/bundler/man/bundle-remove.1.txt +0 -34
  536. data/bundler/man/bundle-show.1.txt +0 -27
  537. data/bundler/man/bundle-update.1.txt +0 -390
  538. data/bundler/man/bundle-viz.1.txt +0 -39
  539. data/bundler/man/bundle.1.txt +0 -116
  540. data/bundler/man/gemfile.5.txt +0 -649
  541. data/lib/rubygems/source_local.rb +0 -7
  542. data/lib/rubygems/source_specific_file.rb +0 -6
  543. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  544. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  545. data/lib/ubygems.rb +0 -14
  546. data/tmp/.keep +0 -0
  547. data/util/CL2notes +0 -55
  548. data/util/bisect +0 -10
  549. data/util/ci.sh +0 -62
  550. data/util/cops/deprecations.rb +0 -52
  551. data/util/create_certs.rb +0 -171
  552. data/util/create_certs.sh +0 -27
  553. data/util/create_encrypted_key.rb +0 -16
  554. data/util/generate_spdx_license_list.rb +0 -63
  555. data/util/patch_with_prs.rb +0 -77
  556. data/util/rubocop +0 -8
  557. data/util/update_bundled_ca_certificates.rb +0 -139
  558. 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,16 +36,14 @@ 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
 
@@ -56,14 +51,12 @@ class TestGemExtRakeBuilder < Gem::TestCase
56
51
  output = []
57
52
 
58
53
  build_rake_in do |rake|
59
- Dir.chdir @ext do
60
- Gem::Ext::RakeBuilder.build "ext/Rakefile", @dest_path, output, ["test1", "test2"]
61
- end
54
+ Gem::Ext::RakeBuilder.build "ext/Rakefile", @dest_path, output, ["test1", "test2"], nil, @ext
62
55
 
63
56
  output = output.join "\n"
64
57
 
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
58
+ refute_match %r{^rake failed:}, output
59
+ assert_match %r{^#{Regexp.escape rake} RUBYARCHDIR\\=#{Regexp.escape @dest_path} RUBYLIBDIR\\=#{Regexp.escape @dest_path} test1 test2}, output
67
60
  end
68
61
  end
69
62
 
@@ -73,12 +66,10 @@ class TestGemExtRakeBuilder < Gem::TestCase
73
66
 
74
67
  build_rake_in(false) do |rake|
75
68
  error = assert_raises Gem::InstallError do
76
- Dir.chdir @ext do
77
- Gem::Ext::RakeBuilder.build "mkrf_conf.rb", @dest_path, output
78
- end
69
+ Gem::Ext::RakeBuilder.build "mkrf_conf.rb", @dest_path, output, [], nil, @ext
79
70
  end
80
71
 
81
- assert_match %r%^rake failed%, error.message
72
+ assert_match %r{^rake failed}, error.message
82
73
  end
83
74
  end
84
75
 
@@ -91,5 +82,4 @@ class TestGemExtRakeBuilder < Gem::TestCase
91
82
  EO_MKRF
92
83
  end
93
84
  end
94
-
95
85
  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,38 +79,25 @@ 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
- if defined?(RUBY_FRAMEWORK_VERSION)
108
- orig_RUBY_FRAMEWORK_VERSION = RUBY_FRAMEWORK_VERSION
109
- Object.send :remove_const, :RUBY_FRAMEWORK_VERSION
110
- end
111
- orig_bindir = RbConfig::CONFIG['bindir']
112
- RbConfig::CONFIG['bindir'] = Gem.bindir
88
+ bindir(Gem.bindir) do
89
+ util_conflict_executable false
113
90
 
114
- util_conflict_executable false
91
+ ui = Gem::MockGemUi.new "n\n"
92
+ use_ui ui do
93
+ e = assert_raises Gem::InstallError do
94
+ installer.generate_bin
95
+ end
115
96
 
116
- ui = Gem::MockGemUi.new "n\n"
117
- use_ui ui do
118
- e = assert_raises Gem::InstallError do
119
- installer.generate_bin
97
+ conflicted = File.join @gemhome, 'bin', 'executable'
98
+ assert_match %r{\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z},
99
+ e.message
120
100
  end
121
-
122
- conflicted = File.join @gemhome, 'bin', 'executable'
123
- assert_match %r%\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z%,
124
- e.message
125
- end
126
- ensure
127
- Object.const_set :RUBY_FRAMEWORK_VERSION, orig_RUBY_FRAMEWORK_VERSION if
128
- orig_RUBY_FRAMEWORK_VERSION
129
- if orig_bindir
130
- RbConfig::CONFIG['bindir'] = orig_bindir
131
- else
132
- RbConfig::CONFIG.delete 'bindir'
133
101
  end
134
102
  end
135
103
 
@@ -169,13 +137,13 @@ gem 'other', version
169
137
  assert_path_exists installed_exec
170
138
 
171
139
  wrapper = File.read installed_exec
172
- assert_match %r|generated by RubyGems|, wrapper
140
+ assert_match %r{generated by RubyGems}, wrapper
173
141
  ensure
174
142
  Gem::Installer.exec_format = nil
175
143
  end
176
144
 
177
145
  def test_check_executable_overwrite_other_gem
178
- installer = setup_base_installer
146
+ installer = setup_base_installer(false)
179
147
 
180
148
  util_conflict_executable true
181
149
 
@@ -204,7 +172,7 @@ gem 'other', version
204
172
  assert_path_exists installed_exec
205
173
 
206
174
  wrapper = File.read installed_exec
207
- assert_match %r|generated by RubyGems|, wrapper
175
+ assert_match %r{generated by RubyGems}, wrapper
208
176
  end
209
177
 
210
178
  def test_check_executable_overwrite_other_non_gem
@@ -219,7 +187,7 @@ gem 'other', version
219
187
  assert_path_exists installed_exec
220
188
 
221
189
  wrapper = File.read installed_exec
222
- assert_match %r|generated by RubyGems|, wrapper
190
+ assert_match %r{generated by RubyGems}, wrapper
223
191
  end unless Gem.win_platform?
224
192
 
225
193
  def test_check_that_user_bin_dir_is_in_path
@@ -228,7 +196,7 @@ gem 'other', version
228
196
  bin_dir = installer.bin_dir
229
197
 
230
198
  if Gem.win_platform?
231
- bin_dir = bin_dir.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
199
+ bin_dir = bin_dir.downcase
232
200
  end
233
201
 
234
202
  orig_PATH, ENV['PATH'] =
@@ -239,6 +207,16 @@ gem 'other', version
239
207
  end
240
208
 
241
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
242
220
  ensure
243
221
  ENV['PATH'] = orig_PATH
244
222
  end
@@ -271,7 +249,7 @@ gem 'other', version
271
249
  expected = installer.bin_dir
272
250
 
273
251
  if Gem.win_platform?
274
- expected = expected.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
252
+ expected = expected.downcase
275
253
  end
276
254
 
277
255
  assert_match expected, @ui.error
@@ -309,7 +287,7 @@ gem 'other', version
309
287
  end
310
288
 
311
289
  def test_ensure_loadable_spec_security_policy
312
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
290
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
313
291
 
314
292
  _, a_gem = util_gem 'a', 2 do |s|
315
293
  s.add_dependency 'garbage ~> 5'
@@ -355,7 +333,7 @@ gem 'other', version
355
333
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
356
334
 
357
335
  wrapper = File.read installed_exec
358
- assert_match %r|generated by RubyGems|, wrapper
336
+ assert_match %r{generated by RubyGems}, wrapper
359
337
  end
360
338
 
361
339
  def test_generate_bin_bindir_with_user_install_warning
@@ -367,7 +345,7 @@ gem 'other', version
367
345
 
368
346
  options = {
369
347
  :bin_dir => bin_dir,
370
- :install_dir => "/non/existent"
348
+ :install_dir => "/non/existent",
371
349
  }
372
350
 
373
351
  inst = Gem::Installer.at '', options
@@ -398,7 +376,7 @@ gem 'other', version
398
376
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
399
377
 
400
378
  wrapper = File.read installed_exec
401
- assert_match %r|generated by RubyGems|, wrapper
379
+ assert_match %r{generated by RubyGems}, wrapper
402
380
  end
403
381
 
404
382
  def test_generate_bin_script_format
@@ -457,7 +435,7 @@ gem 'other', version
457
435
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
458
436
 
459
437
  wrapper = File.read installed_exec
460
- assert_match %r|generated by RubyGems|, wrapper
438
+ assert_match %r{generated by RubyGems}, wrapper
461
439
  end
462
440
 
463
441
  def test_generate_bin_script_no_execs
@@ -514,7 +492,7 @@ gem 'other', version
514
492
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
515
493
 
516
494
  wrapper = File.read installed_exec
517
- assert_match %r|generated by RubyGems|, wrapper
495
+ assert_match %r{generated by RubyGems}, wrapper
518
496
  # HACK some gems don't have #! in their executables, restore 2008/06
519
497
  #assert_no_match %r|generated by RubyGems|, wrapper
520
498
  end
@@ -540,9 +518,9 @@ gem 'other', version
540
518
  assert_path_exists installed_exec
541
519
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
542
520
 
543
- assert_match %r|generated by RubyGems|, File.read(installed_exec)
521
+ assert_match %r{generated by RubyGems}, File.read(installed_exec)
544
522
 
545
- refute_match %r|generated by RubyGems|, File.read(real_exec),
523
+ refute_match %r{generated by RubyGems}, File.read(real_exec),
546
524
  'real executable overwritten'
547
525
  end
548
526
 
@@ -752,11 +730,152 @@ gem 'other', version
752
730
  installer.generate_bin
753
731
 
754
732
  default_shebang = Gem.ruby
755
- shebang_line = open("#{@gemhome}/bin/executable") { |f| f.readlines.first }
733
+ shebang_line = open("#{@gemhome}/bin/executable") {|f| f.readlines.first }
756
734
  assert_match(/\A#!/, shebang_line)
757
735
  assert_match(/#{default_shebang}/, shebang_line)
758
736
  end
759
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
+
760
879
  def test_initialize
761
880
  spec = util_spec 'a' do |s|
762
881
  s.platform = Gem::Platform.new 'mswin32'
@@ -953,7 +1072,13 @@ gem 'other', version
953
1072
  end
954
1073
 
955
1074
  def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
956
- 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"
957
1082
 
958
1083
  installer = util_setup_installer do |spec|
959
1084
  spec.name = 'default'
@@ -971,8 +1096,6 @@ gem 'other', version
971
1096
  end
972
1097
  end
973
1098
 
974
- exe = File.join @gemhome, 'bin', 'executable'
975
-
976
1099
  e = assert_raises RuntimeError do
977
1100
  instance_eval File.read(exe)
978
1101
  end
@@ -1036,7 +1159,7 @@ gem 'other', version
1036
1159
  Gem::Package.build @spec
1037
1160
  end
1038
1161
  end
1039
- installer = Gem::Installer.at @gem
1162
+ installer = Gem::Installer.at @gem, :force => true
1040
1163
  build_rake_in do
1041
1164
  use_ui @ui do
1042
1165
  assert_equal @spec, installer.install
@@ -1058,6 +1181,15 @@ gem 'other', version
1058
1181
  assert_path_exists gem_dir
1059
1182
  end
1060
1183
 
1184
+ def test_install_build_root
1185
+ build_root = File.join(@tempdir, 'build_root')
1186
+
1187
+ @gem = setup_base_gem
1188
+ installer = Gem::Installer.at @gem, :build_root => build_root
1189
+
1190
+ assert_equal @spec, installer.install
1191
+ end
1192
+
1061
1193
  def test_install_missing_dirs
1062
1194
  installer = setup_base_installer
1063
1195
 
@@ -1166,7 +1298,7 @@ gem 'other', version
1166
1298
  installer.install
1167
1299
  end
1168
1300
 
1169
- assert_match %r|I am a shiny gem!|, @ui.output
1301
+ assert_match %r{I am a shiny gem!}, @ui.output
1170
1302
  end
1171
1303
 
1172
1304
  def test_install_with_skipped_message
@@ -1180,7 +1312,7 @@ gem 'other', version
1180
1312
  installer.install
1181
1313
  end
1182
1314
 
1183
- refute_match %r|I am a shiny gem!|, @ui.output
1315
+ refute_match %r{I am a shiny gem!}, @ui.output
1184
1316
  end
1185
1317
 
1186
1318
  def test_install_extension_dir
@@ -1239,7 +1371,7 @@ gem 'other', version
1239
1371
 
1240
1372
  # reinstall the gem, this is also the same as pristine
1241
1373
  use_ui @ui do
1242
- installer = Gem::Installer.at path
1374
+ installer = Gem::Installer.at path, :force => true
1243
1375
  installer.install
1244
1376
  end
1245
1377
 
@@ -1316,7 +1448,7 @@ gem 'other', version
1316
1448
  installer.install
1317
1449
  end
1318
1450
 
1319
- expected = File.join @spec.full_require_paths.find { |path|
1451
+ expected = File.join @spec.full_require_paths.find {|path|
1320
1452
  File.exist? File.join path, 'b.rb'
1321
1453
  }, 'b.rb'
1322
1454
  assert_equal expected, @spec.matches_for_glob('b.rb').first
@@ -1384,7 +1516,7 @@ gem 'other', version
1384
1516
  end
1385
1517
 
1386
1518
  # empty depend file for no auto dependencies
1387
- @spec.files += %W"depend #{@spec.name}.c".each do |file|
1519
+ @spec.files += %W[depend #{@spec.name}.c].each do |file|
1388
1520
  write_file File.join(@tempdir, file)
1389
1521
  end
1390
1522
 
@@ -1439,6 +1571,7 @@ gem 'other', version
1439
1571
  installer = setup_base_installer
1440
1572
  @spec.add_dependency 'b', '> 5'
1441
1573
  installer = util_setup_gem
1574
+ installer.force = false
1442
1575
 
1443
1576
  use_ui @ui do
1444
1577
  assert_raises Gem::InstallError do
@@ -1683,13 +1816,24 @@ gem 'other', version
1683
1816
 
1684
1817
  def test_process_options_build_root
1685
1818
  build_root = File.join @tempdir, 'build_root'
1819
+ bin_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'bin')
1820
+ gem_home = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''))
1821
+ plugins_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'plugins')
1686
1822
 
1687
1823
  @gem = setup_base_gem
1688
- installer = Gem::Installer.at @gem, :build_root => build_root
1824
+ installer = use_ui(@ui) { Gem::Installer.at @gem, :build_root => build_root }
1825
+
1826
+ assert_equal build_root, installer.build_root
1827
+ assert_equal bin_dir, installer.bin_dir
1828
+ assert_equal gem_home, installer.gem_home
1689
1829
 
1690
- assert_equal Pathname(build_root), installer.build_root
1691
- assert_equal File.join(build_root, @gemhome, 'bin'), installer.bin_dir
1692
- assert_equal File.join(build_root, @gemhome), installer.gem_home
1830
+ errors = @ui.error.split("\n")
1831
+
1832
+ assert_equal "WARNING: You build with buildroot.", errors.shift
1833
+ assert_equal " Build root: #{build_root}", errors.shift
1834
+ assert_equal " Bin dir: #{bin_dir}", errors.shift
1835
+ assert_equal " Gem home: #{gem_home}", errors.shift
1836
+ assert_equal " Plugins dir: #{plugins_dir}", errors.shift
1693
1837
  end
1694
1838
 
1695
1839
  def test_shebang_arguments
@@ -1739,9 +1883,9 @@ gem 'other', version
1739
1883
 
1740
1884
  shebang = installer.shebang 'executable'
1741
1885
 
1742
- env_shebang = "/usr/bin/env" unless Gem.win_platform?
1886
+ bin_env = get_bin_env
1743
1887
 
1744
- assert_equal("#!#{env_shebang} #{RbConfig::CONFIG['ruby_install_name']}",
1888
+ assert_equal("#!#{bin_env} #{RbConfig::CONFIG['ruby_install_name']}",
1745
1889
  shebang)
1746
1890
  end
1747
1891
 
@@ -1820,10 +1964,18 @@ gem 'other', version
1820
1964
  assert_equal "#!test", shebang
1821
1965
  end
1822
1966
 
1967
+ def get_bin_env
1968
+ if win_platform?
1969
+ ""
1970
+ else
1971
+ %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) }
1972
+ end
1973
+ end
1974
+
1823
1975
  def test_shebang_custom_with_expands
1824
1976
  installer = setup_base_installer
1825
1977
 
1826
- bin_env = win_platform? ? '' : '/usr/bin/env'
1978
+ bin_env = get_bin_env
1827
1979
  conf = Gem::ConfigFile.new []
1828
1980
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
1829
1981
 
@@ -1839,7 +1991,7 @@ gem 'other', version
1839
1991
  def test_shebang_custom_with_expands_and_arguments
1840
1992
  installer = setup_base_installer
1841
1993
 
1842
- bin_env = win_platform? ? '' : '/usr/bin/env'
1994
+ bin_env = get_bin_env
1843
1995
  conf = Gem::ConfigFile.new []
1844
1996
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
1845
1997
 
@@ -1964,7 +2116,7 @@ gem 'other', version
1964
2116
  def test_dir
1965
2117
  installer = setup_base_installer
1966
2118
 
1967
- assert_match %r!/gemhome/gems/a-2$!, installer.dir
2119
+ assert_match %r{/gemhome/gems/a-2$}, installer.dir
1968
2120
  end
1969
2121
 
1970
2122
  def test_default_gem_loaded_from
@@ -2004,7 +2156,13 @@ gem 'other', version
2004
2156
  assert_path_exists installed_exec
2005
2157
 
2006
2158
  wrapper = File.read installed_exec
2007
- refute_match %r|generated by RubyGems|, wrapper
2159
+
2160
+ if symlink_supported?
2161
+ refute_match %r{generated by RubyGems}, wrapper
2162
+ else # when symlink not supported, it warns and fallbacks back to installing wrapper
2163
+ assert_match %r{Unable to use symlinks, installing wrapper}, @ui.error
2164
+ assert_match %r{generated by RubyGems}, wrapper
2165
+ end
2008
2166
  end
2009
2167
 
2010
2168
  def test_default_gem_with_wrappers
@@ -2024,7 +2182,7 @@ gem 'other', version
2024
2182
  assert_path_exists installed_exec
2025
2183
 
2026
2184
  wrapper = File.read installed_exec
2027
- assert_match %r|generated by RubyGems|, wrapper
2185
+ assert_match %r{generated by RubyGems}, wrapper
2028
2186
  end
2029
2187
 
2030
2188
  def test_default_gem_with_exe_as_bindir
@@ -2057,6 +2215,23 @@ gem 'other', version
2057
2215
  assert_equal ['exe/executable'], default_spec.files
2058
2216
  end
2059
2217
 
2218
+ def test_default_gem_to_specific_install_dir
2219
+ @gem = setup_base_gem
2220
+ installer = util_installer @spec, "#{@gemhome}2"
2221
+ installer.options[:install_as_default] = true
2222
+
2223
+ use_ui @ui do
2224
+ installer.install
2225
+ end
2226
+
2227
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications')
2228
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications', 'default')
2229
+
2230
+ default_spec = eval File.read File.join("#{@gemhome}2", 'specifications', 'default', 'a-2.gemspec')
2231
+ assert_equal Gem::Version.new("2"), default_spec.version
2232
+ assert_equal ['bin/executable'], default_spec.files
2233
+ end
2234
+
2060
2235
  def test_package_attribute
2061
2236
  gem = quick_gem 'c' do |spec|
2062
2237
  util_make_exec spec, '#!/usr/bin/ruby', 'exe'
@@ -2067,6 +2242,16 @@ gem 'other', version
2067
2242
  assert_kind_of(Gem::Package, installer.package)
2068
2243
  end
2069
2244
 
2245
+ def test_gem_attribute
2246
+ gem = quick_gem 'c' do |spec|
2247
+ util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2248
+ end
2249
+
2250
+ installer = util_installer(gem, @gemhome)
2251
+ assert_respond_to(installer, :gem)
2252
+ assert_kind_of(String, installer.gem)
2253
+ end
2254
+
2070
2255
  def old_ruby_required(requirement)
2071
2256
  spec = util_spec 'old_ruby_required', '1' do |s|
2072
2257
  s.required_ruby_version = requirement
@@ -2097,7 +2282,6 @@ gem 'other', version
2097
2282
  end
2098
2283
 
2099
2284
  def mask
2100
- 0100755 & (~File.umask)
2285
+ 0100755
2101
2286
  end
2102
-
2103
2287
  end