rubygems-update 3.1.0 → 3.2.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (345) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +2 -3
  4. data/History.txt +195 -7
  5. data/Manifest.txt +11 -23
  6. data/POLICIES.md +2 -9
  7. data/README.md +5 -5
  8. data/Rakefile +38 -35
  9. data/bin/update_rubygems +2 -2
  10. data/bundler/CHANGELOG.md +846 -728
  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 +29 -9
  18. data/bundler/lib/bundler/cli/console.rb +1 -1
  19. data/bundler/lib/bundler/cli/exec.rb +3 -12
  20. data/bundler/lib/bundler/cli/gem.rb +74 -10
  21. data/bundler/lib/bundler/cli/info.rb +6 -3
  22. data/bundler/lib/bundler/cli/init.rb +1 -1
  23. data/bundler/lib/bundler/cli/install.rb +8 -16
  24. data/bundler/lib/bundler/cli/issue.rb +2 -2
  25. data/bundler/lib/bundler/cli/outdated.rb +5 -5
  26. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  27. data/bundler/lib/bundler/definition.rb +32 -32
  28. data/bundler/lib/bundler/dependency.rb +0 -9
  29. data/bundler/lib/bundler/dsl.rb +1 -5
  30. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  31. data/bundler/lib/bundler/errors.rb +1 -0
  32. data/bundler/lib/bundler/feature_flag.rb +0 -2
  33. data/bundler/lib/bundler/fetcher.rb +1 -0
  34. data/bundler/lib/bundler/friendly_errors.rb +4 -10
  35. data/bundler/lib/bundler/gem_helper.rb +18 -12
  36. data/bundler/lib/bundler/gem_version_promoter.rb +1 -1
  37. data/bundler/lib/bundler/injector.rb +14 -3
  38. data/bundler/lib/bundler/inline.rb +2 -2
  39. data/bundler/lib/bundler/installer.rb +29 -28
  40. data/bundler/lib/bundler/installer/gem_installer.rb +2 -2
  41. data/bundler/lib/bundler/installer/parallel_installer.rb +9 -9
  42. data/bundler/lib/bundler/lazy_specification.rb +16 -3
  43. data/bundler/lib/bundler/plugin.rb +26 -0
  44. data/bundler/lib/bundler/plugin/index.rb +9 -0
  45. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  46. data/bundler/lib/bundler/remote_specification.rb +4 -1
  47. data/bundler/lib/bundler/resolver.rb +31 -8
  48. data/bundler/lib/bundler/resolver/spec_group.rb +26 -5
  49. data/bundler/lib/bundler/rubygems_ext.rb +7 -8
  50. data/bundler/lib/bundler/rubygems_gem_installer.rb +1 -7
  51. data/bundler/lib/bundler/rubygems_integration.rb +13 -19
  52. data/bundler/lib/bundler/runtime.rb +2 -12
  53. data/bundler/lib/bundler/settings.rb +0 -3
  54. data/bundler/lib/bundler/setup.rb +5 -0
  55. data/bundler/lib/bundler/shared_helpers.rb +1 -1
  56. data/bundler/lib/bundler/source/git/git_proxy.rb +53 -58
  57. data/bundler/lib/bundler/source/path.rb +5 -1
  58. data/bundler/lib/bundler/source/path/installer.rb +7 -9
  59. data/bundler/lib/bundler/source/rubygems.rb +11 -14
  60. data/bundler/lib/bundler/stub_specification.rb +16 -4
  61. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  62. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +7 -2
  63. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -5
  64. data/bundler/lib/bundler/templates/newgem/bin/console.tt +2 -0
  65. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  66. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  67. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  68. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  69. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
  70. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  71. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +5 -3
  72. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  73. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  74. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -0
  75. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  76. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  77. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  78. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  79. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +72 -208
  80. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  81. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  82. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  83. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  84. data/bundler/lib/bundler/version.rb +1 -1
  85. data/bundler/man/bundle-add.1 +1 -1
  86. data/bundler/man/bundle-add.1.txt +15 -15
  87. data/bundler/man/bundle-binstubs.1 +1 -1
  88. data/bundler/man/bundle-binstubs.1.txt +10 -10
  89. data/bundler/man/bundle-cache.1 +1 -1
  90. data/bundler/man/bundle-cache.1.txt +15 -15
  91. data/bundler/man/bundle-check.1 +1 -1
  92. data/bundler/man/bundle-check.1.txt +8 -8
  93. data/bundler/man/bundle-clean.1 +1 -1
  94. data/bundler/man/bundle-clean.1.txt +6 -6
  95. data/bundler/man/bundle-config.1 +3 -9
  96. data/bundler/man/bundle-config.1.txt +271 -272
  97. data/bundler/man/bundle-config.ronn +5 -9
  98. data/bundler/man/bundle-doctor.1 +1 -1
  99. data/bundler/man/bundle-doctor.1.txt +9 -9
  100. data/bundler/man/bundle-exec.1 +1 -1
  101. data/bundler/man/bundle-exec.1.txt +84 -81
  102. data/bundler/man/bundle-gem.1 +25 -3
  103. data/bundler/man/bundle-gem.1.txt +65 -39
  104. data/bundler/man/bundle-gem.ronn +30 -7
  105. data/bundler/man/bundle-info.1 +1 -1
  106. data/bundler/man/bundle-info.1.txt +2 -2
  107. data/bundler/man/bundle-init.1 +1 -1
  108. data/bundler/man/bundle-init.1.txt +9 -9
  109. data/bundler/man/bundle-inject.1 +1 -1
  110. data/bundler/man/bundle-inject.1.txt +4 -4
  111. data/bundler/man/bundle-install.1 +1 -1
  112. data/bundler/man/bundle-install.1.txt +169 -169
  113. data/bundler/man/bundle-list.1 +1 -1
  114. data/bundler/man/bundle-list.1.txt +7 -7
  115. data/bundler/man/bundle-lock.1 +1 -1
  116. data/bundler/man/bundle-lock.1.txt +28 -28
  117. data/bundler/man/bundle-open.1 +1 -1
  118. data/bundler/man/bundle-open.1.txt +3 -3
  119. data/bundler/man/bundle-outdated.1 +1 -1
  120. data/bundler/man/bundle-outdated.1.txt +34 -34
  121. data/bundler/man/bundle-platform.1 +1 -1
  122. data/bundler/man/bundle-platform.1.txt +16 -16
  123. data/bundler/man/bundle-pristine.1 +1 -1
  124. data/bundler/man/bundle-pristine.1.txt +8 -8
  125. data/bundler/man/bundle-remove.1 +1 -1
  126. data/bundler/man/bundle-remove.1.txt +9 -9
  127. data/bundler/man/bundle-show.1 +1 -1
  128. data/bundler/man/bundle-show.1.txt +8 -8
  129. data/bundler/man/bundle-update.1 +1 -1
  130. data/bundler/man/bundle-update.1.txt +149 -148
  131. data/bundler/man/bundle-viz.1 +1 -1
  132. data/bundler/man/bundle-viz.1.txt +11 -11
  133. data/bundler/man/bundle.1 +1 -1
  134. data/bundler/man/bundle.1.txt +31 -31
  135. data/bundler/man/gemfile.5 +1 -1
  136. data/bundler/man/gemfile.5.txt +218 -216
  137. data/lib/rubygems.rb +135 -185
  138. data/lib/rubygems/available_set.rb +4 -4
  139. data/lib/rubygems/basic_specification.rb +12 -6
  140. data/lib/rubygems/bundler_version_finder.rb +14 -9
  141. data/lib/rubygems/command.rb +17 -15
  142. data/lib/rubygems/command_manager.rb +4 -3
  143. data/lib/rubygems/commands/cert_command.rb +1 -1
  144. data/lib/rubygems/commands/cleanup_command.rb +3 -3
  145. data/lib/rubygems/commands/contents_command.rb +4 -4
  146. data/lib/rubygems/commands/dependency_command.rb +6 -6
  147. data/lib/rubygems/commands/fetch_command.rb +2 -2
  148. data/lib/rubygems/commands/help_command.rb +2 -2
  149. data/lib/rubygems/commands/info_command.rb +9 -4
  150. data/lib/rubygems/commands/install_command.rb +3 -3
  151. data/lib/rubygems/commands/list_command.rb +9 -6
  152. data/lib/rubygems/commands/lock_command.rb +1 -1
  153. data/lib/rubygems/commands/open_command.rb +0 -2
  154. data/lib/rubygems/commands/pristine_command.rb +10 -2
  155. data/lib/rubygems/commands/push_command.rb +4 -42
  156. data/lib/rubygems/commands/query_command.rb +7 -352
  157. data/lib/rubygems/commands/search_command.rb +8 -6
  158. data/lib/rubygems/commands/setup_command.rb +156 -45
  159. data/lib/rubygems/commands/sources_command.rb +3 -3
  160. data/lib/rubygems/commands/specification_command.rb +2 -2
  161. data/lib/rubygems/commands/stale_command.rb +1 -1
  162. data/lib/rubygems/commands/uninstall_command.rb +2 -2
  163. data/lib/rubygems/commands/unpack_command.rb +1 -1
  164. data/lib/rubygems/commands/update_command.rb +40 -10
  165. data/lib/rubygems/config_file.rb +11 -2
  166. data/lib/rubygems/core_ext/kernel_require.rb +26 -36
  167. data/lib/rubygems/defaults.rb +99 -5
  168. data/lib/rubygems/dependency.rb +2 -5
  169. data/lib/rubygems/dependency_installer.rb +1 -73
  170. data/lib/rubygems/dependency_list.rb +7 -7
  171. data/lib/rubygems/deprecate.rb +46 -1
  172. data/lib/rubygems/doctor.rb +4 -2
  173. data/lib/rubygems/errors.rb +3 -2
  174. data/lib/rubygems/exceptions.rb +2 -13
  175. data/lib/rubygems/ext.rb +6 -6
  176. data/lib/rubygems/ext/build_error.rb +2 -0
  177. data/lib/rubygems/ext/builder.rb +4 -2
  178. data/lib/rubygems/ext/cmake_builder.rb +1 -1
  179. data/lib/rubygems/ext/ext_conf_builder.rb +6 -7
  180. data/lib/rubygems/gem_runner.rb +3 -8
  181. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  182. data/lib/rubygems/indexer.rb +1 -19
  183. data/lib/rubygems/install_update_options.rb +5 -5
  184. data/lib/rubygems/installer.rb +45 -42
  185. data/lib/rubygems/installer_test_case.rb +19 -2
  186. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  187. data/lib/rubygems/local_remote_options.rb +1 -1
  188. data/lib/rubygems/name_tuple.rb +2 -4
  189. data/lib/rubygems/package.rb +8 -13
  190. data/lib/rubygems/package/old.rb +1 -1
  191. data/lib/rubygems/package/tar_header.rb +3 -3
  192. data/lib/rubygems/package/tar_reader.rb +0 -1
  193. data/lib/rubygems/package/tar_reader/entry.rb +0 -1
  194. data/lib/rubygems/package/tar_test_case.rb +1 -1
  195. data/lib/rubygems/package/tar_writer.rb +2 -6
  196. data/lib/rubygems/package_task.rb +1 -5
  197. data/lib/rubygems/path_support.rb +1 -1
  198. data/lib/rubygems/platform.rb +3 -3
  199. data/lib/rubygems/query_utils.rb +362 -0
  200. data/lib/rubygems/rdoc.rb +0 -12
  201. data/lib/rubygems/remote_fetcher.rb +5 -19
  202. data/lib/rubygems/request/connection_pools.rb +1 -1
  203. data/lib/rubygems/request_set.rb +5 -5
  204. data/lib/rubygems/request_set/gem_dependency_api.rb +2 -2
  205. data/lib/rubygems/request_set/lockfile.rb +8 -8
  206. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
  207. data/lib/rubygems/requirement.rb +14 -15
  208. data/lib/rubygems/resolver.rb +7 -8
  209. data/lib/rubygems/resolver/api_set.rb +4 -4
  210. data/lib/rubygems/resolver/api_specification.rb +1 -1
  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 +9 -9
  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 +6 -5
  225. data/lib/rubygems/spec_fetcher.rb +18 -15
  226. data/lib/rubygems/specification.rb +91 -112
  227. data/lib/rubygems/specification_policy.rb +88 -28
  228. data/lib/rubygems/test_case.rb +122 -81
  229. data/lib/rubygems/test_utilities.rb +6 -6
  230. data/lib/rubygems/uninstaller.rb +35 -14
  231. data/lib/rubygems/user_interaction.rb +1 -10
  232. data/lib/rubygems/util.rb +17 -3
  233. data/lib/rubygems/util/licenses.rb +4 -4
  234. data/lib/rubygems/validator.rb +1 -1
  235. data/lib/rubygems/version.rb +5 -5
  236. data/rubygems-update.gemspec +2 -2
  237. data/setup.rb +2 -7
  238. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  239. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  240. data/test/rubygems/test_bundled_ca.rb +1 -5
  241. data/test/rubygems/test_deprecate.rb +43 -4
  242. data/test/rubygems/test_gem.rb +150 -101
  243. data/test/rubygems/test_gem_available_set.rb +3 -3
  244. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -1
  245. data/test/rubygems/test_gem_command.rb +24 -3
  246. data/test/rubygems/test_gem_command_manager.rb +37 -4
  247. data/test/rubygems/test_gem_commands_build_command.rb +25 -3
  248. data/test/rubygems/test_gem_commands_cert_command.rb +2 -2
  249. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -1
  250. data/test/rubygems/test_gem_commands_contents_command.rb +48 -15
  251. data/test/rubygems/test_gem_commands_environment_command.rb +21 -21
  252. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -5
  253. data/test/rubygems/test_gem_commands_info_command.rb +6 -6
  254. data/test/rubygems/test_gem_commands_install_command.rb +31 -31
  255. data/test/rubygems/test_gem_commands_mirror.rb +1 -1
  256. data/test/rubygems/test_gem_commands_open_command.rb +4 -4
  257. data/test/rubygems/test_gem_commands_owner_command.rb +11 -3
  258. data/test/rubygems/test_gem_commands_pristine_command.rb +41 -8
  259. data/test/rubygems/test_gem_commands_push_command.rb +7 -2
  260. data/test/rubygems/test_gem_commands_query_command.rb +9 -5
  261. data/test/rubygems/test_gem_commands_setup_command.rb +212 -114
  262. data/test/rubygems/test_gem_commands_signin_command.rb +6 -4
  263. data/test/rubygems/test_gem_commands_signout_command.rb +0 -5
  264. data/test/rubygems/test_gem_commands_sources_command.rb +39 -1
  265. data/test/rubygems/test_gem_commands_specification_command.rb +18 -18
  266. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -1
  267. data/test/rubygems/test_gem_commands_update_command.rb +68 -5
  268. data/test/rubygems/test_gem_commands_which_command.rb +3 -3
  269. data/test/rubygems/test_gem_commands_yank_command.rb +14 -6
  270. data/test/rubygems/test_gem_config_file.rb +7 -10
  271. data/test/rubygems/test_gem_dependency_installer.rb +52 -189
  272. data/test/rubygems/test_gem_dependency_list.rb +8 -8
  273. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -1
  274. data/test/rubygems/test_gem_doctor.rb +28 -0
  275. data/test/rubygems/test_gem_ext_builder.rb +14 -25
  276. data/test/rubygems/test_gem_ext_cmake_builder.rb +13 -12
  277. data/test/rubygems/test_gem_ext_configure_builder.rb +1 -9
  278. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -1
  279. data/test/rubygems/test_gem_ext_rake_builder.rb +9 -9
  280. data/test/rubygems/test_gem_gem_runner.rb +42 -0
  281. data/test/rubygems/test_gem_gemcutter_utilities.rb +5 -0
  282. data/test/rubygems/test_gem_indexer.rb +9 -13
  283. data/test/rubygems/test_gem_installer.rb +158 -67
  284. data/test/rubygems/test_gem_package.rb +16 -20
  285. data/test/rubygems/test_gem_package_tar_header.rb +19 -0
  286. data/test/rubygems/test_gem_package_tar_writer.rb +8 -3
  287. data/test/rubygems/test_gem_package_task.rb +46 -11
  288. data/test/rubygems/test_gem_remote_fetcher.rb +152 -190
  289. data/test/rubygems/test_gem_request.rb +11 -11
  290. data/test/rubygems/test_gem_request_set.rb +72 -20
  291. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -3
  292. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -9
  293. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
  294. data/test/rubygems/test_gem_requirement.rb +2 -2
  295. data/test/rubygems/test_gem_resolver.rb +6 -6
  296. data/test/rubygems/test_gem_resolver_api_set.rb +3 -3
  297. data/test/rubygems/test_gem_resolver_best_set.rb +2 -2
  298. data/test/rubygems/test_gem_resolver_index_set.rb +2 -2
  299. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -7
  300. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -3
  301. data/test/rubygems/test_gem_security.rb +20 -20
  302. data/test/rubygems/test_gem_security_policy.rb +5 -8
  303. data/test/rubygems/test_gem_security_signer.rb +8 -8
  304. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  305. data/test/rubygems/test_gem_server.rb +10 -10
  306. data/test/rubygems/test_gem_source.rb +12 -14
  307. data/test/rubygems/test_gem_source_git.rb +12 -11
  308. data/test/rubygems/test_gem_source_installed.rb +7 -7
  309. data/test/rubygems/test_gem_source_local.rb +8 -8
  310. data/test/rubygems/test_gem_source_lock.rb +10 -10
  311. data/test/rubygems/test_gem_source_specific_file.rb +7 -7
  312. data/test/rubygems/test_gem_source_vendor.rb +7 -7
  313. data/test/rubygems/test_gem_spec_fetcher.rb +11 -2
  314. data/test/rubygems/test_gem_specification.rb +169 -119
  315. data/test/rubygems/test_gem_stream_ui.rb +3 -1
  316. data/test/rubygems/test_gem_stub_specification.rb +0 -1
  317. data/test/rubygems/test_gem_text.rb +1 -1
  318. data/test/rubygems/test_gem_uninstaller.rb +134 -10
  319. data/test/rubygems/test_gem_util.rb +7 -5
  320. data/test/rubygems/test_gem_version.rb +1 -1
  321. data/test/rubygems/test_kernel.rb +25 -8
  322. data/test/rubygems/test_project_sanity.rb +8 -1
  323. data/test/rubygems/test_require.rb +242 -40
  324. metadata +33 -46
  325. data/.bundle/config +0 -2
  326. data/.rubocop.yml +0 -91
  327. data/Gemfile +0 -8
  328. data/Gemfile.lock +0 -43
  329. data/bundler/CODE_OF_CONDUCT.md +0 -136
  330. data/lib/rubygems/source_local.rb +0 -7
  331. data/lib/rubygems/source_specific_file.rb +0 -6
  332. data/lib/ubygems.rb +0 -14
  333. data/tmp/.keep +0 -0
  334. data/util/CL2notes +0 -55
  335. data/util/bisect +0 -10
  336. data/util/ci.sh +0 -62
  337. data/util/cops/deprecations.rb +0 -52
  338. data/util/create_certs.rb +0 -171
  339. data/util/create_certs.sh +0 -27
  340. data/util/create_encrypted_key.rb +0 -16
  341. data/util/generate_spdx_license_list.rb +0 -63
  342. data/util/patch_with_prs.rb +0 -77
  343. data/util/rubocop +0 -8
  344. data/util/update_bundled_ca_certificates.rb +0 -139
  345. data/util/update_changelog.rb +0 -67
