rubygems-update 3.3.18 → 3.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +65 -0
  3. data/Manifest.txt +11 -0
  4. data/bin/gem +2 -2
  5. data/bin/update_rubygems +4 -4
  6. data/bundler/CHANGELOG.md +100 -0
  7. data/bundler/UPGRADING.md +11 -4
  8. data/bundler/bundler.gemspec +6 -8
  9. data/bundler/lib/bundler/build_metadata.rb +2 -2
  10. data/bundler/lib/bundler/cli/common.rb +1 -0
  11. data/bundler/lib/bundler/cli/install.rb +5 -2
  12. data/bundler/lib/bundler/cli/outdated.rb +12 -3
  13. data/bundler/lib/bundler/cli/platform.rb +1 -1
  14. data/bundler/lib/bundler/cli.rb +7 -4
  15. data/bundler/lib/bundler/current_ruby.rb +14 -5
  16. data/bundler/lib/bundler/definition.rb +102 -31
  17. data/bundler/lib/bundler/dependency.rb +18 -85
  18. data/bundler/lib/bundler/dsl.rb +2 -2
  19. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  20. data/bundler/lib/bundler/feature_flag.rb +0 -1
  21. data/bundler/lib/bundler/fetcher.rb +6 -6
  22. data/bundler/lib/bundler/gem_helpers.rb +7 -1
  23. data/bundler/lib/bundler/gem_version_promoter.rb +8 -18
  24. data/bundler/lib/bundler/index.rb +10 -12
  25. data/bundler/lib/bundler/injector.rb +2 -1
  26. data/bundler/lib/bundler/inline.rb +1 -1
  27. data/bundler/lib/bundler/installer/standalone.rb +1 -1
  28. data/bundler/lib/bundler/installer.rb +14 -12
  29. data/bundler/lib/bundler/lazy_specification.rb +30 -23
  30. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  31. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  32. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  33. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-cache.1 +7 -1
  35. data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
  36. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-config.1 +25 -6
  39. data/bundler/lib/bundler/man/bundle-config.1.ronn +16 -6
  40. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  41. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  42. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-exec.1 +2 -2
  44. data/bundler/lib/bundler/man/bundle-exec.1.ronn +1 -1
  45. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  47. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  48. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  49. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  50. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  51. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  52. data/bundler/lib/bundler/man/bundle-install.1 +5 -1
  53. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -0
  54. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  55. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  56. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  57. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  58. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  59. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  60. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  61. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  62. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  63. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  64. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  66. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  67. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  68. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  69. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  70. data/bundler/lib/bundler/man/bundle.1 +15 -10
  71. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  72. data/bundler/lib/bundler/man/gemfile.5 +23 -47
  73. data/bundler/lib/bundler/man/gemfile.5.ronn +32 -43
  74. data/bundler/lib/bundler/man/index.txt +4 -0
  75. data/bundler/lib/bundler/match_metadata.rb +13 -0
  76. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  77. data/bundler/lib/bundler/plugin.rb +2 -0
  78. data/bundler/lib/bundler/remote_specification.rb +6 -11
  79. data/bundler/lib/bundler/resolver/base.rb +50 -0
  80. data/bundler/lib/bundler/resolver/spec_group.rb +11 -8
  81. data/bundler/lib/bundler/resolver.rb +95 -90
  82. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  83. data/bundler/lib/bundler/ruby_version.rb +5 -5
  84. data/bundler/lib/bundler/rubygems_ext.rb +52 -1
  85. data/bundler/lib/bundler/rubygems_gem_installer.rb +19 -12
  86. data/bundler/lib/bundler/settings.rb +1 -1
  87. data/bundler/lib/bundler/source/metadata.rb +1 -1
  88. data/bundler/lib/bundler/source_list.rb +4 -0
  89. data/bundler/lib/bundler/spec_set.rb +48 -33
  90. data/bundler/lib/bundler/version.rb +1 -1
  91. data/bundler/lib/bundler.rb +3 -3
  92. data/lib/rubygems/available_set.rb +3 -3
  93. data/lib/rubygems/basic_specification.rb +4 -4
  94. data/lib/rubygems/command.rb +25 -25
  95. data/lib/rubygems/command_manager.rb +9 -9
  96. data/lib/rubygems/commands/build_command.rb +8 -8
  97. data/lib/rubygems/commands/cert_command.rb +33 -33
  98. data/lib/rubygems/commands/check_command.rb +20 -20
  99. data/lib/rubygems/commands/cleanup_command.rb +17 -17
  100. data/lib/rubygems/commands/contents_command.rb +13 -13
  101. data/lib/rubygems/commands/dependency_command.rb +16 -16
  102. data/lib/rubygems/commands/environment_command.rb +5 -5
  103. data/lib/rubygems/commands/fetch_command.rb +8 -8
  104. data/lib/rubygems/commands/generate_index_command.rb +17 -17
  105. data/lib/rubygems/commands/help_command.rb +3 -3
  106. data/lib/rubygems/commands/info_command.rb +3 -3
  107. data/lib/rubygems/commands/install_command.rb +20 -20
  108. data/lib/rubygems/commands/list_command.rb +3 -3
  109. data/lib/rubygems/commands/lock_command.rb +4 -4
  110. data/lib/rubygems/commands/mirror_command.rb +3 -3
  111. data/lib/rubygems/commands/open_command.rb +9 -9
  112. data/lib/rubygems/commands/outdated_command.rb +5 -5
  113. data/lib/rubygems/commands/owner_command.rb +11 -11
  114. data/lib/rubygems/commands/pristine_command.rb +36 -36
  115. data/lib/rubygems/commands/push_command.rb +8 -8
  116. data/lib/rubygems/commands/query_command.rb +8 -8
  117. data/lib/rubygems/commands/rdoc_command.rb +17 -17
  118. data/lib/rubygems/commands/search_command.rb +3 -3
  119. data/lib/rubygems/commands/server_command.rb +3 -3
  120. data/lib/rubygems/commands/setup_command.rb +96 -106
  121. data/lib/rubygems/commands/signin_command.rb +9 -9
  122. data/lib/rubygems/commands/signout_command.rb +7 -7
  123. data/lib/rubygems/commands/sources_command.rb +21 -21
  124. data/lib/rubygems/commands/specification_command.rb +13 -13
  125. data/lib/rubygems/commands/stale_command.rb +2 -2
  126. data/lib/rubygems/commands/uninstall_command.rb +40 -40
  127. data/lib/rubygems/commands/unpack_command.rb +12 -12
  128. data/lib/rubygems/commands/update_command.rb +40 -56
  129. data/lib/rubygems/commands/which_command.rb +7 -7
  130. data/lib/rubygems/commands/yank_command.rb +11 -11
  131. data/lib/rubygems/config_file.rb +21 -21
  132. data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
  133. data/lib/rubygems/core_ext/kernel_require.rb +1 -1
  134. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  135. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  136. data/lib/rubygems/defaults.rb +16 -16
  137. data/lib/rubygems/dependency.rb +9 -9
  138. data/lib/rubygems/dependency_installer.rb +13 -13
  139. data/lib/rubygems/dependency_list.rb +6 -6
  140. data/lib/rubygems/doctor.rb +18 -18
  141. data/lib/rubygems/errors.rb +2 -2
  142. data/lib/rubygems/exceptions.rb +5 -5
  143. data/lib/rubygems/ext/build_error.rb +1 -1
  144. data/lib/rubygems/ext/builder.rb +16 -16
  145. data/lib/rubygems/ext/cargo_builder.rb +7 -7
  146. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  147. data/lib/rubygems/ext/configure_builder.rb +1 -1
  148. data/lib/rubygems/ext/ext_conf_builder.rb +8 -8
  149. data/lib/rubygems/ext/rake_builder.rb +3 -3
  150. data/lib/rubygems/ext.rb +7 -7
  151. data/lib/rubygems/gem_runner.rb +5 -5
  152. data/lib/rubygems/gemcutter_utilities.rb +31 -28
  153. data/lib/rubygems/indexer.rb +27 -27
  154. data/lib/rubygems/install_default_message.rb +2 -2
  155. data/lib/rubygems/install_message.rb +2 -2
  156. data/lib/rubygems/install_update_options.rb +55 -55
  157. data/lib/rubygems/installer.rb +32 -40
  158. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  159. data/lib/rubygems/local_remote_options.rb +18 -20
  160. data/lib/rubygems/mock_gem_ui.rb +2 -2
  161. data/lib/rubygems/name_tuple.rb +4 -4
  162. data/lib/rubygems/optparse.rb +1 -1
  163. data/lib/rubygems/package/file_source.rb +2 -2
  164. data/lib/rubygems/package/old.rb +8 -8
  165. data/lib/rubygems/package/tar_header.rb +50 -50
  166. data/lib/rubygems/package/tar_reader/entry.rb +2 -2
  167. data/lib/rubygems/package/tar_reader.rb +1 -1
  168. data/lib/rubygems/package/tar_writer.rb +7 -7
  169. data/lib/rubygems/package.rb +54 -43
  170. data/lib/rubygems/package_task.rb +4 -4
  171. data/lib/rubygems/platform.rb +66 -55
  172. data/lib/rubygems/psych_tree.rb +1 -1
  173. data/lib/rubygems/query_utils.rb +35 -35
  174. data/lib/rubygems/rdoc.rb +2 -2
  175. data/lib/rubygems/remote_fetcher.rb +22 -22
  176. data/lib/rubygems/request/connection_pools.rb +4 -4
  177. data/lib/rubygems/request/http_pool.rb +1 -1
  178. data/lib/rubygems/request.rb +22 -22
  179. data/lib/rubygems/request_set/gem_dependency_api.rb +18 -18
  180. data/lib/rubygems/request_set/lockfile/parser.rb +26 -26
  181. data/lib/rubygems/request_set/lockfile/tokenizer.rb +4 -4
  182. data/lib/rubygems/request_set/lockfile.rb +5 -5
  183. data/lib/rubygems/request_set.rb +17 -17
  184. data/lib/rubygems/requirement.rb +6 -6
  185. data/lib/rubygems/resolver/activation_request.rb +3 -3
  186. data/lib/rubygems/resolver/api_set.rb +4 -4
  187. data/lib/rubygems/resolver/api_specification.rb +6 -6
  188. data/lib/rubygems/resolver/best_set.rb +5 -5
  189. data/lib/rubygems/resolver/conflict.rb +10 -10
  190. data/lib/rubygems/resolver/dependency_request.rb +2 -2
  191. data/lib/rubygems/resolver/git_set.rb +2 -2
  192. data/lib/rubygems/resolver/git_specification.rb +6 -6
  193. data/lib/rubygems/resolver/index_set.rb +3 -3
  194. data/lib/rubygems/resolver/index_specification.rb +6 -5
  195. data/lib/rubygems/resolver/installed_specification.rb +4 -4
  196. data/lib/rubygems/resolver/installer_set.rb +11 -16
  197. data/lib/rubygems/resolver/local_specification.rb +2 -2
  198. data/lib/rubygems/resolver/lock_set.rb +4 -4
  199. data/lib/rubygems/resolver/lock_specification.rb +4 -4
  200. data/lib/rubygems/resolver/molinillo.rb +1 -1
  201. data/lib/rubygems/resolver/specification.rb +1 -1
  202. data/lib/rubygems/resolver/vendor_set.rb +1 -1
  203. data/lib/rubygems/resolver/vendor_specification.rb +3 -3
  204. data/lib/rubygems/resolver.rb +39 -39
  205. data/lib/rubygems/s3_uri_signer.rb +6 -6
  206. data/lib/rubygems/safe_yaml.rb +2 -2
  207. data/lib/rubygems/security/policies.rb +11 -11
  208. data/lib/rubygems/security/policy.rb +18 -18
  209. data/lib/rubygems/security/signer.rb +5 -5
  210. data/lib/rubygems/security/trust_dir.rb +3 -3
  211. data/lib/rubygems/security.rb +28 -28
  212. data/lib/rubygems/security_option.rb +5 -5
  213. data/lib/rubygems/source/git.rb +21 -21
  214. data/lib/rubygems/source/installed.rb +1 -1
  215. data/lib/rubygems/source/local.rb +2 -2
  216. data/lib/rubygems/source/specific_file.rb +1 -1
  217. data/lib/rubygems/source.rb +16 -16
  218. data/lib/rubygems/spec_fetcher.rb +9 -9
  219. data/lib/rubygems/specification.rb +63 -62
  220. data/lib/rubygems/specification_policy.rb +15 -15
  221. data/lib/rubygems/stub_specification.rb +5 -5
  222. data/lib/rubygems/tsort.rb +1 -1
  223. data/lib/rubygems/uninstaller.rb +18 -18
  224. data/lib/rubygems/uri.rb +4 -4
  225. data/lib/rubygems/uri_formatter.rb +1 -1
  226. data/lib/rubygems/user_interaction.rb +33 -19
  227. data/lib/rubygems/util/licenses.rb +3 -3
  228. data/lib/rubygems/util.rb +10 -10
  229. data/lib/rubygems/validator.rb +5 -5
  230. data/lib/rubygems/version.rb +15 -9
  231. data/lib/rubygems/version_option.rb +3 -3
  232. data/lib/rubygems.rb +62 -61
  233. data/rubygems-update.gemspec +2 -2
  234. data/setup.rb +9 -9
  235. data/test/rubygems/helper.rb +132 -134
  236. data/test/rubygems/installer_test_case.rb +13 -13
  237. data/test/rubygems/package/tar_test_case.rb +2 -2
  238. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  239. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  240. data/test/rubygems/rubygems_plugin.rb +2 -2
  241. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -4
  242. data/test/rubygems/test_bundled_ca.rb +10 -10
  243. data/test/rubygems/test_config.rb +3 -3
  244. data/test/rubygems/test_deprecate.rb +3 -3
  245. data/test/rubygems/test_exit.rb +2 -2
  246. data/test/rubygems/test_gem.rb +342 -342
  247. data/test/rubygems/test_gem_available_set.rb +21 -21
  248. data/test/rubygems/test_gem_bundler_version_finder.rb +1 -1
  249. data/test/rubygems/test_gem_command.rb +44 -44
  250. data/test/rubygems/test_gem_command_manager.rb +29 -29
  251. data/test/rubygems/test_gem_commands_build_command.rb +63 -63
  252. data/test/rubygems/test_gem_commands_cert_command.rb +97 -99
  253. data/test/rubygems/test_gem_commands_check_command.rb +4 -4
  254. data/test/rubygems/test_gem_commands_cleanup_command.rb +40 -40
  255. data/test/rubygems/test_gem_commands_contents_command.rb +27 -27
  256. data/test/rubygems/test_gem_commands_dependency_command.rb +36 -36
  257. data/test/rubygems/test_gem_commands_environment_command.rb +16 -16
  258. data/test/rubygems/test_gem_commands_fetch_command.rb +37 -37
  259. data/test/rubygems/test_gem_commands_generate_index_command.rb +7 -7
  260. data/test/rubygems/test_gem_commands_help_command.rb +13 -13
  261. data/test/rubygems/test_gem_commands_info_command.rb +28 -2
  262. data/test/rubygems/test_gem_commands_install_command.rb +131 -131
  263. data/test/rubygems/test_gem_commands_list_command.rb +4 -4
  264. data/test/rubygems/test_gem_commands_lock_command.rb +10 -10
  265. data/test/rubygems/test_gem_commands_mirror.rb +2 -2
  266. data/test/rubygems/test_gem_commands_open_command.rb +4 -4
  267. data/test/rubygems/test_gem_commands_outdated_command.rb +9 -9
  268. data/test/rubygems/test_gem_commands_owner_command.rb +41 -41
  269. data/test/rubygems/test_gem_commands_pristine_command.rb +92 -92
  270. data/test/rubygems/test_gem_commands_push_command.rb +54 -54
  271. data/test/rubygems/test_gem_commands_query_command.rb +73 -73
  272. data/test/rubygems/test_gem_commands_search_command.rb +2 -2
  273. data/test/rubygems/test_gem_commands_server_command.rb +2 -2
  274. data/test/rubygems/test_gem_commands_setup_command.rb +119 -85
  275. data/test/rubygems/test_gem_commands_signin_command.rb +45 -31
  276. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  277. data/test/rubygems/test_gem_commands_sources_command.rb +28 -29
  278. data/test/rubygems/test_gem_commands_specification_command.rb +32 -32
  279. data/test/rubygems/test_gem_commands_stale_command.rb +4 -4
  280. data/test/rubygems/test_gem_commands_uninstall_command.rb +75 -75
  281. data/test/rubygems/test_gem_commands_unpack_command.rb +31 -31
  282. data/test/rubygems/test_gem_commands_update_command.rb +89 -89
  283. data/test/rubygems/test_gem_commands_which_command.rb +6 -6
  284. data/test/rubygems/test_gem_commands_yank_command.rb +40 -40
  285. data/test/rubygems/test_gem_config_file.rb +93 -81
  286. data/test/rubygems/test_gem_dependency.rb +73 -73
  287. data/test/rubygems/test_gem_dependency_installer.rb +165 -165
  288. data/test/rubygems/test_gem_dependency_list.rb +47 -47
  289. data/test/rubygems/test_gem_dependency_resolution_error.rb +4 -4
  290. data/test/rubygems/test_gem_doctor.rb +26 -26
  291. data/test/rubygems/test_gem_ext_builder.rb +59 -59
  292. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +6 -6
  293. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
  294. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +8 -8
  295. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +1 -1
  296. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +6 -6
  297. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  298. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +8 -8
  299. data/test/rubygems/test_gem_ext_cargo_builder.rb +26 -26
  300. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +3 -3
  301. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +23 -23
  302. data/test/rubygems/test_gem_ext_cmake_builder.rb +15 -15
  303. data/test/rubygems/test_gem_ext_configure_builder.rb +13 -13
  304. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  305. data/test/rubygems/test_gem_ext_rake_builder.rb +15 -15
  306. data/test/rubygems/test_gem_gem_runner.rb +7 -7
  307. data/test/rubygems/test_gem_gemcutter_utilities.rb +66 -66
  308. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -4
  309. data/test/rubygems/test_gem_indexer.rb +48 -48
  310. data/test/rubygems/test_gem_install_update_options.rb +16 -16
  311. data/test/rubygems/test_gem_installer.rb +303 -300
  312. data/test/rubygems/test_gem_local_remote_options.rb +10 -10
  313. data/test/rubygems/test_gem_name_tuple.rb +4 -4
  314. data/test/rubygems/test_gem_package.rb +228 -206
  315. data/test/rubygems/test_gem_package_old.rb +13 -13
  316. data/test/rubygems/test_gem_package_tar_header.rb +42 -42
  317. data/test/rubygems/test_gem_package_tar_reader.rb +8 -8
  318. data/test/rubygems/test_gem_package_tar_reader_entry.rb +10 -10
  319. data/test/rubygems/test_gem_package_tar_writer.rb +76 -76
  320. data/test/rubygems/test_gem_package_task.rb +18 -18
  321. data/test/rubygems/test_gem_path_support.rb +14 -14
  322. data/test/rubygems/test_gem_platform.rb +298 -227
  323. data/test/rubygems/test_gem_rdoc.rb +14 -14
  324. data/test/rubygems/test_gem_remote_fetcher.rb +149 -149
  325. data/test/rubygems/test_gem_request.rb +55 -55
  326. data/test/rubygems/test_gem_request_connection_pools.rb +29 -29
  327. data/test/rubygems/test_gem_request_set.rb +99 -99
  328. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +204 -206
  329. data/test/rubygems/test_gem_request_set_lockfile.rb +86 -86
  330. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +56 -56
  331. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +62 -62
  332. data/test/rubygems/test_gem_requirement.rb +47 -41
  333. data/test/rubygems/test_gem_resolver.rb +133 -99
  334. data/test/rubygems/test_gem_resolver_activation_request.rb +6 -6
  335. data/test/rubygems/test_gem_resolver_api_set.rb +33 -33
  336. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -47
  337. data/test/rubygems/test_gem_resolver_best_set.rb +22 -22
  338. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -1
  339. data/test/rubygems/test_gem_resolver_conflict.rb +12 -12
  340. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -15
  341. data/test/rubygems/test_gem_resolver_git_set.rb +21 -21
  342. data/test/rubygems/test_gem_resolver_git_specification.rb +21 -21
  343. data/test/rubygems/test_gem_resolver_index_set.rb +12 -12
  344. data/test/rubygems/test_gem_resolver_index_specification.rb +16 -16
  345. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -5
  346. data/test/rubygems/test_gem_resolver_installer_set.rb +78 -34
  347. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -7
  348. data/test/rubygems/test_gem_resolver_lock_set.rb +12 -12
  349. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -17
  350. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -1
  351. data/test/rubygems/test_gem_resolver_specification.rb +8 -8
  352. data/test/rubygems/test_gem_resolver_vendor_set.rb +6 -6
  353. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -10
  354. data/test/rubygems/test_gem_security.rb +67 -67
  355. data/test/rubygems/test_gem_security_policy.rb +62 -62
  356. data/test/rubygems/test_gem_security_signer.rb +28 -28
  357. data/test/rubygems/test_gem_security_trust_dir.rb +4 -4
  358. data/test/rubygems/test_gem_silent_ui.rb +38 -32
  359. data/test/rubygems/test_gem_source.rb +44 -44
  360. data/test/rubygems/test_gem_source_fetch_problem.rb +9 -9
  361. data/test/rubygems/test_gem_source_git.rb +59 -59
  362. data/test/rubygems/test_gem_source_installed.rb +16 -16
  363. data/test/rubygems/test_gem_source_list.rb +5 -5
  364. data/test/rubygems/test_gem_source_local.rb +14 -14
  365. data/test/rubygems/test_gem_source_lock.rb +31 -31
  366. data/test/rubygems/test_gem_source_specific_file.rb +17 -17
  367. data/test/rubygems/test_gem_source_subpath_problem.rb +7 -7
  368. data/test/rubygems/test_gem_source_vendor.rb +13 -13
  369. data/test/rubygems/test_gem_spec_fetcher.rb +72 -72
  370. data/test/rubygems/test_gem_specification.rb +444 -436
  371. data/test/rubygems/test_gem_stream_ui.rb +19 -19
  372. data/test/rubygems/test_gem_stub_specification.rb +32 -32
  373. data/test/rubygems/test_gem_text.rb +1 -1
  374. data/test/rubygems/test_gem_uninstaller.rb +112 -112
  375. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -3
  376. data/test/rubygems/test_gem_uri.rb +4 -4
  377. data/test/rubygems/test_gem_uri_formatter.rb +14 -14
  378. data/test/rubygems/test_gem_util.rb +23 -23
  379. data/test/rubygems/test_gem_validator.rb +8 -8
  380. data/test/rubygems/test_gem_version.rb +22 -15
  381. data/test/rubygems/test_gem_version_option.rb +15 -15
  382. data/test/rubygems/test_kernel.rb +31 -31
  383. data/test/rubygems/test_project_sanity.rb +1 -1
  384. data/test/rubygems/test_remote_fetch_error.rb +6 -6
  385. data/test/rubygems/test_require.rb +43 -43
  386. data/test/rubygems/test_rubygems.rb +8 -8
  387. data/test/rubygems/utilities.rb +19 -19
  388. metadata +14 -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