rubygems-update 2.7.11 → 3.0.9

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 (359) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +67 -0
  3. data/.travis.yml +24 -18
  4. data/CODE_OF_CONDUCT.md +10 -8
  5. data/CONTRIBUTING.md +148 -0
  6. data/History.txt +458 -8
  7. data/MAINTAINERS.txt +1 -0
  8. data/Manifest.txt +16 -9
  9. data/POLICIES.md +92 -0
  10. data/README.md +53 -26
  11. data/Rakefile +77 -211
  12. data/{UPGRADING.rdoc → UPGRADING.md} +31 -32
  13. data/appveyor.yml +20 -45
  14. data/bin/gem +1 -2
  15. data/bin/update_rubygems +2 -3
  16. data/bundler/CHANGELOG.md +65 -0
  17. data/bundler/bundler.gemspec +7 -1
  18. data/bundler/lib/bundler/build_metadata.rb +1 -1
  19. data/bundler/lib/bundler/cli/add.rb +15 -5
  20. data/bundler/lib/bundler/cli/binstubs.rb +8 -2
  21. data/bundler/lib/bundler/cli/doctor.rb +47 -1
  22. data/bundler/lib/bundler/cli/install.rb +8 -5
  23. data/bundler/lib/bundler/cli/list.rb +41 -5
  24. data/bundler/lib/bundler/cli/outdated.rb +7 -1
  25. data/bundler/lib/bundler/cli/pristine.rb +4 -0
  26. data/bundler/lib/bundler/cli/remove.rb +18 -0
  27. data/bundler/lib/bundler/cli.rb +63 -21
  28. data/bundler/lib/bundler/definition.rb +15 -16
  29. data/bundler/lib/bundler/dependency.rb +2 -2
  30. data/bundler/lib/bundler/dsl.rb +19 -3
  31. data/bundler/lib/bundler/feature_flag.rb +7 -0
  32. data/bundler/lib/bundler/gem_version_promoter.rb +4 -2
  33. data/bundler/lib/bundler/injector.rb +168 -9
  34. data/bundler/lib/bundler/installer/parallel_installer.rb +5 -0
  35. data/bundler/lib/bundler/installer.rb +29 -6
  36. data/bundler/lib/bundler/plugin/events.rb +61 -0
  37. data/bundler/lib/bundler/plugin.rb +10 -3
  38. data/bundler/lib/bundler/resolver.rb +2 -2
  39. data/bundler/lib/bundler/rubygems_gem_installer.rb +7 -0
  40. data/bundler/lib/bundler/runtime.rb +8 -2
  41. data/bundler/lib/bundler/settings/validator.rb +23 -0
  42. data/bundler/lib/bundler/settings.rb +24 -3
  43. data/bundler/lib/bundler/shared_helpers.rb +19 -3
  44. data/bundler/lib/bundler/source/metadata.rb +2 -3
  45. data/bundler/lib/bundler/source.rb +9 -9
  46. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +1 -0
  47. data/bundler/lib/bundler/version.rb +1 -1
  48. data/bundler/lib/bundler.rb +26 -8
  49. data/bundler/man/bundle-add.ronn +13 -2
  50. data/bundler/man/bundle-config.ronn +21 -0
  51. data/bundler/man/bundle-install.ronn +1 -1
  52. data/bundler/man/bundle-list.ronn +19 -1
  53. data/bundler/man/bundle-outdated.ronn +4 -0
  54. data/bundler/man/bundle-remove.ronn +23 -0
  55. data/bundler/man/bundle-update.ronn +1 -1
  56. data/bundler/man/bundle.ronn +3 -0
  57. data/lib/rubygems/available_set.rb +1 -1
  58. data/lib/rubygems/basic_specification.rb +12 -12
  59. data/lib/rubygems/bundler_version_finder.rb +3 -3
  60. data/lib/rubygems/command.rb +22 -15
  61. data/lib/rubygems/command_manager.rb +22 -5
  62. data/lib/rubygems/commands/build_command.rb +41 -7
  63. data/lib/rubygems/commands/cert_command.rb +45 -24
  64. data/lib/rubygems/commands/check_command.rb +1 -1
  65. data/lib/rubygems/commands/cleanup_command.rb +14 -7
  66. data/lib/rubygems/commands/contents_command.rb +14 -15
  67. data/lib/rubygems/commands/dependency_command.rb +17 -17
  68. data/lib/rubygems/commands/environment_command.rb +20 -1
  69. data/lib/rubygems/commands/fetch_command.rb +2 -3
  70. data/lib/rubygems/commands/generate_index_command.rb +2 -3
  71. data/lib/rubygems/commands/help_command.rb +12 -13
  72. data/lib/rubygems/commands/info_command.rb +33 -0
  73. data/lib/rubygems/commands/install_command.rb +21 -17
  74. data/lib/rubygems/commands/list_command.rb +0 -1
  75. data/lib/rubygems/commands/lock_command.rb +3 -4
  76. data/lib/rubygems/commands/open_command.rb +16 -10
  77. data/lib/rubygems/commands/owner_command.rb +21 -7
  78. data/lib/rubygems/commands/pristine_command.rb +23 -16
  79. data/lib/rubygems/commands/push_command.rb +19 -8
  80. data/lib/rubygems/commands/query_command.rb +24 -24
  81. data/lib/rubygems/commands/rdoc_command.rb +3 -4
  82. data/lib/rubygems/commands/search_command.rb +0 -1
  83. data/lib/rubygems/commands/server_command.rb +1 -2
  84. data/lib/rubygems/commands/setup_command.rb +86 -48
  85. data/lib/rubygems/commands/signin_command.rb +2 -1
  86. data/lib/rubygems/commands/signout_command.rb +2 -2
  87. data/lib/rubygems/commands/sources_command.rb +11 -12
  88. data/lib/rubygems/commands/specification_command.rb +7 -7
  89. data/lib/rubygems/commands/uninstall_command.rb +50 -18
  90. data/lib/rubygems/commands/unpack_command.rb +16 -7
  91. data/lib/rubygems/commands/update_command.rb +28 -23
  92. data/lib/rubygems/commands/which_command.rb +5 -8
  93. data/lib/rubygems/commands/yank_command.rb +1 -2
  94. data/lib/rubygems/compatibility.rb +1 -21
  95. data/lib/rubygems/config_file.rb +36 -36
  96. data/lib/rubygems/core_ext/kernel_require.rb +6 -6
  97. data/lib/rubygems/core_ext/kernel_warn.rb +45 -0
  98. data/lib/rubygems/defaults.rb +31 -19
  99. data/lib/rubygems/dependency.rb +15 -15
  100. data/lib/rubygems/dependency_installer.rb +30 -33
  101. data/lib/rubygems/dependency_list.rb +9 -10
  102. data/lib/rubygems/deprecate.rb +2 -3
  103. data/lib/rubygems/doctor.rb +5 -6
  104. data/lib/rubygems/errors.rb +3 -3
  105. data/lib/rubygems/exceptions.rb +11 -8
  106. data/lib/rubygems/ext/build_error.rb +0 -1
  107. data/lib/rubygems/ext/builder.rb +50 -23
  108. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  109. data/lib/rubygems/ext/configure_builder.rb +2 -3
  110. data/lib/rubygems/ext/ext_conf_builder.rb +8 -7
  111. data/lib/rubygems/ext/rake_builder.rb +16 -18
  112. data/lib/rubygems/ext.rb +0 -1
  113. data/lib/rubygems/gem_runner.rb +2 -2
  114. data/lib/rubygems/gemcutter_utilities.rb +46 -12
  115. data/lib/rubygems/indexer.rb +19 -12
  116. data/lib/rubygems/install_default_message.rb +0 -1
  117. data/lib/rubygems/install_message.rb +0 -1
  118. data/lib/rubygems/install_update_options.rb +3 -29
  119. data/lib/rubygems/installer.rb +97 -55
  120. data/lib/rubygems/installer_test_case.rb +2 -16
  121. data/lib/rubygems/local_remote_options.rb +5 -4
  122. data/lib/rubygems/mock_gem_ui.rb +3 -4
  123. data/lib/rubygems/name_tuple.rb +4 -4
  124. data/lib/rubygems/package/digest_io.rb +3 -4
  125. data/lib/rubygems/package/file_source.rb +3 -4
  126. data/lib/rubygems/package/io_source.rb +1 -2
  127. data/lib/rubygems/package/old.rb +8 -16
  128. data/lib/rubygems/package/source.rb +0 -1
  129. data/lib/rubygems/package/tar_header.rb +13 -4
  130. data/lib/rubygems/package/tar_reader/entry.rb +20 -4
  131. data/lib/rubygems/package/tar_reader.rb +2 -4
  132. data/lib/rubygems/package/tar_test_case.rb +2 -8
  133. data/lib/rubygems/package/tar_writer.rb +13 -15
  134. data/lib/rubygems/package.rb +90 -63
  135. data/lib/rubygems/package_task.rb +0 -1
  136. data/lib/rubygems/path_support.rb +16 -6
  137. data/lib/rubygems/platform.rb +4 -5
  138. data/lib/rubygems/psych_tree.rb +1 -1
  139. data/lib/rubygems/rdoc.rb +2 -313
  140. data/lib/rubygems/remote_fetcher.rb +29 -82
  141. data/lib/rubygems/request/connection_pools.rb +24 -13
  142. data/lib/rubygems/request/http_pool.rb +3 -4
  143. data/lib/rubygems/request/https_pool.rb +1 -3
  144. data/lib/rubygems/request.rb +17 -16
  145. data/lib/rubygems/request_set/gem_dependency_api.rb +46 -49
  146. data/lib/rubygems/request_set/lockfile/parser.rb +18 -29
  147. data/lib/rubygems/request_set/lockfile/tokenizer.rb +9 -9
  148. data/lib/rubygems/request_set/lockfile.rb +12 -12
  149. data/lib/rubygems/request_set.rb +52 -25
  150. data/lib/rubygems/requirement.rb +32 -21
  151. data/lib/rubygems/resolver/activation_request.rb +6 -6
  152. data/lib/rubygems/resolver/api_set.rb +5 -6
  153. data/lib/rubygems/resolver/api_specification.rb +2 -3
  154. data/lib/rubygems/resolver/best_set.rb +5 -6
  155. data/lib/rubygems/resolver/composed_set.rb +5 -6
  156. data/lib/rubygems/resolver/conflict.rb +5 -5
  157. data/lib/rubygems/resolver/current_set.rb +1 -2
  158. data/lib/rubygems/resolver/dependency_request.rb +4 -4
  159. data/lib/rubygems/resolver/git_set.rb +5 -6
  160. data/lib/rubygems/resolver/git_specification.rb +4 -5
  161. data/lib/rubygems/resolver/index_set.rb +5 -6
  162. data/lib/rubygems/resolver/index_specification.rb +3 -4
  163. data/lib/rubygems/resolver/installed_specification.rb +3 -4
  164. data/lib/rubygems/resolver/installer_set.rb +12 -12
  165. data/lib/rubygems/resolver/local_specification.rb +1 -2
  166. data/lib/rubygems/resolver/lock_set.rb +5 -6
  167. data/lib/rubygems/resolver/lock_specification.rb +7 -8
  168. data/lib/rubygems/resolver/requirement_list.rb +1 -1
  169. data/lib/rubygems/resolver/set.rb +2 -2
  170. data/lib/rubygems/resolver/source_set.rb +4 -5
  171. data/lib/rubygems/resolver/spec_specification.rb +1 -2
  172. data/lib/rubygems/resolver/specification.rb +10 -7
  173. data/lib/rubygems/resolver/stats.rb +1 -1
  174. data/lib/rubygems/resolver/vendor_set.rb +4 -5
  175. data/lib/rubygems/resolver/vendor_specification.rb +2 -3
  176. data/lib/rubygems/resolver.rb +14 -16
  177. data/lib/rubygems/s3_uri_signer.rb +183 -0
  178. data/lib/rubygems/safe_yaml.rb +18 -10
  179. data/lib/rubygems/security/policies.rb +1 -2
  180. data/lib/rubygems/security/policy.rb +25 -25
  181. data/lib/rubygems/security/signer.rb +72 -24
  182. data/lib/rubygems/security/trust_dir.rb +10 -10
  183. data/lib/rubygems/security.rb +21 -22
  184. data/lib/rubygems/security_option.rb +0 -1
  185. data/lib/rubygems/server.rb +21 -21
  186. data/lib/rubygems/source/git.rb +9 -10
  187. data/lib/rubygems/source/installed.rb +3 -4
  188. data/lib/rubygems/source/local.rb +7 -7
  189. data/lib/rubygems/source/lock.rb +4 -4
  190. data/lib/rubygems/source/specific_file.rb +5 -5
  191. data/lib/rubygems/source/vendor.rb +2 -3
  192. data/lib/rubygems/source.rb +16 -25
  193. data/lib/rubygems/source_list.rb +2 -2
  194. data/lib/rubygems/source_local.rb +0 -1
  195. data/lib/rubygems/spec_fetcher.rb +5 -6
  196. data/lib/rubygems/specification.rb +219 -558
  197. data/lib/rubygems/specification_policy.rb +407 -0
  198. data/lib/rubygems/stub_specification.rb +12 -17
  199. data/lib/rubygems/test_case.rb +161 -75
  200. data/lib/rubygems/test_utilities.rb +20 -35
  201. data/lib/rubygems/text.rb +6 -6
  202. data/lib/rubygems/uninstaller.rb +38 -27
  203. data/lib/rubygems/uri_formatter.rb +1 -2
  204. data/lib/rubygems/user_interaction.rb +37 -89
  205. data/lib/rubygems/util/licenses.rb +27 -1
  206. data/lib/rubygems/util/list.rb +1 -1
  207. data/lib/rubygems/util.rb +32 -14
  208. data/lib/rubygems/validator.rb +4 -5
  209. data/lib/rubygems/version.rb +15 -15
  210. data/lib/rubygems/version_option.rb +2 -3
  211. data/lib/rubygems.rb +71 -102
  212. data/rubygems-update.gemspec +43 -0
  213. data/setup.rb +2 -8
  214. data/test/rubygems/ca_cert.pem +74 -65
  215. data/test/rubygems/client.pem +103 -45
  216. data/test/rubygems/rubygems_plugin.rb +0 -1
  217. data/test/rubygems/simple_gem.rb +1 -1
  218. data/test/rubygems/ssl_cert.pem +78 -17
  219. data/test/rubygems/ssl_key.pem +25 -13
  220. data/test/rubygems/test_bundled_ca.rb +1 -1
  221. data/test/rubygems/test_config.rb +7 -2
  222. data/test/rubygems/test_gem.rb +205 -132
  223. data/test/rubygems/test_gem_bundler_version_finder.rb +4 -0
  224. data/test/rubygems/test_gem_command.rb +0 -1
  225. data/test/rubygems/test_gem_command_manager.rb +18 -3
  226. data/test/rubygems/test_gem_commands_build_command.rb +220 -15
  227. data/test/rubygems/test_gem_commands_cert_command.rb +69 -8
  228. data/test/rubygems/test_gem_commands_check_command.rb +1 -1
  229. data/test/rubygems/test_gem_commands_cleanup_command.rb +27 -1
  230. data/test/rubygems/test_gem_commands_contents_command.rb +1 -2
  231. data/test/rubygems/test_gem_commands_dependency_command.rb +33 -34
  232. data/test/rubygems/test_gem_commands_environment_command.rb +1 -0
  233. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -1
  234. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -1
  235. data/test/rubygems/test_gem_commands_help_command.rb +7 -4
  236. data/test/rubygems/test_gem_commands_info_command.rb +44 -0
  237. data/test/rubygems/test_gem_commands_install_command.rb +79 -12
  238. data/test/rubygems/test_gem_commands_lock_command.rb +0 -1
  239. data/test/rubygems/test_gem_commands_open_command.rb +29 -0
  240. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -1
  241. data/test/rubygems/test_gem_commands_owner_command.rb +93 -57
  242. data/test/rubygems/test_gem_commands_pristine_command.rb +65 -30
  243. data/test/rubygems/test_gem_commands_push_command.rb +54 -0
  244. data/test/rubygems/test_gem_commands_query_command.rb +102 -100
  245. data/test/rubygems/test_gem_commands_search_command.rb +0 -1
  246. data/test/rubygems/test_gem_commands_server_command.rb +0 -1
  247. data/test/rubygems/test_gem_commands_setup_command.rb +50 -15
  248. data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
  249. data/test/rubygems/test_gem_commands_sources_command.rb +0 -1
  250. data/test/rubygems/test_gem_commands_specification_command.rb +2 -3
  251. data/test/rubygems/test_gem_commands_stale_command.rb +3 -2
  252. data/test/rubygems/test_gem_commands_uninstall_command.rb +161 -8
  253. data/test/rubygems/test_gem_commands_unpack_command.rb +17 -1
  254. data/test/rubygems/test_gem_commands_update_command.rb +19 -2
  255. data/test/rubygems/test_gem_commands_which_command.rb +0 -1
  256. data/test/rubygems/test_gem_commands_yank_command.rb +0 -1
  257. data/test/rubygems/test_gem_config_file.rb +4 -2
  258. data/test/rubygems/test_gem_dependency.rb +0 -1
  259. data/test/rubygems/test_gem_dependency_installer.rb +8 -5
  260. data/test/rubygems/test_gem_dependency_list.rb +6 -7
  261. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -1
  262. data/test/rubygems/test_gem_doctor.rb +1 -2
  263. data/test/rubygems/test_gem_ext_builder.rb +10 -23
  264. data/test/rubygems/test_gem_ext_cmake_builder.rb +5 -4
  265. data/test/rubygems/test_gem_ext_configure_builder.rb +3 -3
  266. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +8 -9
  267. data/test/rubygems/test_gem_ext_rake_builder.rb +20 -5
  268. data/test/rubygems/test_gem_gem_runner.rb +0 -1
  269. data/test/rubygems/test_gem_gemcutter_utilities.rb +32 -6
  270. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -1
  271. data/test/rubygems/test_gem_indexer.rb +16 -10
  272. data/test/rubygems/test_gem_install_update_options.rb +1 -20
  273. data/test/rubygems/test_gem_installer.rb +154 -119
  274. data/test/rubygems/test_gem_local_remote_options.rb +3 -3
  275. data/test/rubygems/test_gem_name_tuple.rb +0 -1
  276. data/test/rubygems/test_gem_package.rb +77 -31
  277. data/test/rubygems/test_gem_package_old.rb +0 -1
  278. data/test/rubygems/test_gem_package_tar_header.rb +42 -2
  279. data/test/rubygems/test_gem_package_tar_reader.rb +0 -1
  280. data/test/rubygems/test_gem_package_tar_reader_entry.rb +11 -0
  281. data/test/rubygems/test_gem_package_tar_writer.rb +43 -7
  282. data/test/rubygems/test_gem_package_task.rb +2 -2
  283. data/test/rubygems/test_gem_path_support.rb +28 -11
  284. data/test/rubygems/test_gem_platform.rb +4 -5
  285. data/test/rubygems/test_gem_rdoc.rb +1 -136
  286. data/test/rubygems/test_gem_remote_fetcher.rb +241 -141
  287. data/test/rubygems/test_gem_request.rb +9 -9
  288. data/test/rubygems/test_gem_request_connection_pools.rb +24 -3
  289. data/test/rubygems/test_gem_request_set.rb +5 -5
  290. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +82 -64
  291. data/test/rubygems/test_gem_request_set_lockfile.rb +1 -2
  292. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +4 -9
  293. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
  294. data/test/rubygems/test_gem_requirement.rb +24 -4
  295. data/test/rubygems/test_gem_resolver.rb +13 -17
  296. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -1
  297. data/test/rubygems/test_gem_resolver_api_set.rb +0 -1
  298. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -1
  299. data/test/rubygems/test_gem_resolver_best_set.rb +0 -1
  300. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -1
  301. data/test/rubygems/test_gem_resolver_conflict.rb +0 -1
  302. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -1
  303. data/test/rubygems/test_gem_resolver_git_set.rb +0 -1
  304. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -1
  305. data/test/rubygems/test_gem_resolver_index_set.rb +0 -1
  306. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -1
  307. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -1
  308. data/test/rubygems/test_gem_resolver_installer_set.rb +2 -3
  309. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -1
  310. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -1
  311. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -1
  312. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -1
  313. data/test/rubygems/test_gem_resolver_specification.rb +1 -2
  314. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -1
  315. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -1
  316. data/test/rubygems/test_gem_security.rb +1 -3
  317. data/test/rubygems/test_gem_security_policy.rb +5 -6
  318. data/test/rubygems/test_gem_security_signer.rb +4 -3
  319. data/test/rubygems/test_gem_security_trust_dir.rb +1 -2
  320. data/test/rubygems/test_gem_server.rb +4 -4
  321. data/test/rubygems/test_gem_source.rb +0 -13
  322. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
  323. data/test/rubygems/test_gem_source_git.rb +0 -1
  324. data/test/rubygems/test_gem_source_installed.rb +0 -1
  325. data/test/rubygems/test_gem_source_lock.rb +0 -1
  326. data/test/rubygems/test_gem_source_vendor.rb +0 -1
  327. data/test/rubygems/test_gem_spec_fetcher.rb +0 -1
  328. data/test/rubygems/test_gem_specification.rb +366 -198
  329. data/test/rubygems/test_gem_stream_ui.rb +15 -32
  330. data/test/rubygems/test_gem_stub_specification.rb +0 -2
  331. data/test/rubygems/test_gem_text.rb +4 -0
  332. data/test/rubygems/test_gem_uninstaller.rb +42 -3
  333. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -1
  334. data/test/rubygems/test_gem_uri_formatter.rb +0 -1
  335. data/test/rubygems/test_gem_util.rb +31 -11
  336. data/test/rubygems/test_gem_validator.rb +0 -1
  337. data/test/rubygems/test_gem_version.rb +11 -11
  338. data/test/rubygems/test_gem_version_option.rb +0 -1
  339. data/test/rubygems/test_remote_fetch_error.rb +0 -1
  340. data/test/rubygems/test_require.rb +67 -52
  341. data/util/CL2notes +1 -2
  342. data/util/ci +20 -12
  343. data/util/cops/deprecations.rb +52 -0
  344. data/util/create_certs.rb +6 -7
  345. data/util/create_certs.sh +27 -0
  346. data/util/create_encrypted_key.rb +4 -5
  347. data/util/patch_with_prs.rb +1 -1
  348. data/util/rubocop +8 -0
  349. data/util/update_bundled_ca_certificates.rb +12 -13
  350. data/util/update_changelog.rb +1 -1
  351. metadata +61 -51
  352. data/.autotest +0 -71
  353. data/.document +0 -5
  354. data/CONTRIBUTING.rdoc +0 -130
  355. data/CVE-2013-4287.txt +0 -35
  356. data/CVE-2013-4363.txt +0 -45
  357. data/CVE-2015-3900.txt +0 -40
  358. data/POLICIES.rdoc +0 -74
  359. data/test/rubygems/fix_openssl_warnings.rb +0 -13