@@ -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,38 +80,25 @@ 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
105
87
  installer = setup_base_installer
106
88
 
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
89
+ bindir(Gem.bindir) do
90
+ util_conflict_executable false
113
91
 
114
- util_conflict_executable false
92
+ ui = Gem::MockGemUi.new "n\n"
93
+ use_ui ui do
94
+ e = assert_raises Gem::InstallError do
95
+ installer.generate_bin
96
+ end
115
97
 
116
- ui = Gem::MockGemUi.new "n\n"
117
- use_ui ui do
118
- e = assert_raises Gem::InstallError do
119
- installer.generate_bin
98
+ conflicted = File.join @gemhome, 'bin', 'executable'
99
+ assert_match %r{\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z},
100
+ e.message
120
101
  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
102
  end
134
103
  end
135
104
 
@@ -169,7 +138,7 @@ gem 'other', version
169
138
  assert_path_exists installed_exec
170
139
 
171
140
  wrapper = File.read installed_exec
172
- assert_match %r|generated by RubyGems|, wrapper
141
+ assert_match %r{generated by RubyGems}, wrapper
173
142
  ensure
174
143
  Gem::Installer.exec_format = nil
175
144
  end
@@ -204,7 +173,7 @@ gem 'other', version
204
173
  assert_path_exists installed_exec
