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
@@ -6,7 +6,6 @@
6
6
  #++
7
7
 
8
8
  require 'rubygems/user_interaction'
9
- require 'thread'
10
9
 
11
10
  class Gem::Ext::Builder
12
11
 
@@ -28,18 +27,18 @@ class Gem::Ext::Builder
28
27
  end
29
28
 
30
29
  def self.make(dest_path, results)
31
- unless File.exist? 'Makefile' then
30
+ unless File.exist? 'Makefile'
32
31
  raise Gem::InstallError, 'Makefile not found'
33
32
  end
34
33
 
35
34
  # try to find make program from Ruby configure arguments first
36
35
  RbConfig::CONFIG['configure_args'] =~ /with-make-prog\=(\w+)/
37
36
  make_program = ENV['MAKE'] || ENV['make'] || $1
38
- unless make_program then
37
+ unless make_program
39
38
  make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
40
39
  end
41
40
 
42
- destdir = '"DESTDIR=%s"' % ENV['DESTDIR'] if RUBY_VERSION > '2.0'
41
+ destdir = '"DESTDIR=%s"' % ENV['DESTDIR']
43
42
 
44
43
  ['clean', '', 'install'].each do |target|
45
44
  # Pass DESTDIR via command line to override what's in MAKEFLAGS
@@ -57,6 +56,7 @@ class Gem::Ext::Builder
57
56
  end
58
57
 
59
58
  def self.redirector
59
+ warn "#{caller[0]}: Use IO.popen(..., err: [:child, :out])"
60
60
  '2>&1'
61
61
  end
62
62
 
@@ -64,28 +64,35 @@ class Gem::Ext::Builder
64
64
  verbose = Gem.configuration.really_verbose
65
65
 
66
66
  begin
67
- # TODO use Process.spawn when ruby 1.8 support is dropped.
68
67
  rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], nil
69
68
  if verbose
70
69
  puts("current directory: #{Dir.pwd}")
71
- puts(command)
72
- system(command)
73
- else
74
- results << "current directory: #{Dir.pwd}"
75
- results << command
76
- results << `#{command} #{redirector}`
70
+ p(command)
77
71
  end
72
+ results << "current directory: #{Dir.pwd}"
73
+ results << (command.respond_to?(:shelljoin) ? command.shelljoin : command)
74
+
75
+ redirections = verbose ? {} : {err: [:child, :out]}
76
+ IO.popen(command, "r", redirections) do |io|
77
+ if verbose
78
+ IO.copy_stream(io, $stdout)
79
+ else
80
+ results << io.read
81
+ end
82
+ end
83
+ rescue => error
84
+ raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
78
85
  ensure
79
86
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
80
87
  end
81
88
 
82
- unless $?.success? then
89
+ unless $?.success?
83
90
  results << "Building has failed. See above output for more information on the failure." if verbose
84
91
 
85
92
  exit_reason =
86
- if $?.exited? then
93
+ if $?.exited?
87
94
  ", exit code #{$?.exitstatus}"
88
- elsif $?.signaled? then
95
+ elsif $?.signaled?
89
96
  ", uncaught signal #{$?.termsig}"
90
97
  end
91
98
 
@@ -98,7 +105,7 @@ class Gem::Ext::Builder
98
105
  # have build arguments, saved, set +build_args+ which is an ARGV-style
99
106
  # array.
100
107
 
101
- def initialize spec, build_args = spec.build_args
108
+ def initialize(spec, build_args = spec.build_args)
102
109
  @spec = spec
103
110
  @build_args = build_args
104
111
  @gem_dir = spec.full_gem_path
@@ -109,7 +116,7 @@ class Gem::Ext::Builder
109
116
  ##
110
117
  # Chooses the extension builder class for +extension+
111
118
 
112
- def builder_for extension # :nodoc:
119
+ def builder_for(extension) # :nodoc:
113
120
  case extension
114
121
  when /extconf/ then
115
122
  Gem::Ext::ExtConfBuilder