@@ -4,6 +4,7 @@ require 'rubygems/user_interaction'
4
4
  require 'timeout'
5
5
 
6
6
  class TestGemStreamUI < Gem::TestCase
7
+ SHORT_TIMEOUT = (defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled?) ? 1.0 : 0.1 # increase timeout with MJIT for --jit-wait testing
7
8
 
8
9
  module IsTty
9
10
  attr_accessor :tty
@@ -36,10 +37,7 @@ class TestGemStreamUI < Gem::TestCase
36
37
  end
37
38
 
38
39
  def test_ask
39
- skip 'TTY detection broken on windows' if
40
- Gem.win_platform? && RUBY_VERSION <= '1.9.2'
41
-
42
- Timeout.timeout(1) do
40
+ Timeout.timeout(5) do
43
41
  expected_answer = "Arthur, King of the Britons"
44
42
  @in.string = "#{expected_answer}\n"
45
43
  actual_answer = @sui.ask("What is your name?")
@@ -48,22 +46,16 @@ class TestGemStreamUI < Gem::TestCase
48
46
  end
49
47
 
50
48
  def test_ask_no_tty
51
- skip 'TTY detection broken on windows' if
52
- Gem.win_platform? && RUBY_VERSION <= '1.9.2'
53
-
54
49
  @in.tty = false