205
174
 
206
175
  wrapper = File.read installed_exec
207
- assert_match %r|generated by RubyGems|, wrapper
176
+ assert_match %r{generated by RubyGems}, wrapper
208
177
  end
209
178
 
210
179
  def test_check_executable_overwrite_other_non_gem
@@ -219,7 +188,7 @@ gem 'other', version
219
188
  assert_path_exists installed_exec
220
189
 
221
190
  wrapper = File.read installed_exec
222
- assert_match %r|generated by RubyGems|, wrapper
191
+ assert_match %r{generated by RubyGems}, wrapper
223
192
  end unless Gem.win_platform?
224
193
 
225
194
  def test_check_that_user_bin_dir_is_in_path
@@ -355,7 +324,7 @@ gem 'other', version
355
324
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
356
325
 
357
326
  wrapper = File.read installed_exec
358
- assert_match %r|generated by RubyGems|, wrapper
327
+ assert_match %r{generated by RubyGems}, wrapper
359
328
  end
360
329
 
361
330
  def test_generate_bin_bindir_with_user_install_warning
@@ -398,7 +367,7 @@ gem 'other', version
398
367
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
399
368
 
400
369
  wrapper = File.read installed_exec
401
- assert_match %r|generated by RubyGems|, wrapper
370
+ assert_match %r{generated by RubyGems}, wrapper
402
371
  end