@@ -131,7 +138,7 @@ class Gem::Ext::Builder
131
138
  ##
132
139
  # Logs the build +output+ in +build_dir+, then raises Gem::Ext::BuildError.
133
140
 
134
- def build_error build_dir, output, backtrace = nil # :nodoc:
141
+ def build_error(build_dir, output, backtrace = nil) # :nodoc:
135
142
  gem_make_out = write_gem_make_out output
136
143
 
137
144
  message = <<-EOF
@@ -146,12 +153,24 @@ EOF
146
153
  raise Gem::Ext::BuildError, message, backtrace
147
154
  end
148
155
 
149
- def build_extension extension, dest_path # :nodoc:
156
+ def build_extension(extension, dest_path) # :nodoc:
150
157
  results = []
151
158
 
159
+ # FIXME: Determine if this line is necessary and, if so, why.
160
+ # Notes:
161
+ # 1. As far as I can tell, this method is only called by +build_extensions+.
162
+ # 2. The existence of this line implies +extension+ is, or previously was,
163
+ # sometimes +false+ or +nil+.
164
+ # 3. #1 and #2 combined suggests, but does not confirm, that
165
+ # +@specs.extensions+ sometimes contained +false+ or +nil+ values.
166
+ # 4. Nothing seems to explicitly handle +extension+ being empty,
167
+ # which makes me wonder both what it should do and what it does.
168
+ #
169
+ # - @duckinator
152
170
  extension ||= '' # I wish I knew why this line existed
171
+
153
172
  extension_dir =
154
- File.expand_path File.join @gem_dir, File.dirname(extension)
173
+ File.expand_path File.join(@gem_dir, File.dirname(extension))
155
174
  lib_dir = File.join @spec.full_gem_path, @spec.raw_require_paths.first
156
175
 
157
176
  builder = builder_for extension
@@ -160,11 +179,19 @@ EOF
160
179
  FileUtils.mkdir_p dest_path
161
180
 
162
181
  CHDIR_MUTEX.synchronize do
163
- Dir.chdir extension_dir do
164
- results = builder.build(extension, @gem_dir, dest_path,
182
+ pwd = Dir.getwd
183
+ Dir.chdir extension_dir
184
+ begin
185
+ results = builder.build(extension, dest_path,
165
186
  results, @build_args, lib_dir)
166
187
 
167
188
  verbose { results.join("\n") }
189
+ ensure
190
+ begin
191
+ Dir.chdir pwd
192
+ rescue SystemCallError
193
+ Dir.chdir dest_path
194
+ end
168
195
  end
169
196
  end
170
197
 
@@ -193,6 +220,7 @@ EOF
193
220
 
194
221
  FileUtils.rm_f @spec.gem_build_complete_path
195
222
 
223
+ # FIXME: action at a distance: @ran_rake modified deep in build_extension(). - @duckinator
196
224
  @ran_rake = false # only run rake once
197
225
 
198
226
  @spec.extensions.each do |extension|
@@ -207,7 +235,7 @@ EOF
207
235
  ##
208
236
  # Writes +output+ to gem_make.out in the extension install directory.
209
237
 
210
- def write_gem_make_out output # :nodoc:
238
+ def write_gem_make_out(output) # :nodoc:
211
239
  destination = File.join @spec.extension_dir, 'gem_make.out'
212
240
 
213
241
  FileUtils.mkdir_p @spec.extension_dir
@@ -218,4 +246,3 @@ EOF
218
246
  end
219
247
 
220
248
  end
221
-
@@ -2,8 +2,8 @@
2
2
  require 'rubygems/command'
3
3
 
4
4
  class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
5
- def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
6
- unless File.exist?('Makefile') then
5
+ def self.build(extension, dest_path, results, args=[], lib_dir=nil)
6
+ unless File.exist?('Makefile')
7
7
  cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}"
8
8
  cmd << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
9
9
 
@@ -7,8 +7,8 @@
7
7
 