55
50
 
56
- Timeout.timeout(0.1) do
51
+ Timeout.timeout(SHORT_TIMEOUT) do
57
52
  answer = @sui.ask("what is your favorite color?")
58
53
  assert_nil answer
59
54
  end
60
55
  end
61
56
 
62
57
  def test_ask_for_password
63
- skip 'Always uses $stdin on windows' if
64
- Gem.win_platform? && RUBY_VERSION <= '1.9.2'
65
-
66
- Timeout.timeout(1) do
58
+ Timeout.timeout(5) do
67
59
  expected_answer = "Arthur, King of the Britons"
68
60
  @in.string = "#{expected_answer}\n"
69
61
  actual_answer = @sui.ask_for_password("What is your name?")
@@ -72,24 +64,18 @@ class TestGemStreamUI < Gem::TestCase
72
64
  end
73
65
 
74
66
  def test_ask_for_password_no_tty
75
- skip 'TTY handling is broken on windows' if
76
- Gem.win_platform? && RUBY_VERSION <= '1.9.2'
77
-
78
67
  @in.tty = false
79
68
 
80
- Timeout.timeout(0.1) do
69
+ Timeout.timeout(SHORT_TIMEOUT) do
81
70
  answer = @sui.ask_for_password("what is the airspeed velocity of an unladen swallow?")
