rubygems-update 3.3.18 → 3.3.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (374) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +52 -0
  3. data/Manifest.txt +4 -0
  4. data/bin/gem +2 -2
  5. data/bin/update_rubygems +4 -4
  6. data/bundler/CHANGELOG.md +78 -0
  7. data/bundler/UPGRADING.md +11 -4
  8. data/bundler/lib/bundler/build_metadata.rb +2 -2
  9. data/bundler/lib/bundler/cli/common.rb +1 -0
  10. data/bundler/lib/bundler/cli/install.rb +5 -2
  11. data/bundler/lib/bundler/cli/outdated.rb +12 -3
  12. data/bundler/lib/bundler/cli/platform.rb +1 -1
  13. data/bundler/lib/bundler/cli.rb +5 -3
  14. data/bundler/lib/bundler/definition.rb +103 -29
  15. data/bundler/lib/bundler/dsl.rb +2 -2
  16. data/bundler/lib/bundler/endpoint_specification.rb +1 -12
  17. data/bundler/lib/bundler/fetcher.rb +6 -6
  18. data/bundler/lib/bundler/gem_helpers.rb +7 -1
  19. data/bundler/lib/bundler/gem_version_promoter.rb +4 -0
  20. data/bundler/lib/bundler/index.rb +10 -12
  21. data/bundler/lib/bundler/inline.rb +1 -1
  22. data/bundler/lib/bundler/installer/standalone.rb +1 -1
  23. data/bundler/lib/bundler/installer.rb +14 -12
  24. data/bundler/lib/bundler/lazy_specification.rb +30 -23
  25. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-cache.1 +7 -1
  28. data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
  29. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-config.1 +25 -6
  32. data/bundler/lib/bundler/man/bundle-config.1.ronn +16 -6
  33. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-exec.1 +2 -2
  35. data/bundler/lib/bundler/man/bundle-exec.1.ronn +1 -1
  36. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  40. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  41. data/bundler/lib/bundler/man/bundle-install.1 +5 -1
  42. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -0
  43. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  47. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  48. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  49. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  50. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  51. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  52. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  53. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  55. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  56. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  57. data/bundler/lib/bundler/man/bundle.1 +10 -9
  58. data/bundler/lib/bundler/man/bundle.1.ronn +8 -6
  59. data/bundler/lib/bundler/man/gemfile.5 +16 -10
  60. data/bundler/lib/bundler/man/gemfile.5.ronn +23 -16
  61. data/bundler/lib/bundler/man/index.txt +1 -0
  62. data/bundler/lib/bundler/match_metadata.rb +13 -0
  63. data/bundler/lib/bundler/match_remote_metadata.rb +26 -0
  64. data/bundler/lib/bundler/plugin.rb +2 -0
  65. data/bundler/lib/bundler/remote_specification.rb +6 -11
  66. data/bundler/lib/bundler/resolver/spec_group.rb +11 -8
  67. data/bundler/lib/bundler/resolver.rb +40 -18
  68. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  69. data/bundler/lib/bundler/ruby_version.rb +5 -5
  70. data/bundler/lib/bundler/rubygems_ext.rb +41 -0
  71. data/bundler/lib/bundler/rubygems_gem_installer.rb +19 -12
  72. data/bundler/lib/bundler/settings.rb +1 -0
  73. data/bundler/lib/bundler/source/metadata.rb +1 -1
  74. data/bundler/lib/bundler/source_list.rb +4 -0
  75. data/bundler/lib/bundler/spec_set.rb +38 -33
  76. data/bundler/lib/bundler/version.rb +1 -1
  77. data/bundler/lib/bundler.rb +3 -3
  78. data/lib/rubygems/available_set.rb +3 -3
  79. data/lib/rubygems/basic_specification.rb +4 -4
  80. data/lib/rubygems/command.rb +25 -25
  81. data/lib/rubygems/command_manager.rb +9 -9
  82. data/lib/rubygems/commands/build_command.rb +8 -8
  83. data/lib/rubygems/commands/cert_command.rb +33 -33
  84. data/lib/rubygems/commands/check_command.rb +20 -20
  85. data/lib/rubygems/commands/cleanup_command.rb +17 -17
  86. data/lib/rubygems/commands/contents_command.rb +13 -13
  87. data/lib/rubygems/commands/dependency_command.rb +16 -16
  88. data/lib/rubygems/commands/environment_command.rb +5 -5
  89. data/lib/rubygems/commands/fetch_command.rb +8 -8
  90. data/lib/rubygems/commands/generate_index_command.rb +17 -17
  91. data/lib/rubygems/commands/help_command.rb +3 -3
  92. data/lib/rubygems/commands/info_command.rb +3 -3
  93. data/lib/rubygems/commands/install_command.rb +20 -20
  94. data/lib/rubygems/commands/list_command.rb +3 -3
  95. data/lib/rubygems/commands/lock_command.rb +4 -4
  96. data/lib/rubygems/commands/mirror_command.rb +3 -3
  97. data/lib/rubygems/commands/open_command.rb +9 -9
  98. data/lib/rubygems/commands/outdated_command.rb +5 -5
  99. data/lib/rubygems/commands/owner_command.rb +11 -11
  100. data/lib/rubygems/commands/pristine_command.rb +36 -36
  101. data/lib/rubygems/commands/push_command.rb +8 -8
  102. data/lib/rubygems/commands/query_command.rb +8 -8
  103. data/lib/rubygems/commands/rdoc_command.rb +17 -17
  104. data/lib/rubygems/commands/search_command.rb +3 -3
  105. data/lib/rubygems/commands/server_command.rb +3 -3
  106. data/lib/rubygems/commands/setup_command.rb +96 -106
  107. data/lib/rubygems/commands/signin_command.rb +9 -9
  108. data/lib/rubygems/commands/signout_command.rb +7 -7
  109. data/lib/rubygems/commands/sources_command.rb +21 -21
  110. data/lib/rubygems/commands/specification_command.rb +13 -13
  111. data/lib/rubygems/commands/stale_command.rb +2 -2
  112. data/lib/rubygems/commands/uninstall_command.rb +40 -40
  113. data/lib/rubygems/commands/unpack_command.rb +12 -12
  114. data/lib/rubygems/commands/update_command.rb +40 -56
  115. data/lib/rubygems/commands/which_command.rb +7 -7
  116. data/lib/rubygems/commands/yank_command.rb +11 -11
  117. data/lib/rubygems/config_file.rb +21 -21
  118. data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
  119. data/lib/rubygems/core_ext/kernel_require.rb +1 -1
  120. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  121. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  122. data/lib/rubygems/defaults.rb +16 -16
  123. data/lib/rubygems/dependency.rb +9 -9
  124. data/lib/rubygems/dependency_installer.rb +13 -13
  125. data/lib/rubygems/dependency_list.rb +6 -6
  126. data/lib/rubygems/doctor.rb +18 -18
  127. data/lib/rubygems/errors.rb +2 -2
  128. data/lib/rubygems/exceptions.rb +5 -5
  129. data/lib/rubygems/ext/build_error.rb +1 -1
  130. data/lib/rubygems/ext/builder.rb +16 -16
  131. data/lib/rubygems/ext/cargo_builder.rb +7 -7
  132. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  133. data/lib/rubygems/ext/configure_builder.rb +1 -1
  134. data/lib/rubygems/ext/ext_conf_builder.rb +8 -8
  135. data/lib/rubygems/ext/rake_builder.rb +3 -3
  136. data/lib/rubygems/ext.rb +7 -7
  137. data/lib/rubygems/gem_runner.rb +5 -5
  138. data/lib/rubygems/gemcutter_utilities.rb +31 -28
  139. data/lib/rubygems/indexer.rb +27 -27
  140. data/lib/rubygems/install_default_message.rb +2 -2
  141. data/lib/rubygems/install_message.rb +2 -2
  142. data/lib/rubygems/install_update_options.rb +55 -55
  143. data/lib/rubygems/installer.rb +32 -40
  144. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  145. data/lib/rubygems/local_remote_options.rb +18 -20
  146. data/lib/rubygems/mock_gem_ui.rb +2 -2
  147. data/lib/rubygems/name_tuple.rb +4 -4
  148. data/lib/rubygems/optparse.rb +1 -1
  149. data/lib/rubygems/package/file_source.rb +2 -2
  150. data/lib/rubygems/package/old.rb +8 -8
  151. data/lib/rubygems/package/tar_header.rb +50 -50
  152. data/lib/rubygems/package/tar_reader/entry.rb +2 -2
  153. data/lib/rubygems/package/tar_reader.rb +1 -1
  154. data/lib/rubygems/package/tar_writer.rb +7 -7
  155. data/lib/rubygems/package.rb +54 -43
  156. data/lib/rubygems/package_task.rb +4 -4
  157. data/lib/rubygems/platform.rb +66 -55
  158. data/lib/rubygems/psych_tree.rb +1 -1
  159. data/lib/rubygems/query_utils.rb +33 -33
  160. data/lib/rubygems/rdoc.rb +2 -2
  161. data/lib/rubygems/remote_fetcher.rb +22 -22
  162. data/lib/rubygems/request/connection_pools.rb +4 -4
  163. data/lib/rubygems/request/http_pool.rb +1 -1
  164. data/lib/rubygems/request.rb +22 -22
  165. data/lib/rubygems/request_set/gem_dependency_api.rb +18 -18
  166. data/lib/rubygems/request_set/lockfile/parser.rb +26 -26
  167. data/lib/rubygems/request_set/lockfile/tokenizer.rb +4 -4
  168. data/lib/rubygems/request_set/lockfile.rb +5 -5
  169. data/lib/rubygems/request_set.rb +17 -17
  170. data/lib/rubygems/requirement.rb +6 -6
  171. data/lib/rubygems/resolver/activation_request.rb +3 -3
  172. data/lib/rubygems/resolver/api_set.rb +4 -4
  173. data/lib/rubygems/resolver/api_specification.rb +6 -6
  174. data/lib/rubygems/resolver/best_set.rb +5 -5
  175. data/lib/rubygems/resolver/conflict.rb +10 -10
  176. data/lib/rubygems/resolver/dependency_request.rb +2 -2
  177. data/lib/rubygems/resolver/git_set.rb +2 -2
  178. data/lib/rubygems/resolver/git_specification.rb +6 -6
  179. data/lib/rubygems/resolver/index_set.rb +3 -3
  180. data/lib/rubygems/resolver/index_specification.rb +6 -5
  181. data/lib/rubygems/resolver/installed_specification.rb +4 -4
  182. data/lib/rubygems/resolver/installer_set.rb +11 -16
  183. data/lib/rubygems/resolver/local_specification.rb +2 -2
  184. data/lib/rubygems/resolver/lock_set.rb +4 -4
  185. data/lib/rubygems/resolver/lock_specification.rb +4 -4
  186. data/lib/rubygems/resolver/molinillo.rb +1 -1
  187. data/lib/rubygems/resolver/specification.rb +1 -1
  188. data/lib/rubygems/resolver/vendor_set.rb +1 -1
  189. data/lib/rubygems/resolver/vendor_specification.rb +3 -3
  190. data/lib/rubygems/resolver.rb +39 -39
  191. data/lib/rubygems/s3_uri_signer.rb +6 -6
  192. data/lib/rubygems/safe_yaml.rb +2 -2
  193. data/lib/rubygems/security/policies.rb +11 -11
  194. data/lib/rubygems/security/policy.rb +18 -18
  195. data/lib/rubygems/security/signer.rb +5 -5
  196. data/lib/rubygems/security/trust_dir.rb +3 -3
  197. data/lib/rubygems/security.rb +28 -28
  198. data/lib/rubygems/security_option.rb +5 -5
  199. data/lib/rubygems/source/git.rb +21 -21
  200. data/lib/rubygems/source/installed.rb +1 -1
  201. data/lib/rubygems/source/local.rb +2 -2
  202. data/lib/rubygems/source/specific_file.rb +1 -1
  203. data/lib/rubygems/source.rb +16 -16
  204. data/lib/rubygems/spec_fetcher.rb +9 -9
  205. data/lib/rubygems/specification.rb +63 -62
  206. data/lib/rubygems/specification_policy.rb +15 -15
  207. data/lib/rubygems/stub_specification.rb +5 -5
  208. data/lib/rubygems/tsort.rb +1 -1
  209. data/lib/rubygems/uninstaller.rb +18 -18
  210. data/lib/rubygems/uri.rb +4 -4
  211. data/lib/rubygems/uri_formatter.rb +1 -1
  212. data/lib/rubygems/user_interaction.rb +33 -19
  213. data/lib/rubygems/util/licenses.rb +3 -3
  214. data/lib/rubygems/util.rb +10 -10
  215. data/lib/rubygems/validator.rb +5 -5
  216. data/lib/rubygems/version.rb +15 -9
  217. data/lib/rubygems/version_option.rb +3 -3
  218. data/lib/rubygems.rb +62 -61
  219. data/rubygems-update.gemspec +2 -2
  220. data/setup.rb +9 -9
  221. data/test/rubygems/helper.rb +132 -132
  222. data/test/rubygems/installer_test_case.rb +13 -13
  223. data/test/rubygems/package/tar_test_case.rb +2 -2
  224. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  225. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  226. data/test/rubygems/rubygems_plugin.rb +2 -2
  227. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -4
  228. data/test/rubygems/test_bundled_ca.rb +10 -10
  229. data/test/rubygems/test_config.rb +3 -3
  230. data/test/rubygems/test_deprecate.rb +3 -3
  231. data/test/rubygems/test_exit.rb +2 -2
  232. data/test/rubygems/test_gem.rb +342 -342
  233. data/test/rubygems/test_gem_available_set.rb +21 -21
  234. data/test/rubygems/test_gem_bundler_version_finder.rb +1 -1
  235. data/test/rubygems/test_gem_command.rb +44 -44
  236. data/test/rubygems/test_gem_command_manager.rb +29 -29
  237. data/test/rubygems/test_gem_commands_build_command.rb +63 -63
  238. data/test/rubygems/test_gem_commands_cert_command.rb +97 -99
  239. data/test/rubygems/test_gem_commands_check_command.rb +4 -4
  240. data/test/rubygems/test_gem_commands_cleanup_command.rb +40 -40
  241. data/test/rubygems/test_gem_commands_contents_command.rb +27 -27
  242. data/test/rubygems/test_gem_commands_dependency_command.rb +36 -36
  243. data/test/rubygems/test_gem_commands_environment_command.rb +16 -16
  244. data/test/rubygems/test_gem_commands_fetch_command.rb +37 -37
  245. data/test/rubygems/test_gem_commands_generate_index_command.rb +7 -7
  246. data/test/rubygems/test_gem_commands_help_command.rb +13 -13
  247. data/test/rubygems/test_gem_commands_info_command.rb +2 -2
  248. data/test/rubygems/test_gem_commands_install_command.rb +131 -131
  249. data/test/rubygems/test_gem_commands_list_command.rb +4 -4
  250. data/test/rubygems/test_gem_commands_lock_command.rb +10 -10
  251. data/test/rubygems/test_gem_commands_mirror.rb +2 -2
  252. data/test/rubygems/test_gem_commands_open_command.rb +4 -4
  253. data/test/rubygems/test_gem_commands_outdated_command.rb +9 -9
  254. data/test/rubygems/test_gem_commands_owner_command.rb +41 -41
  255. data/test/rubygems/test_gem_commands_pristine_command.rb +92 -92
  256. data/test/rubygems/test_gem_commands_push_command.rb +54 -54
  257. data/test/rubygems/test_gem_commands_query_command.rb +73 -73
  258. data/test/rubygems/test_gem_commands_search_command.rb +2 -2
  259. data/test/rubygems/test_gem_commands_server_command.rb +2 -2
  260. data/test/rubygems/test_gem_commands_setup_command.rb +119 -85
  261. data/test/rubygems/test_gem_commands_signin_command.rb +45 -31
  262. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  263. data/test/rubygems/test_gem_commands_sources_command.rb +28 -29
  264. data/test/rubygems/test_gem_commands_specification_command.rb +32 -32
  265. data/test/rubygems/test_gem_commands_stale_command.rb +4 -4
  266. data/test/rubygems/test_gem_commands_uninstall_command.rb +75 -75
  267. data/test/rubygems/test_gem_commands_unpack_command.rb +31 -31
  268. data/test/rubygems/test_gem_commands_update_command.rb +89 -89
  269. data/test/rubygems/test_gem_commands_which_command.rb +6 -6
  270. data/test/rubygems/test_gem_commands_yank_command.rb +40 -40
  271. data/test/rubygems/test_gem_config_file.rb +93 -81
  272. data/test/rubygems/test_gem_dependency.rb +73 -73
  273. data/test/rubygems/test_gem_dependency_installer.rb +165 -165
  274. data/test/rubygems/test_gem_dependency_list.rb +47 -47
  275. data/test/rubygems/test_gem_dependency_resolution_error.rb +4 -4
  276. data/test/rubygems/test_gem_doctor.rb +26 -26
  277. data/test/rubygems/test_gem_ext_builder.rb +59 -59
  278. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +6 -6
  279. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
  280. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +8 -8
  281. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +1 -1
  282. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +6 -6
  283. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  284. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +8 -8
  285. data/test/rubygems/test_gem_ext_cargo_builder.rb +26 -26
  286. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +3 -3
  287. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +23 -23
  288. data/test/rubygems/test_gem_ext_cmake_builder.rb +15 -15
  289. data/test/rubygems/test_gem_ext_configure_builder.rb +13 -13
  290. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  291. data/test/rubygems/test_gem_ext_rake_builder.rb +15 -15
  292. data/test/rubygems/test_gem_gem_runner.rb +7 -7
  293. data/test/rubygems/test_gem_gemcutter_utilities.rb +66 -66
  294. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -4
  295. data/test/rubygems/test_gem_indexer.rb +48 -48
  296. data/test/rubygems/test_gem_install_update_options.rb +16 -16
  297. data/test/rubygems/test_gem_installer.rb +303 -300
  298. data/test/rubygems/test_gem_local_remote_options.rb +10 -10
  299. data/test/rubygems/test_gem_name_tuple.rb +4 -4
  300. data/test/rubygems/test_gem_package.rb +228 -206
  301. data/test/rubygems/test_gem_package_old.rb +13 -13
  302. data/test/rubygems/test_gem_package_tar_header.rb +42 -42
  303. data/test/rubygems/test_gem_package_tar_reader.rb +8 -8
  304. data/test/rubygems/test_gem_package_tar_reader_entry.rb +10 -10
  305. data/test/rubygems/test_gem_package_tar_writer.rb +76 -76
  306. data/test/rubygems/test_gem_package_task.rb +18 -18
  307. data/test/rubygems/test_gem_path_support.rb +14 -14
  308. data/test/rubygems/test_gem_platform.rb +266 -227
  309. data/test/rubygems/test_gem_rdoc.rb +14 -14
  310. data/test/rubygems/test_gem_remote_fetcher.rb +149 -149
  311. data/test/rubygems/test_gem_request.rb +55 -55
  312. data/test/rubygems/test_gem_request_connection_pools.rb +29 -29
  313. data/test/rubygems/test_gem_request_set.rb +99 -99
  314. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +204 -206
  315. data/test/rubygems/test_gem_request_set_lockfile.rb +86 -86
  316. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +56 -56
  317. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +62 -62
  318. data/test/rubygems/test_gem_requirement.rb +47 -41
  319. data/test/rubygems/test_gem_resolver.rb +133 -99
  320. data/test/rubygems/test_gem_resolver_activation_request.rb +6 -6
  321. data/test/rubygems/test_gem_resolver_api_set.rb +33 -33
  322. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -47
  323. data/test/rubygems/test_gem_resolver_best_set.rb +22 -22
  324. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -1
  325. data/test/rubygems/test_gem_resolver_conflict.rb +12 -12
  326. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -15
  327. data/test/rubygems/test_gem_resolver_git_set.rb +21 -21
  328. data/test/rubygems/test_gem_resolver_git_specification.rb +21 -21
  329. data/test/rubygems/test_gem_resolver_index_set.rb +12 -12
  330. data/test/rubygems/test_gem_resolver_index_specification.rb +16 -16
  331. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -5
  332. data/test/rubygems/test_gem_resolver_installer_set.rb +78 -34
  333. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -7
  334. data/test/rubygems/test_gem_resolver_lock_set.rb +12 -12
  335. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -17
  336. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -1
  337. data/test/rubygems/test_gem_resolver_specification.rb +8 -8
  338. data/test/rubygems/test_gem_resolver_vendor_set.rb +6 -6
  339. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -10
  340. data/test/rubygems/test_gem_security.rb +67 -67
  341. data/test/rubygems/test_gem_security_policy.rb +62 -62
  342. data/test/rubygems/test_gem_security_signer.rb +28 -28
  343. data/test/rubygems/test_gem_security_trust_dir.rb +4 -4
  344. data/test/rubygems/test_gem_silent_ui.rb +38 -32
  345. data/test/rubygems/test_gem_source.rb +44 -44
  346. data/test/rubygems/test_gem_source_fetch_problem.rb +9 -9
  347. data/test/rubygems/test_gem_source_git.rb +59 -59
  348. data/test/rubygems/test_gem_source_installed.rb +16 -16
  349. data/test/rubygems/test_gem_source_list.rb +5 -5
  350. data/test/rubygems/test_gem_source_local.rb +14 -14
  351. data/test/rubygems/test_gem_source_lock.rb +31 -31
  352. data/test/rubygems/test_gem_source_specific_file.rb +17 -17
  353. data/test/rubygems/test_gem_source_subpath_problem.rb +7 -7
  354. data/test/rubygems/test_gem_source_vendor.rb +13 -13
  355. data/test/rubygems/test_gem_spec_fetcher.rb +72 -72
  356. data/test/rubygems/test_gem_specification.rb +444 -436
  357. data/test/rubygems/test_gem_stream_ui.rb +19 -19
  358. data/test/rubygems/test_gem_stub_specification.rb +32 -32
  359. data/test/rubygems/test_gem_text.rb +1 -1
  360. data/test/rubygems/test_gem_uninstaller.rb +112 -112
  361. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -3
  362. data/test/rubygems/test_gem_uri.rb +4 -4
  363. data/test/rubygems/test_gem_uri_formatter.rb +14 -14
  364. data/test/rubygems/test_gem_util.rb +23 -23
  365. data/test/rubygems/test_gem_validator.rb +8 -8
  366. data/test/rubygems/test_gem_version.rb +22 -15
  367. data/test/rubygems/test_gem_version_option.rb +15 -15
  368. data/test/rubygems/test_kernel.rb +31 -31
  369. data/test/rubygems/test_project_sanity.rb +1 -1
  370. data/test/rubygems/test_remote_fetch_error.rb +6 -6
  371. data/test/rubygems/test_require.rb +43 -43
  372. data/test/rubygems/test_rubygems.rb +8 -8
  373. data/test/rubygems/utilities.rb +19 -19
  374. metadata +7 -3
