rubygems-update 3.1.1 → 3.2.0.rc.2

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 (518) 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 +389 -144
  5. data/Manifest.txt +37 -73
  6. data/POLICIES.md +2 -9
  7. data/README.md +5 -5
  8. data/Rakefile +47 -82
  9. data/bin/update_rubygems +2 -2
  10. data/bundler/CHANGELOG.md +1546 -1414
  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 +21 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +54 -20
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/cache.rb +1 -7
  20. data/bundler/lib/bundler/cli/clean.rb +1 -1
  21. data/bundler/lib/bundler/cli/common.rb +14 -0
  22. data/bundler/lib/bundler/cli/console.rb +1 -1
  23. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  24. data/bundler/lib/bundler/cli/exec.rb +4 -13
  25. data/bundler/lib/bundler/cli/fund.rb +36 -0
  26. data/bundler/lib/bundler/cli/gem.rb +84 -11
  27. data/bundler/lib/bundler/cli/info.rb +15 -4
  28. data/bundler/lib/bundler/cli/init.rb +2 -2
  29. data/bundler/lib/bundler/cli/inject.rb +1 -1
  30. data/bundler/lib/bundler/cli/install.rb +12 -18
  31. data/bundler/lib/bundler/cli/issue.rb +2 -2
  32. data/bundler/lib/bundler/cli/list.rb +12 -10
  33. data/bundler/lib/bundler/cli/outdated.rb +89 -66
  34. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  35. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  36. data/bundler/lib/bundler/cli/show.rb +1 -1
  37. data/bundler/lib/bundler/cli/update.rb +2 -0
  38. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  39. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  40. data/bundler/lib/bundler/definition.rb +51 -60
  41. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  42. data/bundler/lib/bundler/dependency.rb +0 -9
  43. data/bundler/lib/bundler/dsl.rb +5 -9
  44. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  45. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  46. data/bundler/lib/bundler/errors.rb +1 -0
  47. data/bundler/lib/bundler/feature_flag.rb +0 -2
  48. data/bundler/lib/bundler/fetcher.rb +4 -3
  49. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  50. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  51. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  52. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  53. data/bundler/lib/bundler/friendly_errors.rb +7 -13
  54. data/bundler/lib/bundler/gem_helper.rb +33 -19
  55. data/bundler/lib/bundler/gem_helpers.rb +6 -1
  56. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  57. data/bundler/lib/bundler/graph.rb +1 -1
  58. data/bundler/lib/bundler/index.rb +1 -1
  59. data/bundler/lib/bundler/injector.rb +15 -4
  60. data/bundler/lib/bundler/inline.rb +2 -2
  61. data/bundler/lib/bundler/installer.rb +30 -29
  62. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  64. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  65. data/bundler/lib/bundler/lazy_specification.rb +19 -6
  66. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  67. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  68. data/bundler/lib/bundler/mirror.rb +2 -2
  69. data/bundler/lib/bundler/plugin.rb +30 -5
  70. data/bundler/lib/bundler/plugin/index.rb +10 -1
  71. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  72. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  73. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  74. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  75. data/bundler/lib/bundler/remote_specification.rb +5 -2
  76. data/bundler/lib/bundler/resolver.rb +32 -9
  77. data/bundler/lib/bundler/resolver/spec_group.rb +27 -6
  78. data/bundler/lib/bundler/retry.rb +1 -1
  79. data/bundler/lib/bundler/ruby_version.rb +1 -1
  80. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  81. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  82. data/bundler/lib/bundler/rubygems_integration.rb +31 -54
  83. data/bundler/lib/bundler/runtime.rb +4 -14
  84. data/bundler/lib/bundler/settings.rb +49 -45
  85. data/bundler/lib/bundler/setup.rb +5 -0
  86. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  87. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  88. data/bundler/lib/bundler/source.rb +1 -1
  89. data/bundler/lib/bundler/source/git.rb +5 -5
  90. data/bundler/lib/bundler/source/git/git_proxy.rb +56 -59
  91. data/bundler/lib/bundler/source/path.rb +7 -3
  92. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  93. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  94. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  95. data/bundler/lib/bundler/source_list.rb +2 -2
  96. data/bundler/lib/bundler/spec_set.rb +1 -1
  97. data/bundler/lib/bundler/stub_specification.rb +17 -5
  98. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  99. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  100. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -1
  101. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  102. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  103. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  104. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  105. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  106. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  107. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
  108. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  109. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -6
  110. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  111. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  112. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  113. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  114. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  115. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  116. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  117. data/bundler/lib/bundler/ui/shell.rb +5 -5
  118. data/bundler/lib/bundler/uri_credentials_filter.rb +1 -1
  119. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -212
  120. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  121. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  122. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  123. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  124. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  125. data/bundler/lib/bundler/version.rb +1 -1
  126. data/bundler/lib/bundler/worker.rb +1 -1
  127. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  128. data/bundler/man/bundle-add.1 +1 -1
  129. data/bundler/man/{bundle-add.ronn → bundle-add.1.ronn} +0 -0
  130. data/bundler/man/bundle-binstubs.1 +5 -3
  131. data/bundler/man/{bundle-binstubs.ronn → bundle-binstubs.1.ronn} +2 -4
  132. data/bundler/man/bundle-cache.1 +1 -1
  133. data/bundler/man/{bundle-cache.ronn → bundle-cache.1.ronn} +0 -0
  134. data/bundler/man/bundle-check.1 +1 -1
  135. data/bundler/man/{bundle-check.ronn → bundle-check.1.ronn} +0 -0
  136. data/bundler/man/bundle-clean.1 +1 -1
  137. data/bundler/man/{bundle-clean.ronn → bundle-clean.1.ronn} +0 -0
  138. data/bundler/man/bundle-config.1 +16 -22
  139. data/bundler/man/{bundle-config.ronn → bundle-config.1.ronn} +19 -22
  140. data/bundler/man/bundle-doctor.1 +1 -1
  141. data/bundler/man/{bundle-doctor.ronn → bundle-doctor.1.ronn} +0 -0
  142. data/bundler/man/bundle-exec.1 +1 -1
  143. data/bundler/man/{bundle-exec.ronn → bundle-exec.1.ronn} +0 -0
  144. data/bundler/man/bundle-gem.1 +25 -3
  145. data/bundler/man/{bundle-gem.ronn → bundle-gem.1.ronn} +30 -7
  146. data/bundler/man/bundle-info.1 +1 -1
  147. data/bundler/man/{bundle-info.ronn → bundle-info.1.ronn} +0 -0
  148. data/bundler/man/bundle-init.1 +1 -1
  149. data/bundler/man/{bundle-init.ronn → bundle-init.1.ronn} +0 -0
  150. data/bundler/man/bundle-inject.1 +1 -1
  151. data/bundler/man/{bundle-inject.ronn → bundle-inject.1.ronn} +0 -0
  152. data/bundler/man/bundle-install.1 +29 -2
  153. data/bundler/man/{bundle-install.ronn → bundle-install.1.ronn} +24 -2
  154. data/bundler/man/bundle-list.1 +7 -7
  155. data/bundler/man/{bundle-list.ronn → bundle-list.1.ronn} +6 -6
  156. data/bundler/man/bundle-lock.1 +1 -1
  157. data/bundler/man/{bundle-lock.ronn → bundle-lock.1.ronn} +0 -0
  158. data/bundler/man/bundle-open.1 +1 -1
  159. data/bundler/man/{bundle-open.ronn → bundle-open.1.ronn} +0 -0
  160. data/bundler/man/bundle-outdated.1 +1 -1
  161. data/bundler/man/{bundle-outdated.ronn → bundle-outdated.1.ronn} +0 -0
  162. data/bundler/man/bundle-platform.1 +1 -1
  163. data/bundler/man/{bundle-platform.ronn → bundle-platform.1.ronn} +0 -0
  164. data/bundler/man/bundle-pristine.1 +1 -1
  165. data/bundler/man/{bundle-pristine.ronn → bundle-pristine.1.ronn} +0 -0
  166. data/bundler/man/bundle-remove.1 +1 -1
  167. data/bundler/man/{bundle-remove.ronn → bundle-remove.1.ronn} +0 -0
  168. data/bundler/man/bundle-show.1 +1 -1
  169. data/bundler/man/{bundle-show.ronn → bundle-show.1.ronn} +0 -0
  170. data/bundler/man/bundle-update.1 +1 -1
  171. data/bundler/man/{bundle-update.ronn → bundle-update.1.ronn} +0 -0
  172. data/bundler/man/bundle-viz.1 +1 -1
  173. data/bundler/man/{bundle-viz.ronn → bundle-viz.1.ronn} +0 -0
  174. data/bundler/man/bundle.1 +1 -1
  175. data/bundler/man/{bundle.ronn → bundle.1.ronn} +0 -0
  176. data/bundler/man/gemfile.5 +4 -4
  177. data/bundler/man/gemfile.5.ronn +4 -4
  178. data/lib/rubygems.rb +133 -186
  179. data/lib/rubygems/available_set.rb +4 -6
  180. data/lib/rubygems/basic_specification.rb +12 -10
  181. data/lib/rubygems/bundler_version_finder.rb +14 -9
  182. data/lib/rubygems/command.rb +17 -17
  183. data/lib/rubygems/command_manager.rb +4 -5
  184. data/lib/rubygems/commands/build_command.rb +4 -1
  185. data/lib/rubygems/commands/cert_command.rb +1 -9
  186. data/lib/rubygems/commands/check_command.rb +0 -2
  187. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  188. data/lib/rubygems/commands/contents_command.rb +4 -6
  189. data/lib/rubygems/commands/dependency_command.rb +6 -8
  190. data/lib/rubygems/commands/environment_command.rb +1 -3
  191. data/lib/rubygems/commands/fetch_command.rb +2 -4
  192. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  193. data/lib/rubygems/commands/help_command.rb +2 -4
  194. data/lib/rubygems/commands/info_command.rb +8 -5
  195. data/lib/rubygems/commands/install_command.rb +3 -5
  196. data/lib/rubygems/commands/list_command.rb +8 -7
  197. data/lib/rubygems/commands/lock_command.rb +1 -3
  198. data/lib/rubygems/commands/mirror_command.rb +0 -2
  199. data/lib/rubygems/commands/open_command.rb +0 -4
  200. data/lib/rubygems/commands/outdated_command.rb +0 -2
  201. data/lib/rubygems/commands/owner_command.rb +0 -2
  202. data/lib/rubygems/commands/pristine_command.rb +10 -4
  203. data/lib/rubygems/commands/push_command.rb +4 -44
  204. data/lib/rubygems/commands/query_command.rb +6 -353
  205. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  206. data/lib/rubygems/commands/search_command.rb +7 -7
  207. data/lib/rubygems/commands/server_command.rb +0 -2
  208. data/lib/rubygems/commands/setup_command.rb +156 -48
  209. data/lib/rubygems/commands/signin_command.rb +0 -2
  210. data/lib/rubygems/commands/signout_command.rb +0 -2
  211. data/lib/rubygems/commands/sources_command.rb +3 -5
  212. data/lib/rubygems/commands/specification_command.rb +2 -4
  213. data/lib/rubygems/commands/stale_command.rb +1 -3
  214. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  215. data/lib/rubygems/commands/unpack_command.rb +1 -3
  216. data/lib/rubygems/commands/update_command.rb +59 -14
  217. data/lib/rubygems/commands/which_command.rb +0 -2
  218. data/lib/rubygems/commands/yank_command.rb +0 -2
  219. data/lib/rubygems/config_file.rb +11 -4
  220. data/lib/rubygems/core_ext/kernel_require.rb +26 -36
  221. data/lib/rubygems/core_ext/kernel_warn.rb +6 -6
  222. data/lib/rubygems/defaults.rb +99 -5
  223. data/lib/rubygems/dependency.rb +2 -7
  224. data/lib/rubygems/dependency_installer.rb +1 -75
  225. data/lib/rubygems/dependency_list.rb +7 -9
  226. data/lib/rubygems/deprecate.rb +46 -1
  227. data/lib/rubygems/doctor.rb +4 -4
  228. data/lib/rubygems/errors.rb +3 -14
  229. data/lib/rubygems/exceptions.rb +2 -33
  230. data/lib/rubygems/ext.rb +6 -6
  231. data/lib/rubygems/ext/build_error.rb +2 -0
  232. data/lib/rubygems/ext/builder.rb +4 -4
  233. data/lib/rubygems/ext/cmake_builder.rb +1 -3
  234. data/lib/rubygems/ext/configure_builder.rb +0 -2
  235. data/lib/rubygems/ext/ext_conf_builder.rb +6 -9
  236. data/lib/rubygems/ext/rake_builder.rb +0 -2
  237. data/lib/rubygems/gem_runner.rb +3 -10
  238. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  239. data/lib/rubygems/indexer.rb +1 -21
  240. data/lib/rubygems/install_update_options.rb +5 -5
  241. data/lib/rubygems/installer.rb +47 -48
  242. data/lib/rubygems/installer_test_case.rb +18 -5
  243. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  244. data/lib/rubygems/local_remote_options.rb +1 -1
  245. data/lib/rubygems/mock_gem_ui.rb +0 -6
  246. data/lib/rubygems/name_tuple.rb +2 -6
  247. data/lib/rubygems/openssl.rb +7 -0
  248. data/lib/rubygems/package.rb +11 -23
  249. data/lib/rubygems/package/digest_io.rb +0 -2
  250. data/lib/rubygems/package/file_source.rb +0 -2
  251. data/lib/rubygems/package/io_source.rb +0 -2
  252. data/lib/rubygems/package/old.rb +1 -3
  253. data/lib/rubygems/package/tar_header.rb +3 -5
  254. data/lib/rubygems/package/tar_reader.rb +0 -3
  255. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  256. data/lib/rubygems/package/tar_test_case.rb +1 -3
  257. data/lib/rubygems/package/tar_writer.rb +2 -12
  258. data/lib/rubygems/package_task.rb +1 -7
  259. data/lib/rubygems/path_support.rb +1 -3
  260. data/lib/rubygems/platform.rb +3 -5
  261. data/lib/rubygems/psych_tree.rb +0 -2
  262. data/lib/rubygems/query_utils.rb +362 -0
  263. data/lib/rubygems/rdoc.rb +0 -12
  264. data/lib/rubygems/remote_fetcher.rb +9 -25
  265. data/lib/rubygems/request.rb +1 -9
  266. data/lib/rubygems/request/connection_pools.rb +1 -5
  267. data/lib/rubygems/request/http_pool.rb +0 -2
  268. data/lib/rubygems/request/https_pool.rb +0 -2
  269. data/lib/rubygems/request_set.rb +5 -7
  270. data/lib/rubygems/request_set/gem_dependency_api.rb +2 -4
  271. data/lib/rubygems/request_set/lockfile.rb +8 -12
  272. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  273. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  274. data/lib/rubygems/requirement.rb +20 -21
  275. data/lib/rubygems/resolver.rb +7 -10
  276. data/lib/rubygems/resolver/activation_request.rb +0 -2
  277. data/lib/rubygems/resolver/api_set.rb +4 -6
  278. data/lib/rubygems/resolver/api_specification.rb +16 -7
  279. data/lib/rubygems/resolver/best_set.rb +0 -2
  280. data/lib/rubygems/resolver/composed_set.rb +3 -5
  281. data/lib/rubygems/resolver/conflict.rb +1 -3
  282. data/lib/rubygems/resolver/current_set.rb +0 -2
  283. data/lib/rubygems/resolver/dependency_request.rb +0 -2
  284. data/lib/rubygems/resolver/git_set.rb +0 -2
  285. data/lib/rubygems/resolver/git_specification.rb +0 -2
  286. data/lib/rubygems/resolver/index_set.rb +1 -3
  287. data/lib/rubygems/resolver/index_specification.rb +0 -2
  288. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  289. data/lib/rubygems/resolver/installer_set.rb +3 -5
  290. data/lib/rubygems/resolver/local_specification.rb +0 -2
  291. data/lib/rubygems/resolver/lock_set.rb +1 -3
  292. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  293. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  294. data/lib/rubygems/resolver/set.rb +0 -2
  295. data/lib/rubygems/resolver/source_set.rb +0 -2
  296. data/lib/rubygems/resolver/spec_specification.rb +0 -2
  297. data/lib/rubygems/resolver/specification.rb +0 -2
  298. data/lib/rubygems/resolver/stats.rb +0 -2
  299. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  300. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  301. data/lib/rubygems/s3_uri_signer.rb +1 -7
  302. data/lib/rubygems/safe_yaml.rb +4 -4
  303. data/lib/rubygems/security.rb +26 -32
  304. data/lib/rubygems/security/policy.rb +3 -7
  305. data/lib/rubygems/security/signer.rb +4 -6
  306. data/lib/rubygems/security/trust_dir.rb +1 -3
  307. data/lib/rubygems/server.rb +9 -11
  308. data/lib/rubygems/source.rb +4 -4
  309. data/lib/rubygems/source/git.rb +7 -8
  310. data/lib/rubygems/source/installed.rb +0 -2
  311. data/lib/rubygems/source/local.rb +2 -4
  312. data/lib/rubygems/source/lock.rb +0 -2
  313. data/lib/rubygems/source/specific_file.rb +0 -2
  314. data/lib/rubygems/source/vendor.rb +0 -2
  315. data/lib/rubygems/source_list.rb +6 -7
  316. data/lib/rubygems/spec_fetcher.rb +18 -17
  317. data/lib/rubygems/specification.rb +107 -120
  318. data/lib/rubygems/specification_policy.rb +88 -30
  319. data/lib/rubygems/stub_specification.rb +0 -4
  320. data/lib/rubygems/syck_hack.rb +0 -2
  321. data/lib/rubygems/test_case.rb +122 -92
  322. data/lib/rubygems/test_utilities.rb +6 -14
  323. data/lib/rubygems/uninstaller.rb +35 -16
  324. data/lib/rubygems/uri_formatter.rb +0 -2
  325. data/lib/rubygems/uri_parser.rb +0 -2
  326. data/lib/rubygems/user_interaction.rb +1 -26
  327. data/lib/rubygems/util.rb +15 -3
  328. data/lib/rubygems/util/licenses.rb +4 -6
  329. data/lib/rubygems/util/list.rb +0 -2
  330. data/lib/rubygems/validator.rb +1 -3
  331. data/lib/rubygems/version.rb +5 -7
  332. data/rubygems-update.gemspec +2 -2
  333. data/setup.rb +2 -7
  334. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  335. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  336. data/test/rubygems/rubygems_plugin.rb +0 -2
  337. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  338. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  339. data/test/rubygems/test_bundled_ca.rb +38 -45
  340. data/test/rubygems/test_config.rb +0 -2
  341. data/test/rubygems/test_deprecate.rb +40 -7
  342. data/test/rubygems/test_gem.rb +150 -103
  343. data/test/rubygems/test_gem_available_set.rb +3 -5
  344. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  345. data/test/rubygems/test_gem_command.rb +24 -7
  346. data/test/rubygems/test_gem_command_manager.rb +36 -5
  347. data/test/rubygems/test_gem_commands_build_command.rb +53 -10
  348. data/test/rubygems/test_gem_commands_cert_command.rb +2 -4
  349. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  350. data/test/rubygems/test_gem_commands_cleanup_command.rb +13 -4
  351. data/test/rubygems/test_gem_commands_contents_command.rb +48 -17
  352. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  353. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  354. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  355. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  356. data/test/rubygems/test_gem_commands_help_command.rb +0 -2
  357. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  358. data/test/rubygems/test_gem_commands_install_command.rb +31 -33
  359. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  360. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  361. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  362. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  363. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  364. data/test/rubygems/test_gem_commands_owner_command.rb +11 -5
  365. data/test/rubygems/test_gem_commands_pristine_command.rb +41 -10
  366. data/test/rubygems/test_gem_commands_push_command.rb +7 -4
  367. data/test/rubygems/test_gem_commands_query_command.rb +9 -9
  368. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  369. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  370. data/test/rubygems/test_gem_commands_setup_command.rb +210 -118
  371. data/test/rubygems/test_gem_commands_signin_command.rb +6 -6
  372. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  373. data/test/rubygems/test_gem_commands_sources_command.rb +39 -3
  374. data/test/rubygems/test_gem_commands_specification_command.rb +18 -20
  375. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  376. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  377. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  378. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  379. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  380. data/test/rubygems/test_gem_commands_yank_command.rb +14 -8
  381. data/test/rubygems/test_gem_config_file.rb +7 -12
  382. data/test/rubygems/test_gem_dependency.rb +0 -2
  383. data/test/rubygems/test_gem_dependency_installer.rb +54 -191
  384. data/test/rubygems/test_gem_dependency_list.rb +8 -10
  385. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  386. data/test/rubygems/test_gem_doctor.rb +28 -2
  387. data/test/rubygems/test_gem_ext_builder.rb +16 -33
  388. data/test/rubygems/test_gem_ext_cmake_builder.rb +13 -14
  389. data/test/rubygems/test_gem_ext_configure_builder.rb +1 -11
  390. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -3
  391. data/test/rubygems/test_gem_ext_rake_builder.rb +9 -11
  392. data/test/rubygems/test_gem_gem_runner.rb +43 -1
  393. data/test/rubygems/test_gem_gemcutter_utilities.rb +5 -2
  394. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  395. data/test/rubygems/test_gem_indexer.rb +9 -15
  396. data/test/rubygems/test_gem_install_update_options.rb +0 -2
  397. data/test/rubygems/test_gem_installer.rb +192 -71
  398. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  399. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  400. data/test/rubygems/test_gem_package.rb +33 -31
  401. data/test/rubygems/test_gem_package_old.rb +0 -2
  402. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  403. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  404. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  405. data/test/rubygems/test_gem_package_tar_writer.rb +8 -5
  406. data/test/rubygems/test_gem_package_task.rb +46 -13
  407. data/test/rubygems/test_gem_path_support.rb +0 -2
  408. data/test/rubygems/test_gem_platform.rb +0 -2
  409. data/test/rubygems/test_gem_rdoc.rb +0 -2
  410. data/test/rubygems/test_gem_remote_fetcher.rb +156 -195
  411. data/test/rubygems/test_gem_request.rb +11 -15
  412. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  413. data/test/rubygems/test_gem_request_set.rb +72 -22
  414. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  415. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -2
  416. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  417. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  418. data/test/rubygems/test_gem_requirement.rb +10 -4
  419. data/test/rubygems/test_gem_resolver.rb +6 -8
  420. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  421. data/test/rubygems/test_gem_resolver_api_set.rb +3 -5
  422. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
  423. data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
  424. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  425. data/test/rubygems/test_gem_resolver_conflict.rb +0 -2
  426. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  427. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  428. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  429. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  430. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  431. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  432. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  433. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  434. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  435. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  436. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  437. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  438. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -2
  439. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  440. data/test/rubygems/test_gem_security.rb +20 -22
  441. data/test/rubygems/test_gem_security_policy.rb +5 -10
  442. data/test/rubygems/test_gem_security_signer.rb +8 -10
  443. data/test/rubygems/test_gem_security_trust_dir.rb +2 -4
  444. data/test/rubygems/test_gem_server.rb +10 -14
  445. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  446. data/test/rubygems/test_gem_source.rb +12 -16
  447. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  448. data/test/rubygems/test_gem_source_git.rb +12 -13
  449. data/test/rubygems/test_gem_source_installed.rb +7 -9
  450. data/test/rubygems/test_gem_source_list.rb +1 -2
  451. data/test/rubygems/test_gem_source_local.rb +8 -10
  452. data/test/rubygems/test_gem_source_lock.rb +10 -12
  453. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  454. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  455. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  456. data/test/rubygems/test_gem_specification.rb +179 -129
  457. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  458. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  459. data/test/rubygems/test_gem_text.rb +1 -3
  460. data/test/rubygems/test_gem_uninstaller.rb +133 -11
  461. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  462. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  463. data/test/rubygems/test_gem_util.rb +7 -7
  464. data/test/rubygems/test_gem_validator.rb +0 -2
  465. data/test/rubygems/test_gem_version.rb +1 -3
  466. data/test/rubygems/test_gem_version_option.rb +0 -2
  467. data/test/rubygems/test_kernel.rb +25 -10
  468. data/test/rubygems/test_project_sanity.rb +7 -2
  469. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  470. data/test/rubygems/test_require.rb +241 -47
  471. metadata +59 -96
  472. data/.bundle/config +0 -2
  473. data/.rubocop.yml +0 -91
  474. data/Gemfile +0 -8
  475. data/Gemfile.lock +0 -43
  476. data/bundler/CODE_OF_CONDUCT.md +0 -136
  477. data/bundler/man/bundle-add.1.txt +0 -58
  478. data/bundler/man/bundle-binstubs.1.txt +0 -48
  479. data/bundler/man/bundle-cache.1.txt +0 -78
  480. data/bundler/man/bundle-check.1.txt +0 -33
  481. data/bundler/man/bundle-clean.1.txt +0 -26
  482. data/bundler/man/bundle-config.1.txt +0 -528
  483. data/bundler/man/bundle-doctor.1.txt +0 -44
  484. data/bundler/man/bundle-exec.1.txt +0 -178
  485. data/bundler/man/bundle-gem.1.txt +0 -91
  486. data/bundler/man/bundle-info.1.txt +0 -21
  487. data/bundler/man/bundle-init.1.txt +0 -34
  488. data/bundler/man/bundle-inject.1.txt +0 -32
  489. data/bundler/man/bundle-install.1.txt +0 -401
  490. data/bundler/man/bundle-list.1.txt +0 -43
  491. data/bundler/man/bundle-lock.1.txt +0 -93
  492. data/bundler/man/bundle-open.1.txt +0 -29
  493. data/bundler/man/bundle-outdated.1.txt +0 -131
  494. data/bundler/man/bundle-platform.1.txt +0 -57
  495. data/bundler/man/bundle-pristine.1.txt +0 -44
  496. data/bundler/man/bundle-remove.1.txt +0 -34
  497. data/bundler/man/bundle-show.1.txt +0 -27
  498. data/bundler/man/bundle-update.1.txt +0 -390
  499. data/bundler/man/bundle-viz.1.txt +0 -39
  500. data/bundler/man/bundle.1.txt +0 -116
  501. data/bundler/man/gemfile.5.txt +0 -649
  502. data/bundler/man/index.txt +0 -25
  503. data/lib/rubygems/source_local.rb +0 -7
  504. data/lib/rubygems/source_specific_file.rb +0 -6
  505. data/lib/ubygems.rb +0 -14
  506. data/tmp/.keep +0 -0
  507. data/util/CL2notes +0 -55
  508. data/util/bisect +0 -10
  509. data/util/ci.sh +0 -62
  510. data/util/cops/deprecations.rb +0 -52
  511. data/util/create_certs.rb +0 -171
  512. data/util/create_certs.sh +0 -27
  513. data/util/create_encrypted_key.rb +0 -16
  514. data/util/generate_spdx_license_list.rb +0 -63
  515. data/util/patch_with_prs.rb +0 -77
  516. data/util/rubocop +0 -8
  517. data/util/update_bundled_ca_certificates.rb +0 -139
  518. data/util/update_changelog.rb +0 -67