82
71
  assert_nil answer
83
72
  end
84
73
  end
85
74
 
86
75
  def test_ask_yes_no_no_tty_with_default
87
- skip 'TTY handling is broken on windows' if
88
- Gem.win_platform? && RUBY_VERSION <= '1.9.2'
89
-
90
76
  @in.tty = false
91
77
 
92
- Timeout.timeout(0.1) do
78
+ Timeout.timeout(SHORT_TIMEOUT) do
93
79
  answer = @sui.ask_yes_no("do coconuts migrate?", false)
94
80
  assert_equal false, answer
95
81
 
@@ -99,12 +85,9 @@ class TestGemStreamUI < Gem::TestCase
99
85
  end
100
86
 
101
87
  def test_ask_yes_no_no_tty_without_default
102
- skip 'TTY handling is broken on windows' if
103
- Gem.win_platform? && RUBY_VERSION <= '1.9.2'
104
-
105
88
  @in.tty = false
106
89
 
107
- Timeout.timeout(0.1) do
90
+ Timeout.timeout(SHORT_TIMEOUT) do
108
91
  assert_raises(Gem::OperationNotSupportedError) do
109
92
  @sui.ask_yes_no("do coconuts migrate?")
110
93
  end
@@ -174,14 +157,14 @@ class TestGemStreamUI < Gem::TestCase
174
157
  def test_download_reporter_anything