@@ -53,42 +53,42 @@ class Gem::Package::TarHeader
53
53
  ##
54
54
  # Pack format for a tar header
55
55
 
56
- PACK_FORMAT = 'a100' + # name
57
- 'a8' + # mode
58
- 'a8' + # uid
59
- 'a8' + # gid
60
- 'a12' + # size
61
- 'a12' + # mtime
62
- 'a7a' + # chksum
63
- 'a' + # typeflag
64
- 'a100' + # linkname
65
- 'a6' + # magic
66
- 'a2' + # version
67
- 'a32' + # uname
68
- 'a32' + # gname
69
- 'a8' + # devmajor
70
- 'a8' + # devminor
71
- 'a155' # prefix
56
+ PACK_FORMAT = "a100" + # name
57
+ "a8" + # mode
58
+ "a8" + # uid
59
+ "a8" + # gid
60
+ "a12" + # size
61
+ "a12" + # mtime
62
+ "a7a" + # chksum
63
+ "a" + # typeflag
64
+ "a100" + # linkname
65
+ "a6" + # magic
66
+ "a2" + # version
67
+ "a32" + # uname
68
+ "a32" + # gname
69
+ "a8" + # devmajor
70
+ "a8" + # devminor
71
+ "a155" # prefix
72
72
 