@@ -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,43 @@ 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
+ assert_nil @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
+ end
82
+
83
+ def test_info_succeeds
84
+ args = %w[info]
85
+
86
+ use_ui @ui do
87
+ assert_nil @runner.run(args)
88
+ end
89
+
90
+ assert_empty @ui.error
91
+ end
92
+
93
+ def test_list_succeeds
94
+ args = %w[list]
95
+
96
+ use_ui @ui do
97
+ assert_nil @runner.run(args)
98
+ end
99
+
100
+ assert_empty @ui.error
101
+ end
102
+
103
+ def test_search_succeeds
104
+ args = %w[search]
105
+
106
+ use_ui @ui do
107
+ assert_nil @runner.run(args)
108
+ end
109
+
110
+ assert_empty @ui.error
111
+ end
70
112
  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,6 +24,8 @@ 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
 
@@ -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
 
@@ -193,5 +192,4 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
193
192
 
194
193
  assert_equal true, @cmd.options[:post_install_message]
195
194
  end
196
-
197
195
  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
86
  installer = setup_base_installer
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,7 +137,7 @@ 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
@@ -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
@@ -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
@@ -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,127 @@ 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 not written to user plugins_dir'
798
+ assert File.exist?(user_path), 'plugin not written to user plugins_dir'
799
+ end
800
+
801
+ def test_keeps_plugins_up_to_date
802
+ # NOTE: version a-2 is already installed by setup hooks
803
+
804
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
805
+ io.write "puts __FILE__"
806
+ end
807
+
808
+ build_rake_in do
809
+ util_setup_installer do |spec|
810
+ spec.version = '1'
811
+ spec.files += %w[lib/rubygems_plugin.rb]
812
+ end.install
813
+
814
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
815
+ refute File.exist?(plugin_path), 'old version installed while newer version without plugin also installed, but plugin written'
816
+
817
+ util_setup_installer do |spec|
818
+ spec.version = '2'
819
+ spec.files += %w[lib/rubygems_plugin.rb]
820
+ end.install
821
+
822
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
823
+ assert File.exist?(plugin_path), 'latest version reinstalled, but plugin not written'
824
+ assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
825
+
826
+ util_setup_installer do |spec|
827
+ spec.version = '3'
828
+ spec.files += %w[lib/rubygems_plugin.rb]
829
+ end.install
830
+
831
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
832
+ assert File.exist?(plugin_path), 'latest version installed, but plugin removed'
833
+ assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
834
+
835
+ util_setup_installer do |spec|
836
+ spec.version = '4'
837
+ end.install
838
+
839
+ refute File.exist?(plugin_path), 'new version installed without a plugin while older version with a plugin installed, but plugin not removed'
840
+ end
841
+ end
842
+
843
+ def test_generates_plugins_dir_under_install_dir_if_not_there
844
+ Gem.use_paths "#{@gemhome}2" # Set GEM_HOME to an uninitialized repo
845
+
846
+ @spec = util_spec 'a'
847
+
848
+ path = Gem::Package.build @spec
849
+
850
+ installer = Gem::Installer.at path, :install_dir => "#{@gemhome}3"
851
+ assert_equal @spec, installer.install
852
+ end
853
+
760
854
  def test_initialize
