rubygems-update 3.1.6 → 3.2.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (347) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +1 -2
  4. data/History.txt +122 -14
  5. data/Manifest.txt +13 -25
  6. data/POLICIES.md +2 -9
  7. data/README.md +1 -1
  8. data/Rakefile +31 -33
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +806 -741
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +16 -30
  13. data/bundler/bundler.gemspec +3 -3
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +15 -4
  16. data/bundler/lib/bundler/build_metadata.rb +2 -2
  17. data/bundler/lib/bundler/cli.rb +32 -11
  18. data/bundler/lib/bundler/cli/console.rb +1 -1
  19. data/bundler/lib/bundler/cli/gem.rb +83 -10
  20. data/bundler/lib/bundler/cli/info.rb +13 -3
  21. data/bundler/lib/bundler/cli/init.rb +1 -1
  22. data/bundler/lib/bundler/cli/install.rb +5 -14
  23. data/bundler/lib/bundler/cli/issue.rb +2 -2
  24. data/bundler/lib/bundler/cli/list.rb +11 -9
  25. data/bundler/lib/bundler/cli/outdated.rb +88 -65
  26. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  27. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  28. data/bundler/lib/bundler/definition.rb +32 -32
  29. data/bundler/lib/bundler/dependency.rb +0 -9
  30. data/bundler/lib/bundler/dsl.rb +1 -5
  31. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  32. data/bundler/lib/bundler/errors.rb +1 -0
  33. data/bundler/lib/bundler/feature_flag.rb +0 -2
  34. data/bundler/lib/bundler/fetcher.rb +1 -0
  35. data/bundler/lib/bundler/friendly_errors.rb +4 -10
  36. data/bundler/lib/bundler/gem_helper.rb +17 -10
  37. data/bundler/lib/bundler/gem_version_promoter.rb +1 -1
  38. data/bundler/lib/bundler/injector.rb +14 -3
  39. data/bundler/lib/bundler/inline.rb +1 -1
  40. data/bundler/lib/bundler/installer.rb +29 -28
  41. data/bundler/lib/bundler/installer/gem_installer.rb +2 -2
  42. data/bundler/lib/bundler/installer/parallel_installer.rb +9 -9
  43. data/bundler/lib/bundler/lazy_specification.rb +16 -3
  44. data/bundler/lib/bundler/plugin.rb +26 -0
  45. data/bundler/lib/bundler/plugin/index.rb +9 -0
  46. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  47. data/bundler/lib/bundler/remote_specification.rb +4 -1
  48. data/bundler/lib/bundler/resolver.rb +31 -8
  49. data/bundler/lib/bundler/resolver/spec_group.rb +26 -5
  50. data/bundler/lib/bundler/rubygems_ext.rb +7 -8
  51. data/bundler/lib/bundler/rubygems_gem_installer.rb +1 -7
  52. data/bundler/lib/bundler/rubygems_integration.rb +3 -48
  53. data/bundler/lib/bundler/runtime.rb +2 -12
  54. data/bundler/lib/bundler/settings.rb +0 -3
  55. data/bundler/lib/bundler/shared_helpers.rb +1 -1
  56. data/bundler/lib/bundler/source/git.rb +4 -4
  57. data/bundler/lib/bundler/source/git/git_proxy.rb +53 -58
  58. data/bundler/lib/bundler/source/path.rb +5 -1
  59. data/bundler/lib/bundler/source/path/installer.rb +7 -9
  60. data/bundler/lib/bundler/source/rubygems.rb +11 -14
  61. data/bundler/lib/bundler/stub_specification.rb +16 -4
  62. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  63. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  64. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  65. data/bundler/lib/bundler/templates/newgem/bin/console.tt +2 -0
  66. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  67. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  68. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  69. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  70. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
  71. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  72. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -4
  73. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  74. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  75. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -0
  76. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  77. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  78. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  79. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  80. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +75 -189
  81. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  82. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  83. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  84. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  85. data/bundler/lib/bundler/version.rb +1 -1
  86. data/bundler/man/bundle-add.1 +1 -1
  87. data/bundler/man/bundle-add.1.txt +15 -15
  88. data/bundler/man/bundle-binstubs.1 +1 -1
  89. data/bundler/man/bundle-binstubs.1.txt +10 -10
  90. data/bundler/man/bundle-cache.1 +1 -1
  91. data/bundler/man/bundle-cache.1.txt +15 -15
  92. data/bundler/man/bundle-check.1 +1 -1
  93. data/bundler/man/bundle-check.1.txt +8 -8
  94. data/bundler/man/bundle-clean.1 +1 -1
  95. data/bundler/man/bundle-clean.1.txt +6 -6
  96. data/bundler/man/bundle-config.1 +3 -9
  97. data/bundler/man/bundle-config.1.txt +271 -272
  98. data/bundler/man/bundle-config.ronn +5 -9
  99. data/bundler/man/bundle-doctor.1 +1 -1
  100. data/bundler/man/bundle-doctor.1.txt +9 -9
  101. data/bundler/man/bundle-exec.1 +1 -1
  102. data/bundler/man/bundle-exec.1.txt +84 -81
  103. data/bundler/man/bundle-gem.1 +25 -3
  104. data/bundler/man/bundle-gem.1.txt +65 -39
  105. data/bundler/man/bundle-gem.ronn +30 -7
  106. data/bundler/man/bundle-info.1 +1 -1
  107. data/bundler/man/bundle-info.1.txt +2 -2
  108. data/bundler/man/bundle-init.1 +1 -1
  109. data/bundler/man/bundle-init.1.txt +9 -9
  110. data/bundler/man/bundle-inject.1 +1 -1
  111. data/bundler/man/bundle-inject.1.txt +4 -4
  112. data/bundler/man/bundle-install.1 +1 -1
  113. data/bundler/man/bundle-install.1.txt +169 -169
  114. data/bundler/man/bundle-list.1 +7 -7
  115. data/bundler/man/bundle-list.1.txt +12 -11
  116. data/bundler/man/bundle-list.ronn +6 -6
  117. data/bundler/man/bundle-lock.1 +1 -1
  118. data/bundler/man/bundle-lock.1.txt +28 -28
  119. data/bundler/man/bundle-open.1 +1 -1
  120. data/bundler/man/bundle-open.1.txt +3 -3
  121. data/bundler/man/bundle-outdated.1 +1 -1
  122. data/bundler/man/bundle-outdated.1.txt +34 -34
  123. data/bundler/man/bundle-platform.1 +1 -1
  124. data/bundler/man/bundle-platform.1.txt +16 -16
  125. data/bundler/man/bundle-pristine.1 +1 -1
  126. data/bundler/man/bundle-pristine.1.txt +8 -8
  127. data/bundler/man/bundle-remove.1 +1 -1
  128. data/bundler/man/bundle-remove.1.txt +9 -9
  129. data/bundler/man/bundle-show.1 +1 -1
  130. data/bundler/man/bundle-show.1.txt +8 -8
  131. data/bundler/man/bundle-update.1 +1 -1
  132. data/bundler/man/bundle-update.1.txt +149 -148
  133. data/bundler/man/bundle-viz.1 +1 -1
  134. data/bundler/man/bundle-viz.1.txt +11 -11
  135. data/bundler/man/bundle.1 +1 -1
  136. data/bundler/man/bundle.1.txt +31 -31
  137. data/bundler/man/gemfile.5 +1 -1
  138. data/bundler/man/gemfile.5.txt +218 -216
  139. data/lib/rubygems.rb +68 -148
  140. data/lib/rubygems/available_set.rb +4 -4
  141. data/lib/rubygems/basic_specification.rb +11 -5
  142. data/lib/rubygems/bundler_version_finder.rb +14 -9
  143. data/lib/rubygems/command.rb +16 -14
  144. data/lib/rubygems/command_manager.rb +4 -3
  145. data/lib/rubygems/commands/cert_command.rb +1 -1
  146. data/lib/rubygems/commands/cleanup_command.rb +3 -3
  147. data/lib/rubygems/commands/contents_command.rb +4 -4
  148. data/lib/rubygems/commands/dependency_command.rb +6 -6
  149. data/lib/rubygems/commands/fetch_command.rb +2 -2
  150. data/lib/rubygems/commands/help_command.rb +1 -1
  151. data/lib/rubygems/commands/info_command.rb +9 -4
  152. data/lib/rubygems/commands/install_command.rb +3 -3
  153. data/lib/rubygems/commands/list_command.rb +9 -6
  154. data/lib/rubygems/commands/lock_command.rb +1 -1
  155. data/lib/rubygems/commands/open_command.rb +0 -2
  156. data/lib/rubygems/commands/pristine_command.rb +10 -2
  157. data/lib/rubygems/commands/push_command.rb +4 -42
  158. data/lib/rubygems/commands/query_command.rb +7 -352
  159. data/lib/rubygems/commands/search_command.rb +8 -6
  160. data/lib/rubygems/commands/setup_command.rb +128 -32
  161. data/lib/rubygems/commands/specification_command.rb +2 -2
  162. data/lib/rubygems/commands/stale_command.rb +1 -1
  163. data/lib/rubygems/commands/uninstall_command.rb +1 -1
  164. data/lib/rubygems/commands/unpack_command.rb +1 -1
  165. data/lib/rubygems/commands/update_command.rb +40 -10
  166. data/lib/rubygems/config_file.rb +11 -2
  167. data/lib/rubygems/core_ext/kernel_require.rb +2 -2
  168. data/lib/rubygems/defaults.rb +99 -5
  169. data/lib/rubygems/dependency.rb +2 -5
  170. data/lib/rubygems/dependency_installer.rb +1 -73
  171. data/lib/rubygems/dependency_list.rb +7 -7
  172. data/lib/rubygems/deprecate.rb +46 -1
  173. data/lib/rubygems/doctor.rb +4 -2
  174. data/lib/rubygems/errors.rb +3 -2
  175. data/lib/rubygems/exceptions.rb +2 -13
  176. data/lib/rubygems/ext.rb +6 -6
  177. data/lib/rubygems/ext/build_error.rb +2 -0
  178. data/lib/rubygems/ext/builder.rb +1 -1
  179. data/lib/rubygems/ext/cmake_builder.rb +1 -1
  180. data/lib/rubygems/ext/ext_conf_builder.rb +6 -7
  181. data/lib/rubygems/gem_runner.rb +3 -8
  182. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  183. data/lib/rubygems/indexer.rb +1 -19
  184. data/lib/rubygems/install_update_options.rb +5 -5
  185. data/lib/rubygems/installer.rb +45 -42
  186. data/lib/rubygems/installer_test_case.rb +19 -2
  187. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  188. data/lib/rubygems/local_remote_options.rb +1 -1
  189. data/lib/rubygems/name_tuple.rb +2 -4
  190. data/lib/rubygems/package.rb +8 -13
  191. data/lib/rubygems/package/old.rb +1 -1
  192. data/lib/rubygems/package/tar_header.rb +3 -3
  193. data/lib/rubygems/package/tar_reader.rb +0 -1
  194. data/lib/rubygems/package/tar_reader/entry.rb +0 -1
  195. data/lib/rubygems/package/tar_test_case.rb +1 -1
  196. data/lib/rubygems/package/tar_writer.rb +2 -6
  197. data/lib/rubygems/package_task.rb +1 -5
  198. data/lib/rubygems/path_support.rb +1 -1
  199. data/lib/rubygems/platform.rb +3 -3
  200. data/lib/rubygems/query_utils.rb +362 -0
  201. data/lib/rubygems/rdoc.rb +0 -12
  202. data/lib/rubygems/remote_fetcher.rb +5 -19
  203. data/lib/rubygems/request/connection_pools.rb +1 -1
  204. data/lib/rubygems/request_set.rb +5 -5
  205. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  206. data/lib/rubygems/request_set/lockfile.rb +8 -8
  207. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
  208. data/lib/rubygems/requirement.rb +14 -15
  209. data/lib/rubygems/resolver.rb +7 -8
  210. data/lib/rubygems/resolver/api_set.rb +3 -3
  211. data/lib/rubygems/resolver/composed_set.rb +3 -3
  212. data/lib/rubygems/resolver/conflict.rb +1 -1
  213. data/lib/rubygems/resolver/index_set.rb +1 -1
  214. data/lib/rubygems/resolver/installer_set.rb +3 -3
  215. data/lib/rubygems/resolver/lock_set.rb +1 -1
  216. data/lib/rubygems/safe_yaml.rb +4 -4
  217. data/lib/rubygems/security.rb +25 -25
  218. data/lib/rubygems/security/policy.rb +3 -3
  219. data/lib/rubygems/security/signer.rb +4 -4
  220. data/lib/rubygems/security/trust_dir.rb +1 -1
  221. data/lib/rubygems/server.rb +8 -8
  222. data/lib/rubygems/source/git.rb +7 -6
  223. data/lib/rubygems/source/local.rb +2 -2
  224. data/lib/rubygems/source_list.rb +4 -5
  225. data/lib/rubygems/spec_fetcher.rb +18 -15
  226. data/lib/rubygems/specification.rb +79 -104
  227. data/lib/rubygems/specification_policy.rb +79 -27
  228. data/lib/rubygems/ssl_certs/{rubygems.org → index.rubygems.org}/GlobalSignRootCA.pem +0 -0
  229. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +23 -0
  230. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +25 -0
  231. data/lib/rubygems/test_case.rb +63 -83
  232. data/lib/rubygems/test_utilities.rb +6 -6
  233. data/lib/rubygems/uninstaller.rb +35 -14
  234. data/lib/rubygems/user_interaction.rb +1 -10
  235. data/lib/rubygems/util.rb +10 -2
  236. data/lib/rubygems/util/licenses.rb +4 -4
  237. data/lib/rubygems/validator.rb +1 -1
  238. data/lib/rubygems/version.rb +4 -4
  239. data/rubygems-update.gemspec +2 -2
  240. data/setup.rb +2 -7
  241. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  242. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -2
  243. data/test/rubygems/test_bundled_ca.rb +4 -12
  244. data/test/rubygems/test_deprecate.rb +43 -4
  245. data/test/rubygems/test_gem.rb +79 -74
  246. data/test/rubygems/test_gem_available_set.rb +3 -3
  247. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -1
  248. data/test/rubygems/test_gem_command.rb +24 -3
  249. data/test/rubygems/test_gem_command_manager.rb +37 -4
  250. data/test/rubygems/test_gem_commands_build_command.rb +7 -2
  251. data/test/rubygems/test_gem_commands_cert_command.rb +2 -2
  252. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -1
  253. data/test/rubygems/test_gem_commands_contents_command.rb +48 -15
  254. data/test/rubygems/test_gem_commands_environment_command.rb +21 -21
  255. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -5
  256. data/test/rubygems/test_gem_commands_info_command.rb +6 -6
  257. data/test/rubygems/test_gem_commands_install_command.rb +31 -31
  258. data/test/rubygems/test_gem_commands_mirror.rb +1 -1
  259. data/test/rubygems/test_gem_commands_open_command.rb +4 -4
  260. data/test/rubygems/test_gem_commands_owner_command.rb +11 -3
  261. data/test/rubygems/test_gem_commands_pristine_command.rb +41 -8
  262. data/test/rubygems/test_gem_commands_push_command.rb +7 -2
  263. data/test/rubygems/test_gem_commands_query_command.rb +9 -5
  264. data/test/rubygems/test_gem_commands_setup_command.rb +160 -108
  265. data/test/rubygems/test_gem_commands_signin_command.rb +6 -4
  266. data/test/rubygems/test_gem_commands_signout_command.rb +0 -5
  267. data/test/rubygems/test_gem_commands_specification_command.rb +18 -18
  268. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
  269. data/test/rubygems/test_gem_commands_update_command.rb +68 -5
  270. data/test/rubygems/test_gem_commands_which_command.rb +3 -3
  271. data/test/rubygems/test_gem_commands_yank_command.rb +14 -6
  272. data/test/rubygems/test_gem_config_file.rb +7 -10
  273. data/test/rubygems/test_gem_dependency_installer.rb +52 -189
  274. data/test/rubygems/test_gem_dependency_list.rb +8 -8
  275. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -1
  276. data/test/rubygems/test_gem_doctor.rb +28 -0
  277. data/test/rubygems/test_gem_ext_builder.rb +14 -25
  278. data/test/rubygems/test_gem_ext_cmake_builder.rb +13 -12
  279. data/test/rubygems/test_gem_ext_configure_builder.rb +1 -9
  280. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -1
  281. data/test/rubygems/test_gem_ext_rake_builder.rb +9 -9
  282. data/test/rubygems/test_gem_gem_runner.rb +42 -0
  283. data/test/rubygems/test_gem_gemcutter_utilities.rb +5 -0
  284. data/test/rubygems/test_gem_indexer.rb +9 -13
  285. data/test/rubygems/test_gem_installer.rb +149 -45
  286. data/test/rubygems/test_gem_package.rb +13 -12
  287. data/test/rubygems/test_gem_package_tar_header.rb +19 -0
  288. data/test/rubygems/test_gem_package_tar_writer.rb +3 -3
  289. data/test/rubygems/test_gem_package_task.rb +46 -11
  290. data/test/rubygems/test_gem_remote_fetcher.rb +152 -190
  291. data/test/rubygems/test_gem_request.rb +11 -11
  292. data/test/rubygems/test_gem_request_set.rb +20 -20
  293. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -3
  294. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -9
  295. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
  296. data/test/rubygems/test_gem_requirement.rb +2 -2
  297. data/test/rubygems/test_gem_resolver.rb +6 -6
  298. data/test/rubygems/test_gem_resolver_api_set.rb +3 -3
  299. data/test/rubygems/test_gem_resolver_best_set.rb +2 -2
  300. data/test/rubygems/test_gem_resolver_index_set.rb +2 -2
  301. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -7
  302. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -3
  303. data/test/rubygems/test_gem_security.rb +20 -20
  304. data/test/rubygems/test_gem_security_policy.rb +5 -8
  305. data/test/rubygems/test_gem_security_signer.rb +8 -8
  306. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  307. data/test/rubygems/test_gem_server.rb +10 -10
  308. data/test/rubygems/test_gem_source.rb +12 -14
  309. data/test/rubygems/test_gem_source_git.rb +12 -11
  310. data/test/rubygems/test_gem_source_installed.rb +7 -7
  311. data/test/rubygems/test_gem_source_local.rb +8 -8
  312. data/test/rubygems/test_gem_source_lock.rb +10 -10
  313. data/test/rubygems/test_gem_source_specific_file.rb +7 -7
  314. data/test/rubygems/test_gem_source_vendor.rb +7 -7
  315. data/test/rubygems/test_gem_spec_fetcher.rb +11 -2
  316. data/test/rubygems/test_gem_specification.rb +143 -113
  317. data/test/rubygems/test_gem_stream_ui.rb +3 -1
  318. data/test/rubygems/test_gem_text.rb +1 -1
  319. data/test/rubygems/test_gem_uninstaller.rb +134 -10
  320. data/test/rubygems/test_gem_util.rb +7 -5
  321. data/test/rubygems/test_gem_version.rb +1 -1
  322. data/test/rubygems/test_kernel.rb +10 -12
  323. data/test/rubygems/test_project_sanity.rb +8 -1
  324. data/test/rubygems/test_require.rb +141 -43
  325. metadata +32 -45
  326. data/.bundle/config +0 -2
  327. data/.rubocop.yml +0 -91
  328. data/Gemfile +0 -8
  329. data/Gemfile.lock +0 -43
  330. data/bundler/CODE_OF_CONDUCT.md +0 -136
  331. data/lib/rubygems/source_local.rb +0 -7
  332. data/lib/rubygems/source_specific_file.rb +0 -6
  333. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +0 -21
  334. data/lib/ubygems.rb +0 -14
  335. data/tmp/.keep +0 -0
  336. data/util/CL2notes +0 -55
  337. data/util/bisect +0 -10
  338. data/util/ci.sh +0 -62
  339. data/util/cops/deprecations.rb +0 -52
  340. data/util/create_certs.rb +0 -171
  341. data/util/create_certs.sh +0 -27
  342. data/util/create_encrypted_key.rb +0 -16
  343. data/util/generate_spdx_license_list.rb +0 -63
  344. data/util/patch_with_prs.rb +0 -77
  345. data/util/rubocop +0 -8
  346. data/util/update_bundled_ca_certificates.rb +0 -137
  347. data/util/update_changelog.rb +0 -64