8
8
  class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
9
9
 
10
- def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
11
- unless File.exist?('Makefile') then
10
+ def self.build(extension, dest_path, results, args=[], lib_dir=nil)
11
+ unless File.exist?('Makefile')
12
12
  cmd = "sh ./configure --prefix=#{dest_path}"
13
13
  cmd << " #{args.join ' '}" unless args.empty?
14
14
 
@@ -21,4 +21,3 @@ class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
21
21
  end
22
22
 
23
23
  end
24
-
@@ -7,11 +7,12 @@
7
7
 
8
8
  require 'fileutils'
9
9
  require 'tempfile'
10
+ require 'shellwords'
10
11
 
11
12
  class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
12
13
  FileEntry = FileUtils::Entry_ # :nodoc:
13
14
 
14
- def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
15
+ def self.build(extension, dest_path, results, args=[], lib_dir=nil)
15
16
  tmp_dest = Dir.mktmpdir(".gem.", ".")
16
17
 
17
18
  # Some versions of `mktmpdir` return absolute paths, which will break make
@@ -23,9 +24,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
23
24
  # spaces do not work.
24
25
  #
25
26
  # Details: https://github.com/rubygems/rubygems/issues/977#issuecomment-171544940
26
- #
27
- # TODO: Make this unconditional when rubygems no longer supports Ruby 1.9.x.
28
- tmp_dest = get_relative_path(tmp_dest) unless Gem.win_platform? && RUBY_VERSION <= '2.0'
27
+ tmp_dest = get_relative_path(tmp_dest)
29
28
 
30
29
  Tempfile.open %w"siteconf .rb", "." do |siteconf|
31
30
  siteconf.puts "require 'rbconfig'"
@@ -40,13 +39,15 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
40
39
  destdir = ENV["DESTDIR"]
41
40
 
42
41
  begin
43
- cmd = [Gem.ruby, "-r", get_relative_path(siteconf.path), File.basename(extension), *args].join ' '
42
+ cmd = Gem.ruby.shellsplit << "-I" << File.expand_path("../../..", __FILE__) <<
43
+ "-r" << get_relative_path(siteconf.path) << File.basename(extension)
44
+ cmd.push(*args)
44
45
 
45
46
  begin
46
47
  run cmd, results
47
48
  ensure
48
49
  if File.exist? 'mkmf.log'
49
- unless $?.success? then
50
+ unless $?.success?
50
51
  results << "To see why this extension failed to compile, please check" \
51
52
  " the mkmf.log which can be found here:\n"
52
53
  results << " " + File.join(dest_path, 'mkmf.log') + "\n"
@@ -62,7 +63,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
62
63
 
63
64
  if tmp_dest
64
65
  # TODO remove in RubyGems 3
65
- if Gem.install_extension_in_lib and lib_dir then
66
+ if Gem.install_extension_in_lib and lib_dir
66
67
  FileUtils.mkdir_p lib_dir
67
68
  entries = Dir.entries(tmp_dest) - %w[. ..]
68
69
  entries = entries.map { |entry| File.join tmp_dest, entry }
@@ -5,33 +5,31 @@
5
5
  # See LICENSE.txt for permissions.
6
6
  #++
7
7
 
8
+ require "shellwords"
9
+
8
10
  class Gem::Ext::RakeBuilder < Gem::Ext::Builder
9
11
 
10
- def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
11
- if File.basename(extension) =~ /mkrf_conf/i then
12
- cmd = "#{Gem.ruby} #{File.basename extension}".dup
13
- cmd << " #{args.join " "}" unless args.empty?
14
- run cmd, results
12
+ def self.build(extension, dest_path, results, args=[], lib_dir=nil)
13
+ if File.basename(extension) =~ /mkrf_conf/i
14
+ run([Gem.ruby, File.basename(extension), *args], results)
15
15
  end
16
16
 