73
73
  ##
74
74
  # Unpack format for a tar header
75
75
 
76
- UNPACK_FORMAT = 'A100' + # name
77
- 'A8' + # mode
78
- 'A8' + # uid
79
- 'A8' + # gid
80
- 'A12' + # size
81
- 'A12' + # mtime
82
- 'A8' + # checksum
83
- 'A' + # typeflag
84
- 'A100' + # linkname
85
- 'A6' + # magic
86
- 'A2' + # version
87
- 'A32' + # uname
88
- 'A32' + # gname
89
- 'A8' + # devmajor
90
- 'A8' + # devminor
91
- 'A155' # prefix
76
+ UNPACK_FORMAT = "A100" + # name
77
+ "A8" + # mode
78
+ "A8" + # uid
79
+ "A8" + # gid
80
+ "A12" + # size
81
+ "A12" + # mtime
82
+ "A8" + # checksum
83
+ "A" + # typeflag
84
+ "A100" + # linkname
85
+ "A6" + # magic
86
+ "A2" + # version
87
+ "A32" + # uname
88
+ "A32" + # gname
89
+ "A8" + # devmajor
90
+ "A8" + # devminor
91
+ "A155" # prefix
92
92
 
93
93
  attr_reader(*FIELDS)
94
94
 
@@ -134,7 +134,7 @@ class Gem::Package::TarHeader
134
134
  # \ff flags a negative 256-based number