761
855
  spec = util_spec 'a' do |s|
762
856
  s.platform = Gem::Platform.new 'mswin32'
@@ -953,7 +1047,13 @@ gem 'other', version
953
1047
  end
954
1048
 
955
1049
  def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
956
- install_default_gems new_default_spec('default', '2')
1050
+ default_spec = new_default_spec('default', '2', nil, 'exe/executable')
1051
+ default_spec.executables = 'executable'
1052
+ install_default_gems default_spec
1053
+
1054
+ exe = File.join @gemhome, 'bin', 'executable'
1055
+
1056
+ assert_path_exists exe, "default gem's executable not installed"
957
1057
 
958
1058
  installer = util_setup_installer do |spec|
959
1059
  spec.name = 'default'
@@ -971,8 +1071,6 @@ gem 'other', version
971
1071
  end
972
1072
  end
973
1073
 
974
- exe = File.join @gemhome, 'bin', 'executable'
975
-
976
1074
  e = assert_raises RuntimeError do
977
1075
  instance_eval File.read(exe)
978
1076
  end
@@ -1166,7 +1264,7 @@ gem 'other', version
1166
1264
  installer.install
1167
1265
  end
1168
1266
 
1169
- assert_match %r|I am a shiny gem!|, @ui.output
1267
+ assert_match %r{I am a shiny gem!}, @ui.output
1170
1268
  end