175
158
  @cfg.verbose = 0
176
159
  reporter = @sui.download_reporter
177
- assert_kind_of Gem::StreamUI::VerboseDownloadReporter, reporter
160
+ assert_kind_of Gem::StreamUI::ThreadedDownloadReporter, reporter
178
161
  end
179
162
 
180
- def test_verbose_download_reporter
163
+ def test_threaded_download_reporter
181
164
  @cfg.verbose = true
182
165
  reporter = @sui.download_reporter
183
166
  reporter.fetch 'a.gem', 1024
184
- assert_equal "Fetching: a.gem", @out.string
167
+ assert_equal "Fetching a.gem\n", @out.string
185
168
  end
186
169
 
187
170
  def test_verbose_download_reporter_progress
@@ -189,7 +172,7 @@ class TestGemStreamUI < Gem::TestCase
189
172
  reporter = @sui.download_reporter
190
173
  reporter.fetch 'a.gem', 1024
191
174
  reporter.update 512
192
- assert_equal "Fetching: a.gem\rFetching: a.gem ( 50%)", @out.string
175
+ assert_equal "Fetching a.gem\n", @out.string
193
176
  end
194
177
 
195
178
  def test_verbose_download_reporter_progress_once
@@ -198,7 +181,7 @@ class TestGemStreamUI < Gem::TestCase
198
181
  reporter.fetch 'a.gem', 1024