@@ -3,24 +3,6 @@ require 'rubygems/installer_test_case'
3
3
 
4
4
  class TestGemInstaller < Gem::InstallerTestCase
5
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
6
  def setup
25
7
  super
26
8
  common_installer_setup
@@ -98,7 +80,7 @@ end
98
80
  assert_path_exists installed_exec
99
81
 
100
82
  wrapper = File.read installed_exec
101
- assert_match %r|generated by RubyGems|, wrapper
83
+ assert_match %r{generated by RubyGems}, wrapper
102
84
  end
103
85
 
104
86
  def test_check_executable_overwrite_default_bin_dir
@@ -114,7 +96,7 @@ end
114
96
  end
115
97
 
116
98
  conflicted = File.join @gemhome, 'bin', 'executable'
117
- assert_match %r%\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z%,
99
+ assert_match %r{\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z},
118
100
  e.message
119
101
  end
120
102
  end
@@ -156,7 +138,7 @@ gem 'other', version
156
138
  assert_path_exists installed_exec
157
139
 
158
140
  wrapper = File.read installed_exec
159
- assert_match %r|generated by RubyGems|, wrapper
141
+ assert_match %r{generated by RubyGems}, wrapper
160
142
  ensure
161
143
  Gem::Installer.exec_format = nil