403
372
 
404
373
  def test_generate_bin_script_format
@@ -457,7 +426,7 @@ gem 'other', version
457
426
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
458
427
 
459
428
  wrapper = File.read installed_exec
460
- assert_match %r|generated by RubyGems|, wrapper
429
+ assert_match %r{generated by RubyGems}, wrapper
461
430
  end
462
431
 
463
432
  def test_generate_bin_script_no_execs
@@ -514,7 +483,7 @@ gem 'other', version
514
483
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
515
484
 
516
485
  wrapper = File.read installed_exec
517
- assert_match %r|generated by RubyGems|, wrapper
486
+ assert_match %r{generated by RubyGems}, wrapper
518
487
  # HACK some gems don't have #! in their executables, restore 2008/06
519
488
  #assert_no_match %r|generated by RubyGems|, wrapper
520
489
  end
@@ -540,9 +509,9 @@ gem 'other', version
540
509
  assert_path_exists installed_exec
541
510
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
542
511
 
543
- assert_match %r|generated by RubyGems|, File.read(installed_exec)
512
+ assert_match %r{generated by RubyGems}, File.read(installed_exec)
544
513
 
545
- refute_match %r|generated by RubyGems|, File.read(real_exec),
514
+ refute_match %r{generated by RubyGems}, File.read(real_exec),
546
515
  'real executable overwritten'