199
182
  reporter.update 510
200
183
  reporter.update 512
201
- assert_equal "Fetching: a.gem\rFetching: a.gem ( 50%)", @out.string
184
+ assert_equal "Fetching a.gem\n", @out.string
202
185
  end
203
186
 
204
187
  def test_verbose_download_reporter_progress_complete
@@ -207,7 +190,7 @@ class TestGemStreamUI < Gem::TestCase
207
190
  reporter.fetch 'a.gem', 1024
208
191
  reporter.update 510
209
192
  reporter.done
210
- assert_equal "Fetching: a.gem\rFetching: a.gem ( 50%)\rFetching: a.gem (100%)\n", @out.string
193
+ assert_equal "Fetching a.gem\n", @out.string
211
194
  end
212
195
 
213
196
  def test_verbose_download_reporter_progress_nil_length
@@ -216,7 +199,7 @@ class TestGemStreamUI < Gem::TestCase
216
199
  reporter.fetch 'a.gem', nil
217
200
  reporter.update 1024
218
201
  reporter.done
219
- assert_equal "Fetching: a.gem\rFetching: a.gem (1024B)\rFetching: a.gem (1024B)\n", @out.string
202
+ assert_equal "Fetching a.gem\n", @out.string
220
203
  end
221
204
 
222
205
  def test_verbose_download_reporter_progress_zero_length
@@ -225,7 +208,7 @@ class TestGemStreamUI < Gem::TestCase
225
208
  reporter.fetch 'a.gem', 0
226
209
  reporter.update 1024
227
210
  reporter.done
228
- assert_equal "Fetching: a.gem\rFetching: a.gem (1024B)\rFetching: a.gem (1024B)\n", @out.string
211
+ assert_equal "Fetching a.gem\n", @out.string
229
212
  end
230
213
 
231
214
  def test_verbose_download_reporter_no_tty
@@ -240,7 +240,6 @@ end
240
240
 
241
241
  return stub
242
242
  end
243
-
244
243
  end
245
244
 
246
245
  def stub_with_extension
@@ -293,4 +292,3 @@ end
293
292
  end
294
293
 
295
294
  end
296
-
@@ -21,6 +21,10 @@ class TestGemText < Gem::TestCase
21
21
  assert_equal " text to wrap", format_text("text to wrap", 40, 2)
22
22
  end
23
23
 
24
+ def test_format_text_no_space
25
+ assert_equal "texttowr\nap", format_text("texttowrap", 8)
26
+ end
27
+
24
28
  def test_format_text_trailing # for two spaces after .
25
29
  text = <<-TEXT
26
30
  This line is really, really long. So long, in fact, that it is more than eighty characters long! The purpose of this line is for testing wrapping behavior because sometimes people don't wrap their text to eighty characters. Without the wrapping, the text might not look good in the RSS feed.
@@ -22,9 +22,10 @@ class TestGemUninstaller < Gem::InstallerTestCase
22
22
  end
23
23
 
24
24
  def test_initialize_expand_path
25
- uninstaller = Gem::Uninstaller.new nil, :install_dir => '/foo//bar'
25
+ FileUtils.mkdir_p 'foo/bar'
26
+ uninstaller = Gem::Uninstaller.new nil, :install_dir => 'foo//bar'
26
27
 
27
- assert_match %r|/foo/bar$|, uninstaller.instance_variable_get(:@gem_home)
28
+ assert_match %r|foo/bar$|, uninstaller.instance_variable_get(:@gem_home)
28
29
  end
29
30
 
30
31
  def test_ask_if_ok
@@ -133,6 +134,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
133
134
  end
134
135
 
135
136
  def test_remove_not_in_home
137
+ Dir.mkdir "#{@gemhome}2"
136
138
  uninstaller = Gem::Uninstaller.new nil, :install_dir => "#{@gemhome}2"
137
139
 
138
140
  e = assert_raises Gem::GemNotInHomeException do
@@ -149,6 +151,22 @@ class TestGemUninstaller < Gem::InstallerTestCase
149
151
  assert_path_exists @spec.gem_dir
150
152
  end
151
153
 
154
+ def test_remove_symlinked_gem_home
155
+ Dir.mktmpdir("gem_home") do |dir|
156
+ symlinked_gem_home = "#{dir}/#{File.basename(@gemhome)}"
157
+
158
+ FileUtils.ln_s(@gemhome, dir)
159
+
160
+ uninstaller = Gem::Uninstaller.new nil, :install_dir => symlinked_gem_home
161
+
162
+ use_ui ui do
163
+ uninstaller.remove @spec
164
+ end
165
+
166
+ refute_path_exists @spec.gem_dir
167
+ end
168
+ end
169
+
152
170
  def test_path_ok_eh