162
144
  end
@@ -191,7 +173,7 @@ gem 'other', version
191
173
  assert_path_exists installed_exec
192
174
 
193
175
  wrapper = File.read installed_exec
194
- assert_match %r|generated by RubyGems|, wrapper
176
+ assert_match %r{generated by RubyGems}, wrapper
195
177
  end
196
178
 
197
179
  def test_check_executable_overwrite_other_non_gem
@@ -206,7 +188,7 @@ gem 'other', version
206
188
  assert_path_exists installed_exec
207
189
 
208
190
  wrapper = File.read installed_exec
209
- assert_match %r|generated by RubyGems|, wrapper
191
+ assert_match %r{generated by RubyGems}, wrapper
210
192
  end unless Gem.win_platform?
211
193
 
212
194
  def test_check_that_user_bin_dir_is_in_path
@@ -342,7 +324,7 @@ gem 'other', version
342
324
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
343
325
 
344
326
  wrapper = File.read installed_exec
345
- assert_match %r|generated by RubyGems|, wrapper
327
+ assert_match %r{generated by RubyGems}, wrapper
346
328
  end
347
329
 
348
330
  def test_generate_bin_bindir_with_user_install_warning
@@ -385,7 +367,7 @@ gem 'other', version
385
367
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
386
368
 