135
135
  # In case we have a match, parse it as a signed binary value
136
136
  # in big-endian order, except that the high-order bit is ignored.
137
- return str.unpack('N2').last if str =~ /\A[\x80\xff]/n
137
+ return str.unpack("N2").last if str =~ /\A[\x80\xff]/n
138
138
  strict_oct(str)
139
139
  end
140
140
 
@@ -173,23 +173,23 @@ class Gem::Package::TarHeader
173
173
  end
174
174
 
175
175
  def ==(other) # :nodoc:
176
- self.class === other and
177
- @checksum == other.checksum and
178
- @devmajor == other.devmajor and
179
- @devminor == other.devminor and
180
- @gid == other.gid and
181
- @gname == other.gname and
182
- @linkname == other.linkname and
183
- @magic == other.magic and
184
- @mode == other.mode and
185
- @mtime == other.mtime and
186
- @name == other.name and
187
- @prefix == other.prefix and
188
- @size == other.size and
189
- @typeflag == other.typeflag and
190
- @uid == other.uid and
191
- @uname == other.uname and
192
- @version == other.version
176
+ self.class === other &&
177
+ @checksum == other.checksum &&
178
+ @devmajor == other.devmajor &&
179
+ @devminor == other.devminor &&
180
+ @gid == other.gid &&
181
+ @gname == other.gname &&
182
+ @linkname == other.linkname &&
183
+ @magic == other.magic &&
184
+ @mode == other.mode &&
185
+ @mtime == other.mtime &&
186
+ @name == other.name &&
187
+ @prefix == other.prefix &&
188
+ @size == other.size &&
189
+ @typeflag == other.typeflag &&
190
+ @uid == other.uid &&
191
+ @uname == other.uname &&
192
+ @version == other.version
193
193
  end