153
171
  uninstaller = Gem::Uninstaller.new nil
154
172
 
@@ -177,10 +195,12 @@ class TestGemUninstaller < Gem::InstallerTestCase
177
195
  gem_dir = File.join @gemhome, 'gems', @spec.full_name
178
196
 
179
197
  Gem.pre_uninstall do
198
+ sleep(0.1) if win_platform?
180
199
  assert File.exist?(gem_dir), 'gem_dir should exist'
181
200
  end
182
201
 
183
202
  Gem.post_uninstall do
203
+ sleep(0.1) if win_platform?
184
204
  refute File.exist?(gem_dir), 'gem_dir should not exist'
185
205
  end
186
206
 
@@ -212,7 +232,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
212
232
  default_spec = new_default_spec 'default', '2'
213
233
  install_default_gems default_spec
214
234
 
215
- spec = new_spec 'default', '2'
235
+ spec = util_spec 'default', '2'
216
236
  install_gem spec
217
237
 
218
238
  Gem::Specification.reset
@@ -311,6 +331,7 @@ create_makefile '#{@spec.name}'
311
331
  end
312
332
 
313
333
  def test_uninstall_wrong_repo
334
+ Dir.mkdir "#{@gemhome}2"
314
335
  Gem.use_paths "#{@gemhome}2", [@gemhome]
315
336
 
316
337
  uninstaller = Gem::Uninstaller.new @spec.name, :executables => true
@@ -482,4 +503,22 @@ create_makefile '#{@spec.name}'
482
503
  assert_match %r!r-1 depends on q \(= 1, development\)!, lines.shift
483
504
  assert_match %r!Successfully uninstalled q-1!, lines.last
484
505
  end
506
+
507
+ def test_uninstall_no_permission
508
+ uninstaller = Gem::Uninstaller.new @spec.name, :executables => true
509
+
510
+ stub_rm_r = lambda do |*args|
511
+ _path = args.shift
512
+ options = args.shift || Hash.new
513
+ # Uninstaller calls a method in RDoc which also calls FileUtils.rm_rf which
514
+ # is an alias for FileUtils#rm_r, so skip if we're using the force option
515
+ raise Errno::EPERM unless options[:force]
516
+ end
517
+
518
+ FileUtils.stub :rm_r, stub_rm_r do
519
+ assert_raises Gem::UninstallError do
520
+ uninstaller.uninstall
521
+ end
522
+ end
523
+ end
485
524
  end
@@ -30,4 +30,3 @@ class TestGemUnsatisfiableDependencyError < Gem::TestCase
30
30
  end
31
31
 
32
32
  end
33
-
@@ -26,4 +26,3 @@ class TestGemUriFormatter < Gem::TestCase
26
26
  end
27
27
 
28
28
  end
29
-
@@ -5,8 +5,7 @@ require 'rubygems/util'
5
5
  class TestGemUtil < Gem::TestCase
6
6
 
7
7
  def test_class_popen
8
- skip "MJIT executes process and it's caught by Process.wait(-1)" if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled?
9
- assert_equal "0\n", Gem::Util.popen(Gem.ruby, '-e', 'p 0')
8
+ assert_equal "0\n", Gem::Util.popen(Gem.ruby, '-I', File.expand_path('../../../lib', __FILE__), '-e', 'p 0')
10
9
 
11
10
  assert_raises Errno::ECHILD do
12
11
  Process.wait(-1)
@@ -15,7 +14,7 @@ class TestGemUtil < Gem::TestCase
15
14
 
16
15
  def test_silent_system
17
16
  assert_silent do
18
- Gem::Util.silent_system Gem.ruby, '-e', 'puts "hello"; warn "hello"'
17
+ Gem::Util.silent_system Gem.ruby, '-I', File.expand_path('../../../lib', __FILE__), '-e', 'puts "hello"; warn "hello"'
19
18
  end
20
19
  end
21
20
 
@@ -38,17 +37,14 @@ class TestGemUtil < Gem::TestCase
38
37
  # impossible to cd into it and its children
39
38
  FileUtils.chmod(0666, 'd/e')
40
39
 
40
+ skip 'skipped in root privilege' if Process.uid.zero?
41
+
41
42
  paths = Gem::Util.traverse_parents('d/e/f').to_a
42
43
 
43
44
  assert_equal File.join(@tempdir, 'd'), paths[0]
44
45
  assert_equal @tempdir, paths[1]
45
- if File.respond_to?(:realpath)
46
- assert_equal File.realpath(Dir.tmpdir), paths[2]
47
- assert_equal File.realpath("..", Dir.tmpdir), paths[3]
48
- elsif RUBY_PLATFORM !~ /darwin/
49
- assert_equal Dir.tmpdir, paths[2]
50
- assert_equal '/', paths[3]
51
- end
46
+ assert_equal File.realpath(Dir.tmpdir), paths[2]
47
+ assert_equal File.realpath("..", Dir.tmpdir), paths[3]
52
48
  ensure
53
49
  # restore default permissions, allow the directory to be removed
54
50
  FileUtils.chmod(0775, 'd/e') unless win_platform?
@@ -62,5 +58,29 @@ class TestGemUtil < Gem::TestCase
62
58
  assert_equal 4, list.find { |x| x == 4 }
63
59
  end
64
60
 