17
- # Deal with possible spaces in the path, e.g. C:/Program Files
18
- dest_path = '"' + dest_path.to_s + '"' if dest_path.to_s.include?(' ')
19
-
20
17
  rake = ENV['rake']
21
18
 
22
- rake ||= begin
23
- "#{Gem.ruby} -rrubygems #{Gem.bin_path('rake', 'rake')}"
24
- rescue Gem::Exception
25
- end
26
-
27
- rake ||= Gem.default_exec_format % 'rake'
28
-
29
- cmd = "#{rake} RUBYARCHDIR=#{dest_path} RUBYLIBDIR=#{dest_path}" # ENV is frozen
19
+ if rake
20
+ rake = rake.shellsplit
21
+ else
22
+ begin
23
+ rake = [Gem.ruby, "-rrubygems", Gem.bin_path('rake', 'rake')]
24
+ rescue Gem::Exception
25
+ rake = [Gem.default_exec_format % 'rake']
26
+ end
27
+ end
30
28
 
31
- run cmd, results
29
+ rake_args = ["RUBYARCHDIR=#{dest_path}", "RUBYLIBDIR=#{dest_path}", *args]
30
+ run(rake + rake_args, results)
32
31
 
33
32
  results
34
33
  end
35
34
 
36
35
  end
37
-
data/lib/rubygems/ext.rb CHANGED
@@ -16,4 +16,3 @@ require 'rubygems/ext/configure_builder'
16
16
  require 'rubygems/ext/ext_conf_builder'
17
17
  require 'rubygems/ext/rake_builder'
18
18
  require 'rubygems/ext/cmake_builder'
19
-
@@ -38,7 +38,7 @@ class Gem::GemRunner
38
38
  ##
39
39
  # Run the gem command with the following arguments.
40
40
 
41
- def run args
41
+ def run(args)
42
42
  build_args = extract_build_args args
43
43
 
44
44
  do_configuration args
@@ -63,7 +63,7 @@ class Gem::GemRunner
63
63
  # Separates the build arguments (those following <code>--</code>) from the
64
64
  # other arguments in the list.
65
65
 
66
- def extract_build_args args # :nodoc:
66
+ def extract_build_args(args) # :nodoc:
67
67
  return [] unless offset = args.index('--')
68
68
 
69
69
  build_args = args.slice!(offset...args.length)
@@ -7,6 +7,8 @@ require 'rubygems/text'
7
7
 
8
8
  module Gem::GemcutterUtilities
9
9
 
10
+ ERROR_CODE = 1
11
+
10
12
  include Gem::Text
11
13
 
12
14
  # TODO: move to Gem::Command
@@ -27,11 +29,23 @@ module Gem::GemcutterUtilities
27
29
  end
28
30
  end
29
31
 
32
+ ##
33
+ # Add the --otp option
34
+
35
+ def add_otp_option
36
+ add_option('--otp CODE',
37
+ 'Digit code for multifactor authentication') do |value, options|
38
+ options[:otp] = value
39
+ end
40
+ end
41
+
30
42
  ##
31
43
  # The API key from the command options or from the user's configuration.
32
44
 
33
45
  def api_key
34
- if options[:key] then
46
+ if ENV["GEM_HOST_API_KEY"]
47
+ ENV["GEM_HOST_API_KEY"]
48
+ elsif options[:key]
35
49
  verify_api_key options[:key]
36
50
  elsif Gem.configuration.api_keys.key?(host)
37
51
  Gem.configuration.api_keys[host]
@@ -69,7 +83,7 @@ module Gem::GemcutterUtilities
69
83
  self.host = host if host
70
84
  unless self.host
71
85
  alert_error "You must specify a gem server"
72
- terminate_interaction 1 # TODO: question this
86
+ terminate_interaction(ERROR_CODE)
73
87
  end
74
88
 
75
89
  if allowed_push_host
@@ -78,7 +92,7 @@ module Gem::GemcutterUtilities
78
92
 
79
93
  unless (host_uri.scheme == allowed_host_uri.scheme) && (host_uri.host == allowed_host_uri.host)