194
194
 
195
195
  def to_s # :nodoc:
@@ -68,9 +68,9 @@ class Gem::Package::TarReader::Entry
68
68
  @header.name
69
69
  end
70
70
  rescue ArgumentError => e
71
- raise unless e.message == 'string contains null byte'
71
+ raise unless e.message == "string contains null byte"
72
72
  raise Gem::Package::TarInvalidError,
73
- 'tar is corrupt, name contains null byte'
73
+ "tar is corrupt, name contains null byte"
74
74
  end
75
75
 
76
76
  ##
@@ -121,4 +121,4 @@ class Gem::Package::TarReader
121
121
  end
122
122
  end
123
123
 
124
- require_relative 'tar_reader/entry'
124
+ require_relative "tar_reader/entry"
@@ -166,7 +166,7 @@ class Gem::Package::TarWriter
166
166
  def add_file_signed(name, mode, signer)
167
167
  digest_algorithms = [
168
168
  signer.digest_algorithm,
169
- Gem::Security.create_digest('SHA512'),
169
+ Gem::Security.create_digest("SHA512"),
170
170
  ].compact.uniq
171
171
 
172
172
  digests = add_file_digest name, mode, digest_algorithms do |io|
@@ -304,17 +304,17 @@ class Gem::Package::TarWriter
304
304
  raise Gem::Package::TooLongFileName.new("File \"#{name}\" has a too long path (should be 256 or less)")