65
- end
61
+ def test_glob_files_in_dir
62
+ FileUtils.mkdir_p 'g'
63
+ FileUtils.touch File.join('g', 'h.rb')
64
+ FileUtils.touch File.join('g', 'i.rb')
66
65
 
66
+ expected_paths = [
67
+ File.join(@tempdir, 'g/h.rb'),
68
+ File.join(@tempdir, 'g/i.rb'),
69
+ ]
70
+
71
+ files_with_absolute_base = Gem::Util.glob_files_in_dir('*.rb', File.join(@tempdir, 'g'))
72
+ assert_equal expected_paths.to_set, files_with_absolute_base.to_set
73
+
74
+ files_with_relative_base = Gem::Util.glob_files_in_dir('*.rb', 'g')
75
+ assert_equal expected_paths.to_set, files_with_relative_base.to_set
76
+ end
77
+
78
+ def test_correct_for_windows_path
79
+ path = "/C:/WINDOWS/Temp/gems"
80
+ assert_equal "C:/WINDOWS/Temp/gems", Gem::Util.correct_for_windows_path(path)
81
+
82
+ path = "/home/skillet"
83
+ assert_equal "/home/skillet", Gem::Util.correct_for_windows_path(path)
84
+ end
85
+
86
+ end
@@ -43,4 +43,3 @@ class TestGemValidator < Gem::TestCase
43
43
  end
44
44
 
45
45
  end
46
-
@@ -212,19 +212,19 @@ class TestGemVersion < Gem::TestCase
212
212
 
213
213
  # Asserts that +version+ is a prerelease.
214
214
 
215
- def assert_prerelease version
215
+ def assert_prerelease(version)
216
216
  assert v(version).prerelease?, "#{version} is a prerelease"
217
217
  end
218
218
 
219
219
  # Assert that +expected+ is the "approximate" recommendation for +version+.
220
220
 
221
- def assert_approximate_equal expected, version
221
+ def assert_approximate_equal(expected, version)
222
222
  assert_equal expected, v(version).approximate_recommendation
223
223
  end
224
224
 
225
225
  # Assert that the "approximate" recommendation for +version+ satifies +version+.
226
226
 
227
- def assert_approximate_satisfies_itself version
227
+ def assert_approximate_satisfies_itself(version)
228
228
  gem_version = v(version)
229
229
 
230
230
  assert Gem::Requirement.new(gem_version.approximate_recommendation).satisfied_by?(gem_version)
@@ -232,33 +232,33 @@ class TestGemVersion < Gem::TestCase
232
232
 
233
233
  # Assert that bumping the +unbumped+ version yields the +expected+.
234
234
 
235
- def assert_bumped_version_equal expected, unbumped
235
+ def assert_bumped_version_equal(expected, unbumped)
236
236
  assert_version_equal expected, v(unbumped).bump
237
237
  end
238
238
 
239
239
  # Assert that +release+ is the correct non-prerelease +version+.
240
240
 
241
- def assert_release_equal release, version
241
+ def assert_release_equal(release, version)
242
242
  assert_version_equal release, v(version).release
243
243
  end
244
244
 
245
245
  # Assert that two versions are equal. Handles strings or
246
246
  # Gem::Version instances.
247
247
 
248
- def assert_version_equal expected, actual
248
+ def assert_version_equal(expected, actual)
249
249
  assert_equal v(expected), v(actual)
250
250
  assert_equal v(expected).hash, v(actual).hash, "since #{actual} == #{expected}, they must have the same hash"
251
251
  end
252
252
 
253
253
  # Assert that two versions are eql?. Checks both directions.
254
254
 
255
- def assert_version_eql first, second
255
+ def assert_version_eql(first, second)
256
256
  first, second = v(first), v(second)
257
257
  assert first.eql?(second), "#{first} is eql? #{second}"
258
258
  assert second.eql?(first), "#{second} is eql? #{first}"
259
259
  end
260
260
 
261
- def assert_less_than left, right
261
+ def assert_less_than(left, right)
262
262
  l = v(left)
263
263
  r = v(right)
264
264
  assert l < r, "#{left} not less than #{right}"
@@ -266,14 +266,14 @@ class TestGemVersion < Gem::TestCase
266
266
 
267
267
  # Refute the assumption that +version+ is a prerelease.
268
268
 
269
- def refute_prerelease version
269
+ def refute_prerelease(version)
270
270
  refute v(version).prerelease?, "#{version} is NOT a prerelease"
271
271
  end
272
272
 
273
273
  # Refute the assumption that two versions are eql?. Checks both
274
274
  # directions.
275
275
 
276
- def refute_version_eql first, second
276
+ def refute_version_eql(first, second)
277
277
  first, second = v(first), v(second)
278
278
  refute first.eql?(second), "#{first} is NOT eql? #{second}"
279
279
  refute second.eql?(first), "#{second} is NOT eql? #{first}"
@@ -281,7 +281,7 @@ class TestGemVersion < Gem::TestCase
281
281
 
282
282
  # Refute the assumption that the two versions are equal?.
283
283
 
284
- def refute_version_equal unexpected, actual
284
+ def refute_version_equal(unexpected, actual)
285
285
  refute_equal v(unexpected), v(actual)
286
286
  end
287
287
  end
@@ -164,4 +164,3 @@ class TestGemVersionOption < Gem::TestCase
164
164
  end
165
165
 
166
166
  end
167
-
@@ -18,4 +18,3 @@ class TestRemoteFetchError < Gem::TestCase
18
18
  assert_equal error.to_s, 'There was an error fetching (https://gemsource.org)'
19
19
  end
20
20
  end
21
-