80
94
  alert_error "#{self.host.inspect} is not allowed by the gemspec, which only allows #{allowed_push_host.inspect}"
81
- terminate_interaction 1
95
+ terminate_interaction(ERROR_CODE)
82
96
  end
83
97
  end
84
98
 
@@ -93,11 +107,11 @@ module Gem::GemcutterUtilities
93
107
  # Signs in with the RubyGems API at +sign_in_host+ and sets the rubygems API
94
108
  # key.
95
109
 
96
- def sign_in sign_in_host = nil
110
+ def sign_in(sign_in_host = nil)
97
111
  sign_in_host ||= self.host
98
112
  return if api_key
99
113
 
100
- pretty_host = if Gem::DEFAULT_HOST == sign_in_host then
114
+ pretty_host = if Gem::DEFAULT_HOST == sign_in_host
101
115
  'RubyGems.org'
102
116
  else
103
117
  sign_in_host
@@ -116,6 +130,13 @@ module Gem::GemcutterUtilities
116
130
  request.basic_auth email, password
117
131
  end
118
132
 
133
+ if need_otp? response
134
+ response = rubygems_api_request(:get, "api/v1/api_key", sign_in_host) do |request|
135
+ request.basic_auth email, password
136
+ request.add_field "OTP", options[:otp]
137
+ end
138
+ end
139
+
119
140
  with_response response do |resp|
120
141
  say "Signed in."
121
142
  set_api_key host, resp.body
@@ -127,11 +148,11 @@ module Gem::GemcutterUtilities
127
148
  # an error.
128
149
 
129
150
  def verify_api_key(key)
130
- if Gem.configuration.api_keys.key? key then
151
+ if Gem.configuration.api_keys.key? key
131
152
  Gem.configuration.api_keys[key]
132
153
  else
133
154
  alert_error "No such API key. Please add it to your configuration (done automatically on initial `gem push`)."
134
- terminate_interaction 1 # TODO: question this
155
+ terminate_interaction(ERROR_CODE)
135
156
  end
136
157
  end
137
158
 
@@ -142,10 +163,10 @@ module Gem::GemcutterUtilities
142
163
  # If the response was not successful, shows an error to the user including
143
164
  # the +error_prefix+ and the response body.
144
165
 
145
- def with_response response, error_prefix = nil
166
+ def with_response(response, error_prefix = nil)
146
167
  case response
147
168
  when Net::HTTPSuccess then
148
- if block_given? then
169
+ if block_given?
149
170
  yield response
150
171
  else
151
172
  say clean_text(response.body)
@@ -155,11 +176,25 @@ module Gem::GemcutterUtilities
155
176
  message = "#{error_prefix}: #{message}" if error_prefix
156
177
 
157
178
  say clean_text(message)
158
- terminate_interaction 1 # TODO: question this
179
+ terminate_interaction(ERROR_CODE)
159
180
  end
160
181
  end
161
182
 
162
- def set_api_key host, key
183
+ ##
184
+ # Returns true when the user has enabled multifactor authentication from
185
+ # +response+ text.
186
+
187
+ def need_otp?(response)
188
+ return unless response.kind_of?(Net::HTTPUnauthorized) &&
189
+ response.body.start_with?('You have enabled multifactor authentication')
190
+ return true if options[:otp]
191
+
192
+ say 'You have enabled multi-factor authentication. Please enter OTP code.'
193
+ options[:otp] = ask 'Code: '
194
+ true
195
+ end
196
+
197
+ def set_api_key(host, key)
163
198
  if host == Gem::DEFAULT_HOST
164
199
  Gem.configuration.rubygems_api_key = key
165
200
  else
@@ -168,4 +203,3 @@ module Gem::GemcutterUtilities
168
203
  end
169
204
 
170
205
  end
171
-
@@ -4,10 +4,17 @@ require 'rubygems/package'
4
4
  require 'time'
5
5
  require 'tmpdir'