305
305
  end
306
306
 
307
- prefix = ''
307
+ prefix = ""
308
308
  if name.bytesize > 100
309
- parts = name.split('/', -1) # parts are never empty here
309
+ parts = name.split("/", -1) # parts are never empty here
310
310
  name = parts.pop # initially empty for names with a trailing slash ("foo/.../bar/")
311
- prefix = parts.join('/') # if empty, then it's impossible to split (parts is empty too)
311
+ prefix = parts.join("/") # if empty, then it's impossible to split (parts is empty too)
312
312
  while !parts.empty? && (prefix.bytesize > 155 || name.empty?)
313
- name = parts.pop + '/' + name
314
- prefix = parts.join('/')
313
+ name = parts.pop + "/" + name
314
+ prefix = parts.join("/")
315
315
  end
316
316
 
317
- if name.bytesize > 100 or prefix.empty?
317
+ if name.bytesize > 100 || prefix.empty?
318
318
  raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
319
319
  end
320
320
 
@@ -5,8 +5,8 @@
5
5
  #++
6
6
 
7
7
  require_relative "../rubygems"
8
- require_relative 'security'
9
- require_relative 'user_interaction'
8
+ require_relative "security"
9
+ require_relative "user_interaction"
10
10
 
11
11
  ##
12
12
  # Example using a Gem::Package
@@ -68,14 +68,14 @@ class Gem::Package
68
68
  class PathError < Error
69
69
  def initialize(destination, destination_dir)
70
70
  super "installing into parent path %s of %s is not allowed" %
71
- [destination, destination_dir]
71
+ [destination, destination_dir]
72
72
  end
73
73
  end
74
74
 
75
75
  class SymlinkError < Error
76
76
  def initialize(name, destination, destination_dir)
77
77
  super "installing symlink '%s' pointing to parent path %s of %s is not allowed" %
78
- [name, destination, destination_dir]
78
+ [name, destination, destination_dir]
79
79
  end
80
80
  end
81
81
 
@@ -158,7 +158,7 @@ class Gem::Package
158
158
  return super unless gem.present?
159
159
 
160
160
  return super unless gem.start
161
- return super unless gem.start.include? 'MD5SUM ='
161
+ return super unless gem.start.include? "MD5SUM ="
162
162
 
163
163
  Gem::Package::Old.new gem
164
164
  end
@@ -178,9 +178,9 @@ class Gem::Package
178
178
  tar = Gem::Package::TarReader.new io
179
179
  tar.each_entry do |entry|
180
180
  case entry.full_name
181
- when 'metadata' then
181
+ when "metadata" then
182
182
  metadata = entry.read