1171
1269
 
1172
1270
  def test_install_with_skipped_message
@@ -1180,7 +1278,7 @@ gem 'other', version
1180
1278
  installer.install
1181
1279
  end
1182
1280
 
1183
- refute_match %r|I am a shiny gem!|, @ui.output
1281
+ refute_match %r{I am a shiny gem!}, @ui.output
1184
1282
  end
1185
1283
 
1186
1284
  def test_install_extension_dir
@@ -1316,7 +1414,7 @@ gem 'other', version
1316
1414
  installer.install
1317
1415
  end
1318
1416
 
1319
- expected = File.join @spec.full_require_paths.find { |path|
1417
+ expected = File.join @spec.full_require_paths.find {|path|
1320
1418
  File.exist? File.join path, 'b.rb'
1321
1419
  }, 'b.rb'
1322
1420
  assert_equal expected, @spec.matches_for_glob('b.rb').first
@@ -1384,7 +1482,7 @@ gem 'other', version
1384
1482
  end
1385
1483
 
1386
1484
  # empty depend file for no auto dependencies
1387
- @spec.files += %W"depend #{@spec.name}.c".each do |file|
1485
+ @spec.files += %W[depend #{@spec.name}.c].each do |file|
1388
1486
  write_file File.join(@tempdir, file)
1389
1487
  end
1390
1488
 
@@ -1739,9 +1837,9 @@ gem 'other', version
1739
1837
 
1740
1838
  shebang = installer.shebang 'executable'
1741
1839
 
1742
- env_shebang = "/usr/bin/env" unless Gem.win_platform?
1840
+ bin_env = get_bin_env
1743
1841
 
1744
- assert_equal("#!#{env_shebang} #{RbConfig::CONFIG['ruby_install_name']}",
1842
+ assert_equal("#!#{bin_env} #{RbConfig::CONFIG['ruby_install_name']}",
1745
1843
  shebang)
1746
1844
  end
1747
1845
 
@@ -1820,10 +1918,18 @@ gem 'other', version
1820
1918
  assert_equal "#!test", shebang
1821
1919
  end
1822
1920
 
1921
+ def get_bin_env
1922
+ if win_platform?
1923
+ ""
1924
+ else
1925
+ %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) }
1926
+ end
1927
+ end
1928
+
1823
1929
  def test_shebang_custom_with_expands
1824
1930
  installer = setup_base_installer
1825
1931
 
1826
- bin_env = win_platform? ? '' : '/usr/bin/env'
1932
+ bin_env = get_bin_env
1827
1933
  conf = Gem::ConfigFile.new []
1828
1934
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
1829
1935
 
@@ -1839,7 +1945,7 @@ gem 'other', version
1839
1945
  def test_shebang_custom_with_expands_and_arguments
1840
1946
  installer = setup_base_installer
1841
1947
 
1842
- bin_env = win_platform? ? '' : '/usr/bin/env'
1948
+ bin_env = get_bin_env
1843
1949
  conf = Gem::ConfigFile.new []
1844
1950
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
1845
1951
 
@@ -1964,7 +2070,7 @@ gem 'other', version
1964
2070
  def test_dir
1965
2071
  installer = setup_base_installer
1966
2072
 
1967
- assert_match %r!/gemhome/gems/a-2$!, installer.dir
2073
+ assert_match %r{/gemhome/gems/a-2$}, installer.dir
1968
2074
  end
1969
2075
 
1970
2076
  def test_default_gem_loaded_from
@@ -2004,7 +2110,13 @@ gem 'other', version
2004
2110
  assert_path_exists installed_exec
2005
2111
 
2006
2112
  wrapper = File.read installed_exec
2007
- refute_match %r|generated by RubyGems|, wrapper
2113
+
2114
+ if symlink_supported?
2115
+ refute_match %r{generated by RubyGems}, wrapper
2116
+ else # when symlink not supported, it warns and fallbacks back to installing wrapper
2117
+ assert_match %r{Unable to use symlinks, installing wrapper}, @ui.error
2118
+ assert_match %r{generated by RubyGems}, wrapper
2119
+ end
2008
2120
  end
2009
2121
 
2010
2122
  def test_default_gem_with_wrappers
@@ -2024,7 +2136,7 @@ gem 'other', version
2024
2136
  assert_path_exists installed_exec
2025
2137
 
2026
2138
  wrapper = File.read installed_exec
2027
- assert_match %r|generated by RubyGems|, wrapper
2139
+ assert_match %r{generated by RubyGems}, wrapper
2028
2140
  end
2029
2141
 
2030
2142
  def test_default_gem_with_exe_as_bindir
@@ -2067,6 +2179,16 @@ gem 'other', version
2067
2179
  assert_kind_of(Gem::Package, installer.package)
2068
2180
  end
2069
2181
 
2182
+ def test_gem_attribute
2183
+ gem = quick_gem 'c' do |spec|
2184
+ util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2185
+ end
2186
+
2187
+ installer = util_installer(gem, @gemhome)
2188
+ assert_respond_to(installer, :gem)
2189
+ assert_kind_of(String, installer.gem)
2190
+ end
2191
+
2070
2192
  def old_ruby_required(requirement)
2071
2193
  spec = util_spec 'old_ruby_required', '1' do |s|
2072
2194
  s.required_ruby_version = requirement
@@ -2097,7 +2219,6 @@ gem 'other', version
2097
2219
  end
2098
2220
 
2099
2221
  def mask
2100
- 0100755 & (~File.umask)
2222
+ 0100755
2101
2223
  end
2102
-
2103
2224
  end