6
6
 
7
+ rescue_exceptions = [LoadError]
8
+ begin
9
+ require 'bundler/errors'
10
+ rescue LoadError # this rubygems + old ruby
11
+ else # this rubygems + ruby trunk with bundler
12
+ rescue_exceptions << Bundler::GemfileNotFound
13
+ end
7
14
  begin
8
15
  gem 'builder'
9
16
  require 'builder/xchar'
10
- rescue LoadError
17
+ rescue *rescue_exceptions
11
18
  end
12
19
 
13
20
  ##
@@ -55,7 +62,7 @@ class Gem::Indexer
55
62
  require 'tmpdir'
56
63
  require 'zlib'
57
64
 
58
- unless defined?(Builder::XChar) then
65
+ unless defined?(Builder::XChar)
59
66
  raise "Gem::Indexer requires that the XML Builder library be installed:" +
60
67
  "\n\tgem install builder"
61
68
  end
@@ -109,7 +116,7 @@ class Gem::Indexer
109
116
  ##
110
117
  # Builds Marshal quick index gemspecs.
111
118
 
112
- def build_marshal_gemspecs specs
119
+ def build_marshal_gemspecs(specs)
113
120
  count = specs.count
114
121
  progress = ui.progress_reporter count,
115
122
  "Generating Marshal quick index gemspecs for #{count} gems",
@@ -154,7 +161,7 @@ class Gem::Indexer
154
161
  platform = spec.original_platform
155
162
 
156
163
  # win32-api-1.0.4-x86-mswin32-60
157
- unless String === platform then
164
+ unless String === platform
158
165
  alert_warning "Skipping invalid platform in gem: #{spec.full_name}"
159
166
  next
160
167
  end
@@ -172,7 +179,7 @@ class Gem::Indexer
172
179
  ##
173
180
  # Builds indices for RubyGems 1.2 and newer. Handles full, latest, prerelease
174
181
 
175
- def build_modern_indices specs
182
+ def build_modern_indices(specs)
176
183
  prerelease, released = specs.partition { |s|
177
184
  s.version.prerelease?
178
185
  }
@@ -192,9 +199,9 @@ class Gem::Indexer
192
199
  "#{@prerelease_specs_index}.gz"]
193
200
  end
194
201
 