183
- when 'metadata.gz' then
183
+ when "metadata.gz" then
184
184
  metadata = Gem::Util.gunzip entry.read
185
185
  end
186
186
  end
@@ -193,7 +193,7 @@ class Gem::Package
193
193
  # Creates a new package that will read or write to the file +gem+.
194
194
 
195
195
  def initialize(gem, security_policy) # :notnew:
196
- require 'zlib'
196
+ require "zlib"
197
197
 
198
198
  @gem = gem
199
199
 
@@ -229,7 +229,7 @@ class Gem::Package
229
229
  end
230
230
  end
231
231
 
232
- tar.add_file_signed 'checksums.yaml.gz', 0444, @signer do |io|
232
+ tar.add_file_signed "checksums.yaml.gz", 0444, @signer do |io|
233
233
  gzip_to io do |gz_io|
234
234
  Psych.dump checksums_by_algorithm, gz_io
235
235
  end
@@ -241,7 +241,7 @@ class Gem::Package
241
241
  # and adds this file to the +tar+.
242
242
 
243
243
  def add_contents(tar) # :nodoc:
244
- digests = tar.add_file_signed 'data.tar.gz', 0444, @signer do |io|
244
+ digests = tar.add_file_signed "data.tar.gz", 0444, @signer do |io|
245
245
  gzip_to io do |gz_io|
246
246
  Gem::Package::TarWriter.new gz_io do |data_tar|
247
247
  add_files data_tar
@@ -249,7 +249,7 @@ class Gem::Package
249
249
  end
250
250
  end
251
251
 
252
- @checksums['data.tar.gz'] = digests
252
+ @checksums["data.tar.gz"] = digests
253
253
  end
254
254
 
255
255
  ##
@@ -266,7 +266,7 @@ class Gem::Package
266
266
  next unless stat.file?
267
267
 
268
268
  tar.add_file_simple file, stat.mode, stat.size do |dst_io|
269
- File.open file, 'rb' do |src_io|
269
+ File.open file, "rb" do |src_io|
270
270
  dst_io.write src_io.read 16384 until src_io.eof?
271
271
  end
272
272
  end
@@ -277,13 +277,13 @@ class Gem::Package
277
277
  # Adds the package's Gem::Specification to the +tar+ file
278
278
 
279
279
  def add_metadata(tar) # :nodoc:
280
- digests = tar.add_file_signed 'metadata.gz', 0444, @signer do |io|
280
+ digests = tar.add_file_signed "metadata.gz", 0444, @signer do |io|
281
281
  gzip_to io do |gz_io|
282
282
  gz_io.write @spec.to_yaml
283
283
  end
284
284
  end
285
285
 
286
- @checksums['metadata.gz'] = digests
286
+ @checksums["metadata.gz"] = digests
287
287
  end
288
288
 
289
289
  ##
@@ -335,7 +335,7 @@ EOM
335
335
  gem_tar = Gem::Package::TarReader.new io
336
336
 
337
337
  gem_tar.each do |entry|
338
- next unless entry.full_name == 'data.tar.gz'
338
+ next unless entry.full_name == "data.tar.gz"
339
339
 
340
340
  open_tar_gz entry do |pkg_tar|
341
341
  pkg_tar.each do |contents_entry|
@@ -387,7 +387,7 @@ EOM
387
387
  reader = Gem::Package::TarReader.new io
388
388
 
389
389
  reader.each do |entry|
390
- next unless entry.full_name == 'data.tar.gz'
390
+ next unless entry.full_name == "data.tar.gz"
391
391
 
392
392
  extract_tar_gz entry, destination_dir, pattern
393
393
 
@@ -409,18 +409,23 @@ EOM
409
409
 
410
410
  def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
411
411
  directories = []
412
+ symlinks = []
413
+
412
414
  open_tar_gz io do |tar|
413
415
  tar.each do |entry|
414
- next unless File.fnmatch pattern, entry.full_name, File::FNM_DOTMATCH
416
+ full_name = entry.full_name
417
+ next unless File.fnmatch pattern, full_name, File::FNM_DOTMATCH
415
418
 
416
- destination = install_location entry.full_name, destination_dir
419
+ destination = install_location full_name, destination_dir
417
420
 
418
421
  if entry.symlink?
419
422
  link_target = entry.header.linkname
420
423
  real_destination = link_target.start_with?("/") ? link_target : File.expand_path(link_target, File.dirname(destination))
421
424
 
422
- raise Gem::Package::SymlinkError.new(entry.full_name, real_destination, destination_dir) unless
423
- normalize_path(real_destination).start_with? normalize_path(destination_dir + '/')
425
+ raise Gem::Package::SymlinkError.new(full_name, real_destination, destination_dir) unless
426
+ normalize_path(real_destination).start_with? normalize_path(destination_dir + "/")
427
+
428
+ symlinks << [full_name, link_target, destination, real_destination]
424
429
  end
425
430
 
426
431
  FileUtils.rm_rf destination
@@ -439,17 +444,23 @@ EOM
439
444
  directories << mkdir
440
445
  end
441
446
 
442
- File.open destination, 'wb' do |out|
447
+ File.open destination, "wb" do |out|
443
448
  out.write entry.read
444
449
  FileUtils.chmod file_mode(entry.header.mode), destination
445
450
  end if entry.file?
446
451
 