387
369
  wrapper = File.read installed_exec
388
- assert_match %r|generated by RubyGems|, wrapper
370
+ assert_match %r{generated by RubyGems}, wrapper
389
371
  end
390
372
 
391
373
  def test_generate_bin_script_format
@@ -444,7 +426,7 @@ gem 'other', version
444
426
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
445
427
 
446
428
  wrapper = File.read installed_exec
447
- assert_match %r|generated by RubyGems|, wrapper
429
+ assert_match %r{generated by RubyGems}, wrapper
448
430
  end
449
431
 
450
432
  def test_generate_bin_script_no_execs
@@ -501,7 +483,7 @@ gem 'other', version
501
483
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
502
484
 
503
485
  wrapper = File.read installed_exec
504
- assert_match %r|generated by RubyGems|, wrapper
486
+ assert_match %r{generated by RubyGems}, wrapper
505
487
  # HACK some gems don't have #! in their executables, restore 2008/06
506
488
  #assert_no_match %r|generated by RubyGems|, wrapper
507
489
  end
@@ -527,9 +509,9 @@ gem 'other', version
527
509
  assert_path_exists installed_exec
528
510
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
529
511
 
530
- assert_match %r|generated by RubyGems|, File.read(installed_exec)
512
+ assert_match %r{generated by RubyGems}, File.read(installed_exec)
531
513
 