195
- def map_gems_to_specs gems
202
+ def map_gems_to_specs(gems)
196
203
  gems.map { |gemfile|
197
- if File.size(gemfile) == 0 then
204
+ if File.size(gemfile) == 0
198
205
  alert_warning "Skipping zero-length gem: #{gemfile}"
199
206
  next
200
207
  end
@@ -228,7 +235,7 @@ class Gem::Indexer
228
235
  say "Compressing indices"
229
236
 
230
237
  Gem.time 'Compressed indices' do
231
- if @build_modern then
238
+ if @build_modern
232
239
  gzip @specs_index
233
240
  gzip @latest_specs_index
234
241
  gzip @prerelease_specs_index
@@ -271,7 +278,7 @@ class Gem::Indexer
271
278
  # List of gem file names to index.
272
279
 
273
280
  def gem_file_list
274
- Dir[File.join(@dest_directory, "gems", '*.gem')]
281
+ Gem::Util.glob_files_in_dir("*.gem", File.join(@dest_directory, "gems"))
275
282
  end
276
283
 
277
284
  ##
@@ -306,7 +313,7 @@ class Gem::Indexer
306
313
  files = @files
307
314
  files.delete @quick_marshal_dir if files.include? @quick_dir
308
315
 
309
- if files.include? @quick_marshal_dir and not files.include? @quick_dir then
316
+ if files.include? @quick_marshal_dir and not files.include? @quick_dir
310
317
  files.delete @quick_marshal_dir
311
318
 
312
319
  dst_name = File.join(@dest_directory, @quick_marshal_dir_base)
@@ -347,7 +354,7 @@ class Gem::Indexer
347
354
  data = Gem.read_binary path
348
355
  compressed_data = Gem.read_binary "#{path}.#{extension}"
349
356
 
350
- unless data == Gem::Util.inflate(compressed_data) then
357
+ unless data == Gem::Util.inflate(compressed_data)
351
358
  raise "Compressed file #{compressed_path} does not match uncompressed file #{path}"
352
359
  end
353
360
  end
@@ -367,7 +374,7 @@ class Gem::Indexer
367
374
  gem_mtime >= specs_mtime
368
375
  end
369
376
 
370
- if updated_gems.empty? then
377
+ if updated_gems.empty?
371
378
  say 'No new gems'
372
379
  terminate_interaction 0
373
380
  end
@@ -10,4 +10,3 @@ Gem.post_install do |installer|
10
10
  ui = Gem::DefaultUserInteraction.ui
11
11
  ui.say "Successfully installed #{installer.spec.full_name} as a default gem"
12
12
  end
13
-
@@ -10,4 +10,3 @@ Gem.post_install do |installer|
10
10
  ui = Gem::DefaultUserInteraction.ui
11
11
  ui.say "Successfully installed #{installer.spec.full_name}"
12
12
  end
13
-
@@ -30,7 +30,7 @@ module Gem::InstallUpdateOptions
30
30
  options[:bin_dir] = File.expand_path(value)
31
31
  end
32
32
 
33
- add_option(:"Install/Update", '--[no-]document [TYPES]', Array,
33
+ add_option(:"Install/Update", '--document [TYPES]', Array,
34
34
  'Generate documentation for installed gems',
35
35
  'List the documentation types you wish to',
36
36
  'generate. For example: rdoc,ri') do |value, options|
@@ -50,7 +50,7 @@ module Gem::InstallUpdateOptions
50
50
  add_option(:"Install/Update", '--vendor',
51
51
  'Install gem into the vendor directory.',
52
52
  'Only for use by gem repackagers.') do |value, options|
53
- unless Gem.vendor_dir then
53
+ unless Gem.vendor_dir
54
54
  raise OptionParser::InvalidOption.new 'your platform is not supported'
55
55
  end
56
56
 
@@ -63,30 +63,6 @@ module Gem::InstallUpdateOptions
63
63
  options[:document] = []
64
64
  end
65
65
 
66
- add_option(:Deprecated, '--[no-]rdoc',
67
- 'Generate RDoc for installed gems',
68
- 'Use --document instead') do |value, options|
69
- if value then
70
- options[:document] << 'rdoc'
71
- else
72
- options[:document].delete 'rdoc'
73
- end
74
-
75
- options[:document].uniq!
76
- end
77
-
78
- add_option(:Deprecated, '--[no-]ri',
79
- 'Generate ri data for installed gems.',
80
- 'Use --document instead') do |value, options|
81
- if value then
82
- options[:document] << 'ri'
83
- else
84
- options[:document].delete 'ri'
85
- end
86
-
87
- options[:document].uniq!
88
- end
89
-
90
66
  add_option(:"Install/Update", '-E', '--[no-]env-shebang',
91
67
  "Rewrite the shebang line on installed",
92
68
  "scripts to use /usr/bin/env") do |value, options|
@@ -164,7 +140,7 @@ module Gem::InstallUpdateOptions
164
140
  File.exist? file
165
141
  end unless v
166
142
 
167
- unless v then
143
+ unless v
168
144
  message = v ? v : "(tried #{Gem::GEM_DEP_FILES.join ', '})"
169
145
 
170
146
  raise OptionParser::InvalidArgument,
@@ -202,7 +178,6 @@ module Gem::InstallUpdateOptions
202
178
  'Suggest alternates when gems are not found') do |v,o|
203
179
  options[:suggest_alternate] = v
204
180
  end
205
-
206
181
  end
207
182
 
208
183
  ##
@@ -213,4 +188,3 @@ module Gem::InstallUpdateOptions
213
188
  end
214
189
 
215
190
  end
216
-