447
- File.symlink(entry.header.linkname, destination) if entry.symlink?
448
-
449
452
  verbose destination
450
453
  end
451
454
  end
452
455
 
456
+ symlinks.each do |name, target, destination, real_destination|
457
+ if File.exist?(real_destination)
458
+ File.symlink(target, destination)
459
+ else
460
+ alert_warning "#{@spec.full_name} ships with a dangling symlink named #{name} pointing to missing #{target} file. Ignoring"
461
+ end
462
+ end
463
+
453
464
  if dir_mode
454
465
  File.chmod(dir_mode, *directories)
455
466
  end
@@ -481,13 +492,13 @@ EOM
481
492
 
482
493
  def install_location(filename, destination_dir) # :nodoc:
483
494
  raise Gem::Package::PathError.new(filename, destination_dir) if
484
- filename.start_with? '/'
495
+ filename.start_with? "/"
485
496
 
486
497
  destination_dir = File.realpath(destination_dir)
487
498
  destination = File.expand_path(filename, destination_dir)
488
499
 
489
500
  raise Gem::Package::PathError.new(destination, destination_dir) unless
490
- normalize_path(destination).start_with? normalize_path(destination_dir + '/')
501
+ normalize_path(destination).start_with? normalize_path(destination_dir + "/")
491
502
 
492
503
  destination.tap(&Gem::UNTAINT)
493
504
  destination
@@ -506,9 +517,9 @@ EOM
506
517
 
507
518
  def load_spec(entry) # :nodoc:
508
519
  case entry.full_name
509
- when 'metadata' then
520
+ when "metadata" then
510
521
  @spec = Gem::Specification.from_yaml entry.read
511
- when 'metadata.gz' then
522
+ when "metadata.gz" then
512
523
  Zlib::GzipReader.wrap(entry, external_encoding: Encoding::UTF_8) do |gzio|
513
524
  @spec = Gem::Specification.from_yaml gzio.read
514
525
  end
@@ -532,7 +543,7 @@ EOM
532
543
  def read_checksums(gem)
533
544
  Gem.load_yaml
534
545
 
535
- @checksums = gem.seek 'checksums.yaml.gz' do |entry|
546
+ @checksums = gem.seek "checksums.yaml.gz" do |entry|
536
547
  Zlib::GzipReader.wrap entry do |gz_io|
537
548
  Gem::SafeYAML.safe_load gz_io.read
538
549
  end
@@ -544,7 +555,7 @@ EOM
544
555
  # certificate and key are not present only checksum generation is set up.
545
556
 
546
557
  def setup_signer(signer_options: {})
547
- passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
558
+ passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
548
559
  if @spec.signing_key
549
560
  @signer =
550
561
  Gem::Security::Signer.new(
@@ -651,7 +662,7 @@ EOM
651
662
  case file_name
652
663
  when "metadata", "metadata.gz" then
653
664
  load_spec entry
654
- when 'data.tar.gz' then
665
+ when "data.tar.gz" then
655
666
  verify_gz entry
656
667
  end
657
668
  rescue
@@ -668,15 +679,15 @@ EOM
668
679
  end
669
680
 
670
681
  unless @spec
671
- raise Gem::Package::FormatError.new 'package metadata is missing', @gem
682
+ raise Gem::Package::FormatError.new "package metadata is missing", @gem
672
683
  end
673
684
 
674
- unless @files.include? 'data.tar.gz'
685
+ unless @files.include? "data.tar.gz"
675
686
  raise Gem::Package::FormatError.new \
676
- 'package content (data.tar.gz) is missing', @gem
687
+ "package content (data.tar.gz) is missing", @gem
677
688
  end
678
689
 
679
- if duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first) and duplicates.any?
690
+ if (duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)) && duplicates.any?
680
691
  raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})"
681
692
  end
682
693
  end
@@ -693,12 +704,12 @@ EOM
693
704
  end
694
705
  end
695
706
 
696
- require_relative 'package/digest_io'
697
- require_relative 'package/source'
698
- require_relative 'package/file_source'
699
- require_relative 'package/io_source'
700
- require_relative 'package/old'
701
- require_relative 'package/tar_header'
702
- require_relative 'package/tar_reader'
703
- require_relative 'package/tar_reader/entry'
704
- require_relative 'package/tar_writer'
707
+ require_relative "package/digest_io"
708
+ require_relative "package/source"
709
+ require_relative "package/file_source"
710
+ require_relative "package/io_source"
711
+ require_relative "package/old"
712
+ require_relative "package/tar_header"
713
+ require_relative "package/tar_reader"
714
+ require_relative "package/tar_reader/entry"
715
+ require_relative "package/tar_writer"
@@ -20,9 +20,9 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
 
23
- require_relative '../rubygems'
24
- require_relative 'package'
25
- require 'rake/packagetask'
23
+ require_relative "../rubygems"
24
+ require_relative "package"
25
+ require "rake/packagetask"
26
26
 
27
27
  ##
28
28
  # Create a package based upon a Gem::Specification. Gem packages, as well as
@@ -113,7 +113,7 @@ class Gem::PackageTask < Rake::PackageTask
113
113
  Gem::Package.build gem_spec
114
114
 
115
115
  verbose trace do
116
- mv gem_file, '..'
116
+ mv gem_file, ".."
117
117
  end
118
118
  end
119
119
  end