547
516
  end
548
517
 
@@ -752,11 +721,105 @@ gem 'other', version
752
721
  installer.generate_bin
753
722
 
754
723
  default_shebang = Gem.ruby
755
- shebang_line = open("#{@gemhome}/bin/executable") { |f| f.readlines.first }
724
+ shebang_line = open("#{@gemhome}/bin/executable") {|f| f.readlines.first }
756
725
  assert_match(/\A#!/, shebang_line)
757
726
  assert_match(/#{default_shebang}/, shebang_line)
758
727
  end
759
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
+
760
823
  def test_initialize
761
824
  spec = util_spec 'a' do |s|
762
825
  s.platform = Gem::Platform.new 'mswin32'
@@ -953,7 +1016,13 @@ gem 'other', version
953
1016
  end
954
1017
 
955
1018
  def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
956
- 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"
957
1026
 
958
1027
  installer = util_setup_installer do |spec|
959
1028
  spec.name = 'default'
@@ -971,8 +1040,6 @@ gem 'other', version
971
1040
  end
972
1041
  end
973
1042
 
974
- exe = File.join @gemhome, 'bin', 'executable'
975
-
976
1043
  e = assert_raises RuntimeError do
977
1044
  instance_eval File.read(exe)
978
1045
  end
@@ -1166,7 +1233,7 @@ gem 'other', version
1166
1233
  installer.install
1167
1234
  end
1168
1235
 
1169
- assert_match %r|I am a shiny gem!|, @ui.output
1236
+ assert_match %r{I am a shiny gem!}, @ui.output
1170
1237
  end
1171
1238
 
1172
1239
  def test_install_with_skipped_message
@@ -1180,7 +1247,7 @@ gem 'other', version
1180
1247
  installer.install
1181
1248
  end
1182
1249
 
1183
- refute_match %r|I am a shiny gem!|, @ui.output
1250
+ refute_match %r{I am a shiny gem!}, @ui.output
1184
1251
  end
1185
1252
 
1186
1253
  def test_install_extension_dir
@@ -1316,7 +1383,7 @@ gem 'other', version
1316
1383
  installer.install
1317
1384
  end
1318
1385
 
1319
- expected = File.join @spec.full_require_paths.find { |path|
1386
+ expected = File.join @spec.full_require_paths.find {|path|
1320
1387
  File.exist? File.join path, 'b.rb'
1321
1388
  }, 'b.rb'
1322
1389
  assert_equal expected, @spec.matches_for_glob('b.rb').first
@@ -1384,7 +1451,7 @@ gem 'other', version
1384
1451
  end
1385
1452
 
1386
1453
  # empty depend file for no auto dependencies
1387
- @spec.files += %W"depend #{@spec.name}.c".each do |file|
1454
+ @spec.files += %W[depend #{@spec.name}.c].each do |file|
1388
1455
  write_file File.join(@tempdir, file)
1389
1456
  end
1390
1457
 
@@ -1739,9 +1806,9 @@ gem 'other', version
1739
1806
 
1740
1807
  shebang = installer.shebang 'executable'
1741
1808
 
1742
- env_shebang = "/usr/bin/env" unless Gem.win_platform?
1809
+ bin_env = get_bin_env
1743
1810
 
1744
- assert_equal("#!#{env_shebang} #{RbConfig::CONFIG['ruby_install_name']}",
1811
+ assert_equal("#!#{bin_env} #{RbConfig::CONFIG['ruby_install_name']}",
1745
1812
  shebang)
1746
1813
  end
1747
1814
 
@@ -1820,10 +1887,18 @@ gem 'other', version
1820
1887
  assert_equal "#!test", shebang
1821
1888
  end
1822
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
+
1823
1898
  def test_shebang_custom_with_expands
1824
1899
  installer = setup_base_installer
1825
1900
 
1826
- bin_env = win_platform? ? '' : '/usr/bin/env'
1901
+ bin_env = get_bin_env
1827
1902
  conf = Gem::ConfigFile.new []
1828
1903
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
1829
1904
 
@@ -1839,7 +1914,7 @@ gem 'other', version
1839
1914
  def test_shebang_custom_with_expands_and_arguments
1840
1915
  installer = setup_base_installer
1841
1916
 
1842
- bin_env = win_platform? ? '' : '/usr/bin/env'
1917
+ bin_env = get_bin_env
1843
1918
  conf = Gem::ConfigFile.new []
1844
1919
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
1845
1920
 
@@ -1964,7 +2039,7 @@ gem 'other', version
1964
2039
  def test_dir
1965
2040
  installer = setup_base_installer
1966
2041
 
1967
- assert_match %r!/gemhome/gems/a-2$!, installer.dir
2042
+ assert_match %r{/gemhome/gems/a-2$}, installer.dir
1968
2043
  end
1969
2044
 
1970
2045
  def test_default_gem_loaded_from
@@ -2004,7 +2079,13 @@ gem 'other', version
2004
2079
  assert_path_exists installed_exec
2005
2080
 
2006
2081
  wrapper = File.read installed_exec
2007
- 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
2008
2089
  end
2009
2090
 
2010
2091
  def test_default_gem_with_wrappers
@@ -2024,7 +2105,7 @@ gem 'other', version
2024
2105
  assert_path_exists installed_exec
2025
2106
 
2026
2107
  wrapper = File.read installed_exec
2027
- assert_match %r|generated by RubyGems|, wrapper
2108
+ assert_match %r{generated by RubyGems}, wrapper
2028
2109
  end
2029
2110
 
2030
2111
  def test_default_gem_with_exe_as_bindir
@@ -2067,6 +2148,16 @@ gem 'other', version
2067
2148
  assert_kind_of(Gem::Package, installer.package)
2068
2149
  end
2069
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
+
2070
2161
  def old_ruby_required(requirement)
2071
2162
  spec = util_spec 'old_ruby_required', '1' do |s|
2072
2163
  s.required_ruby_version = requirement
@@ -2097,7 +2188,7 @@ gem 'other', version
2097
2188
  end
2098
2189
 
2099
2190
  def mask
2100
- 0100755 & (~File.umask)
2191
+ 0100755
2101
2192
  end
2102
2193
 
2103
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'
@@ -106,7 +105,7 @@ class TestGemPackage < Gem::Package::TarTestCase
106
105
  assert_equal expected, YAML.load(checksums)
107
106
  end
108
107
 
109
- def test_build_time_source_date_epoch
108
+ def test_build_time_uses_source_date_epoch
110
109
  epoch = ENV["SOURCE_DATE_EPOCH"]
111
110
  ENV["SOURCE_DATE_EPOCH"] = "123456789"
112
111
 
@@ -124,12 +123,10 @@ class TestGemPackage < Gem::Package::TarTestCase
124
123
  ENV["SOURCE_DATE_EPOCH"] = epoch
125
124
  end
126
125
 
127
- def test_build_time_source_date_epoch_automatically_set
126
+ def test_build_time_without_source_date_epoch
128
127
  epoch = ENV["SOURCE_DATE_EPOCH"]
129
128
  ENV["SOURCE_DATE_EPOCH"] = nil
130
129
 
131
- start_time = Time.now.utc.to_i
132
-
133
130
  spec = Gem::Specification.new 'build', '1'
134
131
  spec.summary = 'build'
135
132
  spec.authors = 'build'
@@ -138,14 +135,11 @@ class TestGemPackage < Gem::Package::TarTestCase
138
135
 
139
136
  package = Gem::Package.new spec.file_name
140
137
 
141
- end_time = Time.now.utc.to_i
142
-
143
138
  assert_kind_of Time, package.build_time
144
139
 
145
140
  build_time = package.build_time.to_i
146
141
 
147
- assert_operator(start_time, :<=, build_time)
148
- assert_operator(build_time, :<=, end_time)
142
+ assert_equal Gem.source_date_epoch.to_i, build_time
149
143
  ensure
150
144
  ENV["SOURCE_DATE_EPOCH"] = epoch
151
145
  end
@@ -156,7 +150,7 @@ class TestGemPackage < Gem::Package::TarTestCase
156
150
 
157
151
  FileUtils.mkdir_p 'lib/empty'
158
152
 
159
- File.open 'lib/code.rb', 'w' do |io|
153
+ File.open 'lib/code.rb', 'w' do |io|
160
154
  io.write '# lib/code.rb'
161
155
  end
162
156
 
@@ -190,7 +184,7 @@ class TestGemPackage < Gem::Package::TarTestCase
190
184
 
191
185
  FileUtils.mkdir_p 'lib'
192
186
 
193
- File.open 'lib/code.rb', 'w' do |io|
187
+ File.open 'lib/code.rb', 'w' do |io|
194
188
  io.write '# lib/code.rb'
195
189
  end
196
190
 
@@ -448,7 +442,7 @@ class TestGemPackage < Gem::Package::TarTestCase
448
442
  end
449
443
 
450
444
  def test_raw_spec
451
- data_tgz = util_tar_gz { }
445
+ data_tgz = util_tar_gz {}
452
446
 
453
447
  gem = util_tar do |tar|
454
448
  tar.add_file 'data.tar.gz', 0644 do |io|
@@ -495,7 +489,7 @@ class TestGemPackage < Gem::Package::TarTestCase
495
489
  end
496
490
 
497
491
  def test_extract_files_empty
498
- data_tgz = util_tar_gz { }
492
+ data_tgz = util_tar_gz {}
499
493
 
500
494
  gem = util_tar do |tar|
501
495
  tar.add_file 'data.tar.gz', 0644 do |io|
@@ -541,11 +535,11 @@ class TestGemPackage < Gem::Package::TarTestCase
541
535
  package = Gem::Package.new @gem
542
536
 
543
537
  tgz_io = util_tar_gz do |tar|
544
- tar.add_file 'relative.rb', 0644 do |io|
538
+ tar.add_file 'relative.rb', 0644 do |io|
545
539
  io.write 'hi'
546
540
  end
547
541
 
548
- tar.mkdir 'lib', 0755
542
+ tar.mkdir 'lib', 0755
549
543
  tar.add_symlink 'lib/foo.rb', '../relative.rb', 0644
550
544
  end
551
545
 
@@ -611,6 +605,8 @@ class TestGemPackage < Gem::Package::TarTestCase
611
605
  destination_user_subdir = File.join destination_user_dir, 'dir'
612
606
  FileUtils.mkdir_p destination_user_subdir
613
607
 
608
+ skip "TMPDIR seems too long to add it as symlink into tar" if destination_user_dir.size > 90
609
+
614
610
  tgz_io = util_tar_gz do |tar|
615
611
  tar.add_symlink 'link', destination_user_dir, 16877
616
612
  tar.add_symlink 'link/dir', '.', 16877
@@ -640,7 +636,7 @@ class TestGemPackage < Gem::Package::TarTestCase
640
636
  tar.add_file 'lib/foo.rb', 0644 do |io|
641
637
  io.write 'hi'
642
638
  end
643
- tar.mkdir 'lib/foo', 0755
639
+ tar.mkdir 'lib/foo', 0755
644
640
  end
645
641
 
646
642
  package.extract_tar_gz tgz_io, @destination
@@ -934,8 +930,8 @@ class TestGemPackage < Gem::Package::TarTestCase
934
930
  package.verify
935
931
  end
936
932
 
937
- assert_match %r%^No such file or directory%, e.message
938
- 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
939
935
  end
940
936
 
941
937
  def test_verify_duplicate_file
@@ -1023,7 +1019,7 @@ class TestGemPackage < Gem::Package::TarTestCase
1023
1019
  bogus_data = Gem::Util.gzip 'hello'
1024
1020
  fake_signer = Class.new do
1025
1021
  def digest_name; 'SHA512'; end
1026
- def digest_algorithm; Digest(:SHA512); end
1022
+ def digest_algorithm; Digest(:SHA512).new; end
1027
1023
  def key; 'key'; end
1028
1024
  def sign(*); 'fake_sig'; end
1029
1025
  end
@@ -1102,7 +1098,7 @@ class TestGemPackage < Gem::Package::TarTestCase
1102
1098
  $bad_name = vm
1103
1099
 
1104
1100
  entry = Object.new
1105
- def entry.full_name() $bad_name end
1101
+ def entry.full_name() $bad_name end
1106
1102
 
1107
1103
  package = Gem::Package.new(@gem)
1108
1104
  package.instance_variable_set(:@files, [])