532
- refute_match %r|generated by RubyGems|, File.read(real_exec),
514
+ refute_match %r{generated by RubyGems}, File.read(real_exec),
533
515
  'real executable overwritten'
534
516
  end
535
517
 
@@ -739,11 +721,105 @@ gem 'other', version
739
721
  installer.generate_bin
740
722
 
741
723
  default_shebang = Gem.ruby
742
- shebang_line = open("#{@gemhome}/bin/executable") { |f| f.readlines.first }
724
+ shebang_line = open("#{@gemhome}/bin/executable") {|f| f.readlines.first }
743
725
  assert_match(/\A#!/, shebang_line)
744
726
  assert_match(/#{default_shebang}/, shebang_line)
745
727
  end
746
728
 
729
+ def test_generate_plugins
730
+ installer = util_setup_installer do |spec|
731
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
732
+ io.write "puts __FILE__"
733
+ end
734
+
735
+ spec.files += %w[lib/rubygems_plugin.rb]
736
+ end
737
+
738
+ build_rake_in do
739
+ installer.install
740
+ end
741
+
742
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
743
+
744
+ FileUtils.rm plugin_path
745
+
746
+ installer.generate_plugins
747
+
748
+ assert File.exist?(plugin_path), 'plugin not written'
749
+ end
750
+
751
+ def test_generate_plugins_with_install_dir
752
+ spec = quick_gem 'a' do |s|
753
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
754
+ io.write "puts __FILE__"
755
+ end
756
+
757
+ s.files += %w[lib/rubygems_plugin.rb]
758
+ end
759
+
760
+ util_build_gem spec
761
+
762
+ plugin_path = File.join "#{@gemhome}2", 'plugins', 'a_plugin.rb'
763
+ installer = util_installer spec, "#{@gemhome}2"
764
+
765
+ assert_equal spec, installer.install
766
+
767
+ assert File.exist?(plugin_path), 'plugin not written to install_dir'
768
+ end
769
+
770
+ def test_keeps_plugins_up_to_date
771
+ # NOTE: version a-2 is already installed by setup hooks
772
+
773
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
774
+ io.write "puts __FILE__"
775
+ end
776
+
777
+ build_rake_in do
778
+ util_setup_installer do |spec|
779
+ spec.version = '1'
780
+ spec.files += %w[lib/rubygems_plugin.rb]
781
+ end.install
782
+
783
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
784
+ refute File.exist?(plugin_path), 'old version installed while newer version without plugin also installed, but plugin written'
785
+
786
+ util_setup_installer do |spec|
787
+ spec.version = '2'
788
+ spec.files += %w[lib/rubygems_plugin.rb]
789
+ end.install
790
+
791
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
792
+ assert File.exist?(plugin_path), 'latest version reinstalled, but plugin not written'
793
+ assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
794
+
795
+ util_setup_installer do |spec|
796
+ spec.version = '3'
797
+ spec.files += %w[lib/rubygems_plugin.rb]
798
+ end.install
799
+
800
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
801
+ assert File.exist?(plugin_path), 'latest version installed, but plugin removed'
802
+ assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
803
+
804
+ util_setup_installer do |spec|
805
+ spec.version = '4'
806
+ end.install
807
+
808
+ refute File.exist?(plugin_path), 'new version installed without a plugin while older version with a plugin installed, but plugin not removed'
809
+ end
810
+ end
811
+
812
+ def test_generates_plugins_dir_under_install_dir_if_not_there
813
+ Gem.use_paths "#{@gemhome}2" # Set GEM_HOME to an uninitialized repo
814
+
815
+ @spec = util_spec 'a'
816
+
817
+ path = Gem::Package.build @spec
818
+
819
+ installer = Gem::Installer.at path, :install_dir => "#{@gemhome}3"
820
+ assert_equal @spec, installer.install
821
+ end
822
+
747
823
  def test_initialize
748
824
  spec = util_spec 'a' do |s|
749
825
  s.platform = Gem::Platform.new 'mswin32'
@@ -940,7 +1016,13 @@ gem 'other', version
940
1016
  end
941
1017
 
942
1018
  def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
943
- install_default_gems new_default_spec('default', '2')
1019
+ default_spec = new_default_spec('default', '2', nil, 'exe/executable')
1020
+ default_spec.executables = 'executable'
1021
+ install_default_gems default_spec
1022
+
1023
+ exe = File.join @gemhome, 'bin', 'executable'
1024
+
1025
+ assert_path_exists exe, "default gem's executable not installed"
944
1026
 
945
1027
  installer = util_setup_installer do |spec|
946
1028
  spec.name = 'default'
@@ -958,8 +1040,6 @@ gem 'other', version
958
1040
  end
959
1041
  end
960
1042
 
961
- exe = File.join @gemhome, 'bin', 'executable'
962
-
963
1043
  e = assert_raises RuntimeError do
964
1044
  instance_eval File.read(exe)
965
1045
  end
@@ -1153,7 +1233,7 @@ gem 'other', version
1153
1233
  installer.install
1154
1234
  end
1155
1235
 
1156
- assert_match %r|I am a shiny gem!|, @ui.output
1236
+ assert_match %r{I am a shiny gem!}, @ui.output
1157
1237
  end
1158
1238
 
1159
1239
  def test_install_with_skipped_message
@@ -1167,7 +1247,7 @@ gem 'other', version
1167
1247
  installer.install
1168
1248
  end
1169
1249
 
1170
- refute_match %r|I am a shiny gem!|, @ui.output
1250
+ refute_match %r{I am a shiny gem!}, @ui.output
1171
1251
  end
1172
1252
 
1173
1253
  def test_install_extension_dir
@@ -1303,7 +1383,7 @@ gem 'other', version
1303
1383
  installer.install
1304
1384
  end
1305
1385
 
1306
- expected = File.join @spec.full_require_paths.find { |path|
1386
+ expected = File.join @spec.full_require_paths.find {|path|
1307
1387
  File.exist? File.join path, 'b.rb'
1308
1388
  }, 'b.rb'
1309
1389
  assert_equal expected, @spec.matches_for_glob('b.rb').first
@@ -1371,7 +1451,7 @@ gem 'other', version
1371
1451
  end
1372
1452
 
1373
1453
  # empty depend file for no auto dependencies
1374
- @spec.files += %W"depend #{@spec.name}.c".each do |file|
1454
+ @spec.files += %W[depend #{@spec.name}.c].each do |file|
1375
1455
  write_file File.join(@tempdir, file)
1376
1456
  end
1377
1457
 
@@ -1726,9 +1806,9 @@ gem 'other', version
1726
1806
 
1727
1807
  shebang = installer.shebang 'executable'
1728
1808
 
1729
- env_shebang = "/usr/bin/env" unless Gem.win_platform?
1809
+ bin_env = get_bin_env
1730
1810
 
1731
- assert_equal("#!#{env_shebang} #{RbConfig::CONFIG['ruby_install_name']}",
1811
+ assert_equal("#!#{bin_env} #{RbConfig::CONFIG['ruby_install_name']}",
1732
1812
  shebang)
1733
1813
  end
1734
1814
 
@@ -1807,10 +1887,18 @@ gem 'other', version
1807
1887
  assert_equal "#!test", shebang
1808
1888
  end
1809
1889
 
1890
+ def get_bin_env
1891
+ if win_platform?
1892
+ ""
1893
+ else
1894
+ %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) }
1895
+ end
1896
+ end
1897
+
1810
1898
  def test_shebang_custom_with_expands
1811
1899
  installer = setup_base_installer
1812
1900
 
1813
- bin_env = win_platform? ? '' : '/usr/bin/env'
1901
+ bin_env = get_bin_env
1814
1902
  conf = Gem::ConfigFile.new []
1815
1903
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
1816
1904
 
@@ -1826,7 +1914,7 @@ gem 'other', version
1826
1914
  def test_shebang_custom_with_expands_and_arguments
1827
1915
  installer = setup_base_installer
1828
1916
 
1829
- bin_env = win_platform? ? '' : '/usr/bin/env'
1917
+ bin_env = get_bin_env
1830
1918
  conf = Gem::ConfigFile.new []
1831
1919
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
1832
1920
 
@@ -1951,7 +2039,7 @@ gem 'other', version
1951
2039
  def test_dir
1952
2040
  installer = setup_base_installer
1953
2041
 
1954
- assert_match %r!/gemhome/gems/a-2$!, installer.dir
2042
+ assert_match %r{/gemhome/gems/a-2$}, installer.dir
1955
2043
  end
1956
2044
 
1957
2045
  def test_default_gem_loaded_from
@@ -1991,7 +2079,13 @@ gem 'other', version
1991
2079
  assert_path_exists installed_exec
1992
2080
 
1993
2081
  wrapper = File.read installed_exec
1994
- refute_match %r|generated by RubyGems|, wrapper
2082
+
2083
+ if symlink_supported?
2084
+ refute_match %r{generated by RubyGems}, wrapper
2085
+ else # when symlink not supported, it warns and fallbacks back to installing wrapper
2086
+ assert_match %r{Unable to use symlinks, installing wrapper}, @ui.error
2087
+ assert_match %r{generated by RubyGems}, wrapper
2088
+ end
1995
2089
  end
1996
2090
 
1997
2091
  def test_default_gem_with_wrappers
@@ -2011,7 +2105,7 @@ gem 'other', version
2011
2105
  assert_path_exists installed_exec
2012
2106
 
2013
2107
  wrapper = File.read installed_exec
2014
- assert_match %r|generated by RubyGems|, wrapper
2108
+ assert_match %r{generated by RubyGems}, wrapper
2015
2109
  end
2016
2110
 
2017
2111
  def test_default_gem_with_exe_as_bindir
@@ -2054,6 +2148,16 @@ gem 'other', version
2054
2148
  assert_kind_of(Gem::Package, installer.package)
2055
2149
  end
2056
2150
 
2151
+ def test_gem_attribute
2152
+ gem = quick_gem 'c' do |spec|
2153
+ util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2154
+ end
2155
+
2156
+ installer = util_installer(gem, @gemhome)
2157
+ assert_respond_to(installer, :gem)
2158
+ assert_kind_of(String, installer.gem)
2159
+ end
2160
+
2057
2161
  def old_ruby_required(requirement)
2058
2162
  spec = util_spec 'old_ruby_required', '1' do |s|
2059
2163
  s.required_ruby_version = requirement
@@ -2084,7 +2188,7 @@ gem 'other', version
2084
2188
  end
2085
2189
 
2086
2190
  def mask
2087
- 0100755 & (~File.umask)
2191
+ 0100755
2088
2192
  end
2089
2193
 
2090
2194
  end
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'rubygems/package/tar_test_case'
@@ -151,7 +150,7 @@ class TestGemPackage < Gem::Package::TarTestCase
151
150
 
152
151
  FileUtils.mkdir_p 'lib/empty'
153
152
 
154
- File.open 'lib/code.rb', 'w' do |io|
153
+ File.open 'lib/code.rb', 'w' do |io|
155
154
  io.write '# lib/code.rb'
156
155
  end
157
156
 
@@ -185,7 +184,7 @@ class TestGemPackage < Gem::Package::TarTestCase
185
184
 
186
185
  FileUtils.mkdir_p 'lib'
187
186
 
188
- File.open 'lib/code.rb', 'w' do |io|
187
+ File.open 'lib/code.rb', 'w' do |io|
189
188
  io.write '# lib/code.rb'
190
189
  end
191
190
 
@@ -443,7 +442,7 @@ class TestGemPackage < Gem::Package::TarTestCase
443
442
  end
444
443
 
445
444
  def test_raw_spec
446
- data_tgz = util_tar_gz { }
445
+ data_tgz = util_tar_gz {}
447
446
 
448
447
  gem = util_tar do |tar|
449
448
  tar.add_file 'data.tar.gz', 0644 do |io|
@@ -490,7 +489,7 @@ class TestGemPackage < Gem::Package::TarTestCase
490
489
  end
491
490
 
492
491
  def test_extract_files_empty
493
- data_tgz = util_tar_gz { }
492
+ data_tgz = util_tar_gz {}
494
493
 
495
494
  gem = util_tar do |tar|
496
495
  tar.add_file 'data.tar.gz', 0644 do |io|
@@ -536,11 +535,11 @@ class TestGemPackage < Gem::Package::TarTestCase
536
535
  package = Gem::Package.new @gem
537
536
 
538
537
  tgz_io = util_tar_gz do |tar|
539
- tar.add_file 'relative.rb', 0644 do |io|
538
+ tar.add_file 'relative.rb', 0644 do |io|
540
539
  io.write 'hi'
541
540
  end
542
541
 
543
- tar.mkdir 'lib', 0755
542
+ tar.mkdir 'lib', 0755
544
543
  tar.add_symlink 'lib/foo.rb', '../relative.rb', 0644
545
544
  end
546
545
 
@@ -606,6 +605,8 @@ class TestGemPackage < Gem::Package::TarTestCase
606
605
  destination_user_subdir = File.join destination_user_dir, 'dir'
607
606
  FileUtils.mkdir_p destination_user_subdir
608
607
 
608
+ skip "TMPDIR seems too long to add it as symlink into tar" if destination_user_dir.size > 90
609
+
609
610
  tgz_io = util_tar_gz do |tar|
610
611
  tar.add_symlink 'link', destination_user_dir, 16877
611
612
  tar.add_symlink 'link/dir', '.', 16877
@@ -635,7 +636,7 @@ class TestGemPackage < Gem::Package::TarTestCase
635
636
  tar.add_file 'lib/foo.rb', 0644 do |io|
636
637
  io.write 'hi'
637
638
  end
638
- tar.mkdir 'lib/foo', 0755
639
+ tar.mkdir 'lib/foo', 0755
639
640
  end
640
641
 
641
642
  package.extract_tar_gz tgz_io, @destination
@@ -929,8 +930,8 @@ class TestGemPackage < Gem::Package::TarTestCase
929
930
  package.verify
930
931
  end
931
932
 
932
- assert_match %r%^No such file or directory%, e.message
933
- assert_match %r%nonexistent.gem$%, e.message
933
+ assert_match %r{^No such file or directory}, e.message
934
+ assert_match %r{nonexistent.gem$}, e.message
934
935
  end
935
936
 
936
937
  def test_verify_duplicate_file
@@ -1018,7 +1019,7 @@ class TestGemPackage < Gem::Package::TarTestCase
1018
1019
  bogus_data = Gem::Util.gzip 'hello'
1019
1020
  fake_signer = Class.new do
1020
1021
  def digest_name; 'SHA512'; end
1021
- def digest_algorithm; Digest(:SHA512); end
1022
+ def digest_algorithm; Digest(:SHA512).new; end
1022
1023
  def key; 'key'; end
1023
1024
  def sign(*); 'fake_sig'; end
1024
1025
  end
@@ -1097,7 +1098,7 @@ class TestGemPackage < Gem::Package::TarTestCase
1097
1098
  $bad_name = vm
1098
1099
 
1099
1100
  entry = Object.new
1100
- def entry.full_name() $bad_name end
1101
+ def entry.full_name() $bad_name end
1101
1102
 
1102
1103
  package = Gem::Package.new(@gem)
1103
1104
  package.instance_variable_set(:@files, [])