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
@@ -34,7 +34,7 @@ class Gem::Installer
34
34
  # Paths where env(1) might live. Some systems are broken and have it in
35
35
  # /bin
36
36
 
37
- ENV_PATHS = %w[/usr/bin/env /bin/env]
37
+ ENV_PATHS = %w[/usr/bin/env /bin/env].freeze
38
38
 
39
39
  ##
40
40
  # Deprecated in favor of Gem::Ext::BuildError
@@ -101,7 +101,7 @@ class Gem::Installer
101
101
  ##
102
102
  # Construct an installer object for the gem file located at +path+
103
103
 
104
- def self.at path, options = {}
104
+ def self.at(path, options = {})
105
105
  security_policy = options[:security_policy]
106
106
  package = Gem::Package.new path, security_policy
107
107
  new package, options
@@ -110,11 +110,15 @@ class Gem::Installer
110
110
  class FakePackage
111
111
  attr_accessor :spec
112
112
 
113
+ attr_accessor :dir_mode
114
+ attr_accessor :prog_mode
115
+ attr_accessor :data_mode
116
+
113
117
  def initialize(spec)
114
118
  @spec = spec
115
119
  end
116
120
 
117
- def extract_files destination_dir, pattern = '*'
121
+ def extract_files(destination_dir, pattern = '*')
118
122
  FileUtils.mkdir_p destination_dir
119
123
 
120
124
  spec.files.each do |file|
@@ -125,7 +129,7 @@ class Gem::Installer
125
129
  end
126
130
  end
127
131
 
128
- def copy_to path
132
+ def copy_to(path)
129
133
  end
130
134
  end
131
135
 
@@ -133,7 +137,7 @@ class Gem::Installer
133
137
  # Construct an installer object for an ephemeral gem (one where we don't
134
138
  # actually have a .gem file, just a spec)
135
139
 
136
- def self.for_spec spec, options = {}
140
+ def self.for_spec(spec, options = {})
137
141
  # FIXME: we should have a real Package class for this
138
142
  new FakePackage.new(spec), options
139
143
  end
@@ -179,7 +183,13 @@ class Gem::Installer
179
183
 
180
184
  process_options
181
185
 
182
- if options[:user_install] and not options[:unpack] then
186
+ @package.dir_mode = options[:dir_mode]
187
+ @package.prog_mode = options[:prog_mode]
188
+ @package.data_mode = options[:data_mode]
189
+
190
+ @bin_dir = options[:bin_dir] if options[:bin_dir]
191
+
192
+ if options[:user_install] and not options[:unpack]
183
193
  @gem_home = Gem.user_dir
184
194
  @bin_dir = Gem.bindir gem_home unless options[:bin_dir]
185
195
  check_that_user_bin_dir_is_in_path
@@ -199,7 +209,7 @@ class Gem::Installer
199
209
  #
200
210
  # Otherwise +filename+ is overwritten.
201
211
 
202
- def check_executable_overwrite filename # :nodoc:
212
+ def check_executable_overwrite(filename) # :nodoc:
203
213
  return if @force
204
214
 
205
215
  generated_bin = File.join @bin_dir, formatted_program_filename(filename)
@@ -235,7 +245,7 @@ class Gem::Installer
235
245
 
236
246
  question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
237
247
 
238
- if ruby_executable then
248
+ if ruby_executable
239
249
  question << (existing || 'an unknown executable')
240
250
 
241
251
  return if ask_yes_no "#{question}\nOverwrite the executable?", false
@@ -288,7 +298,7 @@ class Gem::Installer
288
298
  run_pre_install_hooks
289
299
 
290
300
  # Set loaded_from to ensure extension_dir is correct
291
- if @options[:install_as_default] then
301
+ if @options[:install_as_default]
292
302
  spec.loaded_from = default_spec_file
293
303
  else
294
304
  spec.loaded_from = spec_file
@@ -298,9 +308,10 @@ class Gem::Installer
298
308
  FileUtils.rm_rf gem_dir
299
309
  FileUtils.rm_rf spec.extension_dir
300
310
 
301
- FileUtils.mkdir_p gem_dir
311
+ dir_mode = options[:dir_mode]
312
+ FileUtils.mkdir_p gem_dir, :mode => dir_mode && 0755
302
313
 
303
- if @options[:install_as_default] then
314
+ if @options[:install_as_default]
304
315
  extract_bin
305
316
  write_default_spec
306
317
  else
@@ -309,12 +320,17 @@ class Gem::Installer
309
320
  build_extensions
310
321
  write_build_info_file
311
322
  run_post_build_hooks
323
+ end
324
+
325
+ generate_bin
312
326
 
313
- generate_bin
327
+ unless @options[:install_as_default]
314
328
  write_spec
315
329
  write_cache_file
316
330
  end
317
331
 
332
+ File.chmod(dir_mode, gem_dir) if dir_mode
333
+
318
334
  say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
319
335
 
320
336
  Gem::Installer.install_lock.synchronize { Gem::Specification.reset }
@@ -331,7 +347,7 @@ class Gem::Installer
331
347
 
332
348
  def run_pre_install_hooks # :nodoc:
333
349
  Gem.pre_install_hooks.each do |hook|
334
- if hook.call(self) == false then
350
+ if hook.call(self) == false
335
351
  location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
336
352
 
337
353
  message = "pre-install hook#{location} failed for #{spec.full_name}"
@@ -342,7 +358,7 @@ class Gem::Installer
342
358
 
343
359
  def run_post_build_hooks # :nodoc:
344
360
  Gem.post_build_hooks.each do |hook|
345
- if hook.call(self) == false then
361
+ if hook.call(self) == false
346
362
  FileUtils.rm_rf gem_dir
347
363
 
348
364
  location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
@@ -368,7 +384,7 @@ class Gem::Installer
368
384
  @specs ||= begin
369
385
  specs = []
370
386
 
371
- Dir[File.join(gem_home, "specifications", "*.gemspec")].each do |path|
387
+ Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
372
388
  spec = Gem::Specification.load path.untaint
373
389
  specs << spec if spec
374
390
  end
@@ -385,7 +401,7 @@ class Gem::Installer
385
401
  # dependency :: Gem::Dependency
386
402
 
387
403
  def ensure_dependency(spec, dependency)
388
- unless installation_satisfies_dependency? dependency then
404
+ unless installation_satisfies_dependency? dependency
389
405
  raise Gem::InstallError, "#{spec.name} requires #{dependency}"
390
406
  end
391
407
  true
@@ -453,7 +469,7 @@ class Gem::Installer
453
469
  # Creates windows .bat files for easy running of commands
454
470
 
455
471
  def generate_windows_script(filename, bindir)
456
- if Gem.win_platform? then
472
+ if Gem.win_platform?
457
473
  script_name = filename + ".bat"
458
474
  script_path = File.join bindir, File.basename(script_name)
459
475
  File.open script_path, 'w' do |file|
@@ -468,7 +484,7 @@ class Gem::Installer
468
484
  return if spec.executables.nil? or spec.executables.empty?
469
485
 
470
486
  begin
471
- Dir.mkdir @bin_dir
487
+ Dir.mkdir @bin_dir, *[options[:dir_mode] && 0755].compact
472
488
  rescue SystemCallError
473
489
  raise unless File.directory? @bin_dir
474
490
  end
@@ -479,18 +495,19 @@ class Gem::Installer
479
495
  filename.untaint
480
496
  bin_path = File.join gem_dir, spec.bindir, filename
481
497
 
482
- unless File.exist? bin_path then
498
+ unless File.exist? bin_path
483
499
  # TODO change this to a more useful warning
484
500
  warn "`#{bin_path}` does not exist, maybe `gem pristine #{spec.name}` will fix it?"
485
501
  next
486
502
  end
487
503
 
488
504
  mode = File.stat(bin_path).mode
489
- FileUtils.chmod mode | 0111, bin_path unless (mode | 0111) == mode
505
+ dir_mode = options[:prog_mode] || (mode | 0111)
506
+ FileUtils.chmod dir_mode, bin_path unless dir_mode == mode
490
507
 
491
508
  check_executable_overwrite filename
492
509
 
493
- if @wrappers then
510
+ if @wrappers
494
511
  generate_bin_script filename, @bin_dir
495
512
  else
496
513
  generate_bin_symlink filename, @bin_dir
@@ -513,6 +530,7 @@ class Gem::Installer
513
530
 
514
531
  File.open bin_script_path, 'wb', 0755 do |file|
515
532
  file.print app_script_text(filename)
533
+ file.chmod(options[:prog_mode] || 0755)
516
534
  end
517
535
 
518
536
  verbose bin_script_path
@@ -528,8 +546,8 @@ class Gem::Installer
528
546
  src = File.join gem_dir, spec.bindir, filename
529
547
  dst = File.join bindir, formatted_program_filename(filename)
530
548
 
531
- if File.exist? dst then
532
- if File.symlink? dst then
549
+ if File.exist? dst
550
+ if File.symlink? dst
533
551
  link = File.readlink(dst).split File::SEPARATOR
534
552
  cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ''))
535
553
  return if spec.version < cur_version
@@ -563,7 +581,7 @@ class Gem::Installer
563
581
  path = File.join gem_dir, spec.bindir, bin_file_name
564
582
  first_line = File.open(path, "rb") {|file| file.gets}
565
583
 
566
- if /\A#!/ =~ first_line then
584
+ if /\A#!/ =~ first_line
567
585
  # Preserve extra words on shebang line, like "-w". Thanks RPA.
568
586
  shebang = first_line.sub(/\A\#!.*?ruby\S*((\s+\S+)+)/, "#!#{Gem.ruby}")
569
587
  opts = $1
@@ -588,9 +606,9 @@ class Gem::Installer
588
606
  end
589
607
 
590
608
  "#!#{which}"
591
- elsif not ruby_name then
609
+ elsif not ruby_name
592
610
  "#!#{Gem.ruby}#{opts}"
593
- elsif opts then
611
+ elsif opts
594
612
  "#!/bin/sh\n'exec' #{ruby_name.dump} '-x' \"$0\" \"$@\"\n#{shebang}"
595
613
  else
596
614
  # Create a plain shebang line.
@@ -616,9 +634,9 @@ class Gem::Installer
616
634
  end
617
635
 
618
636
  def ensure_required_ruby_version_met # :nodoc:
619
- if rrv = spec.required_ruby_version then
620
- unless rrv.satisfied_by? Gem.ruby_version then
621
- ruby_version = Gem.ruby_api_version
637
+ if rrv = spec.required_ruby_version
638
+ ruby_version = Gem.ruby_version
639
+ unless rrv.satisfied_by? ruby_version
622
640
  raise Gem::RuntimeRequirementNotMetError,
623
641
  "#{spec.name} requires Ruby version #{rrv}. The current ruby version is #{ruby_version}."
624
642
  end
@@ -626,8 +644,8 @@ class Gem::Installer
626
644
  end
627
645
 
628
646
  def ensure_required_rubygems_version_met # :nodoc:
629
- if rrgv = spec.required_rubygems_version then
630
- unless rrgv.satisfied_by? Gem.rubygems_version then
647
+ if rrgv = spec.required_rubygems_version
648
+ unless rrgv.satisfied_by? Gem.rubygems_version
631
649
  rg_version = Gem::VERSION
632
650
  raise Gem::RuntimeRequirementNotMetError,
633
651
  "#{spec.name} requires RubyGems version #{rrgv}. The current RubyGems version is #{rg_version}. " +
@@ -687,16 +705,16 @@ class Gem::Installer
687
705
  File::ALT_SEPARATOR
688
706
 
689
707
  path = ENV['PATH']
690
- if Gem.win_platform? then
708
+ if Gem.win_platform?
691
709
  path = path.downcase
692
710
  user_bin_dir = user_bin_dir.downcase
693
711
  end
694
712
 
695
713
  path = path.split(File::PATH_SEPARATOR)
696
714
 
697
- unless path.include? user_bin_dir then
715
+ unless path.include? user_bin_dir
698
716
  unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV['HOME'], '~'))
699
- unless self.class.path_warning then
717
+ unless self.class.path_warning
700
718
  alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
701
719
  self.class.path_warning = true
702
720
  end
@@ -705,7 +723,7 @@ class Gem::Installer
705
723
  end
706
724
 
707
725
  def verify_gem_home(unpack = false) # :nodoc:
708
- FileUtils.mkdir_p gem_home
726
+ FileUtils.mkdir_p gem_home, :mode => options[:dir_mode] && 0755
709
727
  raise Gem::FilePermissionError, gem_home unless
710
728
  unpack or File.writable?(gem_home)
711
729
  end
@@ -715,11 +733,11 @@ class Gem::Installer
715
733
  raise Gem::InstallError, "#{spec} has an invalid name"
716
734
  end
717
735
 
718
- if spec.raw_require_paths.any?{|path| path =~ /\r\n|\r|\n/ }
736
+ if spec.raw_require_paths.any?{|path| path =~ /\R/ }
719
737
  raise Gem::InstallError, "#{spec} has an invalid require_paths"
720
738
  end
721
739
 
722
- if spec.extensions.any?{|ext| ext =~ /\r\n|\r|\n/ }
740
+ if spec.extensions.any?{|ext| ext =~ /\R/ }
723
741
  raise Gem::InstallError, "#{spec} has an invalid extensions"
724
742
  end
725
743
 
@@ -727,7 +745,7 @@ class Gem::Installer
727
745
  raise Gem::InstallError, "#{spec} has an invalid specification_version"
728
746
  end
729
747
 
730
- if spec.dependencies.any? {|dep| dep.type =~ /\r\n|\r|\n/ || dep.name =~ /\r\n|\r|\n/ }
748
+ if spec.dependencies.any? {|dep| dep.type =~ /\R/ || dep.name =~ /\R/ }
731
749
  raise Gem::InstallError, "#{spec} has an invalid dependencies"
732
750
  end
733
751
  end
@@ -751,11 +769,11 @@ require 'rubygems'
751
769
 
752
770
  version = "#{Gem::Requirement.default}.a"
753
771
 
754
- if ARGV.first
755
- str = ARGV.first
756
- str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
757
- if str =~ /\\A_(.*)_\\z/ and Gem::Version.correct?($1) then
758
- version = $1
772
+ str = ARGV.first
773
+ if str
774
+ str = str.b[/\\A_(.*)_\\z/, 1]
775
+ if str and Gem::Version.correct?(str)
776
+ version = str
759
777
  ARGV.shift
760
778
  end
761
779
  end
@@ -773,17 +791,38 @@ TEXT
773
791
  # return the stub script text used to launch the true Ruby script
774
792
 
775
793
  def windows_stub_script(bindir, bin_file_name)
776
- ruby = Gem.ruby.gsub(/^\"|\"$/, "").tr(File::SEPARATOR, "\\")
777
- return <<-TEXT
794
+ rb_config = RbConfig::CONFIG
795
+ rb_topdir = RbConfig::TOPDIR || File.dirname(rb_config["bindir"])
796
+
797
+ # get ruby executable file name from RbConfig
798
+ ruby_exe = "#{rb_config['RUBY_INSTALL_NAME']}#{rb_config['EXEEXT']}"
799
+ ruby_exe = "ruby.exe" if ruby_exe.empty?
800
+
801
+ if File.exist?(File.join bindir, ruby_exe)
802
+ # stub & ruby.exe withing same folder. Portable
803
+ <<-TEXT
778
804
  @ECHO OFF
779
- IF NOT "%~f0" == "~f0" GOTO :WinNT
780
- @"#{ruby}" "#{File.join(bindir, bin_file_name)}" %1 %2 %3 %4 %5 %6 %7 %8 %9
781
- GOTO :EOF
782
- :WinNT
783
- @"#{ruby}" "%~dpn0" %*
784
- TEXT
805
+ @"%~dp0#{ruby_exe}" "%~dpn0" %*
806
+ TEXT
807
+ elsif bindir.downcase.start_with? rb_topdir.downcase
808
+ # stub within ruby folder, but not standard bin. Portable
809
+ require 'pathname'
810
+ from = Pathname.new bindir
811
+ to = Pathname.new "#{rb_topdir}/bin"
812
+ rel = to.relative_path_from from
813
+ <<-TEXT
814
+ @ECHO OFF
815
+ @"%~dp0#{rel}/#{ruby_exe}" "%~dpn0" %*
816
+ TEXT
817
+ else
818
+ # outside ruby folder, maybe -user-install or bundler. Portable, but ruby
819
+ # is dependent on PATH
820
+ <<-TEXT
821
+ @ECHO OFF
822
+ @#{ruby_exe} "%~dpn0" %*
823
+ TEXT
824
+ end
785
825
  end
786
-
787
826
  ##
788
827
  # Builds extensions. Valid types of extensions are extconf.rb files,
789
828
  # configure scripts and rakefiles or mkrf_conf files.
@@ -821,14 +860,14 @@ TEXT
821
860
  # without the full gem installed.
822
861
 
823
862
  def extract_bin
824
- @package.extract_files gem_dir, "bin/*"
863
+ @package.extract_files gem_dir, "#{spec.bindir}/*"
825
864
  end
826
865
 
827
866
  ##
828
867
  # Prefix and suffix the program filename the same as ruby.
829
868
 
830
869
  def formatted_program_filename(filename)
831
- if @format_executable then
870
+ if @format_executable
832
871
  self.class.exec_format % File.basename(filename)
833
872
  else
834
873
  filename
@@ -887,7 +926,8 @@ TEXT
887
926
 
888
927
  build_info_dir = File.join gem_home, 'build_info'
889
928
 
890
- FileUtils.mkdir_p build_info_dir
929
+ dir_mode = options[:dir_mode]
930
+ FileUtils.mkdir_p build_info_dir, :mode => dir_mode && 0755
891
931
 
892
932
  build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
893
933
 
@@ -896,6 +936,8 @@ TEXT
896
936
  io.puts arg
897
937
  end
898
938
  end
939
+
940
+ File.chmod(dir_mode, build_info_dir) if dir_mode
899
941
  end
900
942
 
901
943
  ##
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/test_case'
3
3
  require 'rubygems/installer'
4
- require 'rubygems/deprecate'
5
4
 
6
5
  class Gem::Installer
7
6
 
@@ -107,18 +106,6 @@ class Gem::InstallerTestCase < Gem::TestCase
107
106
  Gem::Installer.path_warning = false
108
107
  end
109
108
 
110
- def util_gem_bindir spec = @spec # :nodoc:
111
- spec.bin_dir
112
- end
113
-
114
- def util_gem_dir spec = @spec # :nodoc:
115
- spec.gem_dir
116
- end
117
-
118
- extend Gem::Deprecate
119
- deprecate :util_gem_bindir, "@spec.bin_dir", 2016, 10
120
- deprecate :util_gem_dir, "@spec.gem_dir", 2016, 10
121
-
122
109
  ##
123
110
  # The path where installed executables live
124
111
 
@@ -132,9 +119,9 @@ class Gem::InstallerTestCase < Gem::TestCase
132
119
  # The executable is also written to the bin dir in @tmpdir and the installed
133
120
  # gem directory for +spec+.
134
121
 
135
- def util_make_exec(spec = @spec, shebang = "#!/usr/bin/ruby")
122
+ def util_make_exec(spec = @spec, shebang = "#!/usr/bin/ruby", bindir = "bin")
136
123
  spec.executables = %w[executable]
137
- spec.files << 'bin/executable'
124
+ spec.bindir = bindir
138
125
 
139
126
  exec_path = spec.bin_file "executable"
140
127
  write_file exec_path do |io|
@@ -196,4 +183,3 @@ class Gem::InstallerTestCase < Gem::TestCase
196
183
  end
197
184
 
198
185
  end
199
-
@@ -24,8 +24,10 @@ module Gem::LocalRemoteOptions
24
24
  raise OptionParser::InvalidArgument, value
25
25
  end
26
26
 
27
- unless ['http', 'https', 'file', 's3'].include?(uri.scheme)
28
- raise OptionParser::InvalidArgument, value
27
+ valid_uri_schemes = ["http", "https", "file", "s3"]
28
+ unless valid_uri_schemes.include?(uri.scheme)
29
+ msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://"}}"
30
+ raise ArgumentError, msg
29
31
  end
30
32
 
31
33
  value
@@ -106,7 +108,7 @@ module Gem::LocalRemoteOptions
106
108
 
107
109
  source << '/' if source !~ /\/\z/
108
110
 
109
- if options.delete :sources_cleared then
111
+ if options.delete :sources_cleared
110
112
  Gem.sources = [source]
111
113
  else
112
114
  Gem.sources << source unless Gem.sources.include?(source)
@@ -146,4 +148,3 @@ module Gem::LocalRemoteOptions
146
148
  end
147
149
 
148
150
  end
149
-
@@ -12,7 +12,7 @@ class Gem::MockGemUi < Gem::StreamUI
12
12
 
13
13
  class InputEOFError < RuntimeError
14
14
 
15
- def initialize question
15
+ def initialize(question)
16
16
  super "Out of input for MockGemUi on #{question.inspect}"
17
17
  end
18
18
 
@@ -21,7 +21,7 @@ class Gem::MockGemUi < Gem::StreamUI
21
21
  class TermError < RuntimeError
22
22
  attr_reader :exit_code
23
23
 
24
- def initialize exit_code
24
+ def initialize(exit_code)
25
25
  super
26
26
  @exit_code = exit_code
27
27
  end
@@ -56,7 +56,7 @@ class Gem::MockGemUi < Gem::StreamUI
56
56
  @terminated = false
57
57
  end
58
58
 
59
- def ask question
59
+ def ask(question)
60
60
  raise InputEOFError, question if @ins.eof?
61
61
 
62
62
  super
@@ -86,4 +86,3 @@ class Gem::MockGemUi < Gem::StreamUI
86
86
  end
87
87
 
88
88
  end
89
-
@@ -24,7 +24,7 @@ class Gem::NameTuple
24
24
  # Turn an array of [name, version, platform] into an array of
25
25
  # NameTuple objects.
26
26
 
27
- def self.from_list list
27
+ def self.from_list(list)
28
28
  list.map { |t| new(*t) }
29
29
  end
30
30
 
@@ -32,7 +32,7 @@ class Gem::NameTuple
32
32
  # Turn an array of NameTuple objects back into an array of
33
33
  # [name, version, platform] tuples.
34
34
 
35
- def self.to_basic list
35
+ def self.to_basic(list)
36
36
  list.map { |t| t.to_a }
37
37
  end
38
38
 
@@ -90,7 +90,7 @@ class Gem::NameTuple
90
90
 
91
91
  alias to_s inspect # :nodoc:
92
92
 
93
- def <=> other
93
+ def <=>(other)
94
94
  [@name, @version, @platform == Gem::Platform::RUBY ? -1 : 1] <=>
95
95
  [other.name, other.version,
96
96
  other.platform == Gem::Platform::RUBY ? -1 : 1]
@@ -102,7 +102,7 @@ class Gem::NameTuple
102
102
  # Compare with +other+. Supports another NameTuple or an Array
103
103
  # in the [name, version, platform] format.
104
104
 
105
- def == other
105
+ def ==(other)
106
106
  case other
107
107
  when self.class
108
108
  @name == other.name and
@@ -31,7 +31,7 @@ class Gem::Package::DigestIO
31
31
  # digests['SHA1'].hexdigest #=> "aaf4c61d[...]"
32
32
  # digests['SHA512'].hexdigest #=> "9b71d224[...]"
33
33
 
34
- def self.wrap io, digests
34
+ def self.wrap(io, digests)
35
35
  digest_io = new io, digests
36
36
 
37
37
  yield digest_io
@@ -43,7 +43,7 @@ class Gem::Package::DigestIO
43
43
  # Creates a new DigestIO instance. Using ::wrap is recommended, see the
44
44
  # ::wrap documentation for documentation of +io+ and +digests+.
45
45
 
46
- def initialize io, digests
46
+ def initialize(io, digests)
47
47
  @io = io
48
48
  @digests = digests
49
49
  end
@@ -51,7 +51,7 @@ class Gem::Package::DigestIO
51
51
  ##
52
52
  # Writes +data+ to the underlying IO and updates the digests
53
53
 
54
- def write data
54
+ def write(data)
55
55
  result = @io.write data
56
56
 
57
57
  @digests.each do |_, digest|
@@ -62,4 +62,3 @@ class Gem::Package::DigestIO
62
62
  end
63
63
 
64
64
  end
65
-
@@ -10,7 +10,7 @@ class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
10
10
 
11
11
  attr_reader :path
12
12
 
13
- def initialize path
13
+ def initialize(path)
14
14
  @path = path
15
15
  end
16
16
 
@@ -22,13 +22,12 @@ class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
22
22
  File.exist? path
23
23
  end
24
24
 
25
- def with_write_io &block
25
+ def with_write_io(&block)
26
26
  File.open path, 'wb', &block
27
27
  end
28
28
 
29
- def with_read_io &block
29
+ def with_read_io(&block)
30
30
  File.open path, 'rb', &block
31
31
  end
32
32
 
33
33
  end
34
-
@@ -11,7 +11,7 @@ class Gem::Package::IOSource < Gem::Package::Source # :nodoc: all
11
11
 
12
12
  attr_reader :io
13
13
 
14
- def initialize io
14
+ def initialize(io)
15
15
  @io = io
16
16
  end
17
17
 
@@ -43,4 +43,3 @@ class Gem::Package::IOSource < Gem::Package::Source # :nodoc: all
43
43
  end
44
44
 
45
45
  end
46
-
@@ -19,7 +19,7 @@ class Gem::Package::Old < Gem::Package
19
19
  # Creates a new old-format package reader for +gem+. Old-format packages
20
20
  # cannot be written.
21
21
 
22
- def initialize gem, security_policy
22
+ def initialize(gem, security_policy)
23
23
  require 'fileutils'
24
24
  require 'zlib'
25
25
  Gem.load_yaml
@@ -49,7 +49,7 @@ class Gem::Package::Old < Gem::Package
49
49
  ##
50
50
  # Extracts the files in this package into +destination_dir+
51
51
 
52
- def extract_files destination_dir
52
+ def extract_files(destination_dir)
53
53
  verify
54
54
 
55
55
  errstr = "Error reading files from gem"
@@ -78,9 +78,9 @@ class Gem::Package::Old < Gem::Package
78
78
 
79
79
  FileUtils.rm_rf destination
80
80
 
81
- FileUtils.mkdir_p File.dirname destination
81
+ FileUtils.mkdir_p File.dirname(destination), :mode => dir_mode && 0755
82
82
 
83
- File.open destination, 'wb', entry['mode'] do |out|
83
+ File.open destination, 'wb', file_mode(entry['mode']) do |out|
84
84
  out.write file_data
85
85
  end
86
86
 
@@ -94,7 +94,7 @@ class Gem::Package::Old < Gem::Package
94
94
  ##
95
95
  # Reads the file list section from the old-format gem +io+
96
96
 
97
- def file_list io # :nodoc:
97
+ def file_list(io) # :nodoc:
98
98
  header = String.new
99
99
 
100
100
  read_until_dashes io do |line|
@@ -107,7 +107,7 @@ class Gem::Package::Old < Gem::Package
107
107
  ##
108
108
  # Reads lines until a "---" separator is found
109
109
 
110
- def read_until_dashes io # :nodoc:
110
+ def read_until_dashes(io) # :nodoc:
111
111
  while (line = io.gets) && line.chomp.strip != "---" do
112
112
  yield line if block_given?
113
113
  end
@@ -116,7 +116,7 @@ class Gem::Package::Old < Gem::Package
116
116
  ##
117
117
  # Skips the Ruby self-install header in +io+.
118
118
 
119
- def skip_ruby io # :nodoc:
119
+ def skip_ruby(io) # :nodoc:
120
120
  loop do
121
121
  line = io.gets
122
122
 
@@ -144,17 +144,9 @@ class Gem::Package::Old < Gem::Package
144
144
  end
145
145
  end
146
146
 
147
- yaml_error = if RUBY_VERSION < '1.9' then
148
- YAML::ParseError
149
- elsif YAML.const_defined?(:ENGINE) && YAML::ENGINE.yamler == 'syck' then
150
- YAML::ParseError
151
- else
152
- YAML::SyntaxError
153
- end
154
-
155
147
  begin
156
148
  @spec = Gem::Specification.from_yaml yaml
157
- rescue yaml_error
149
+ rescue YAML::SyntaxError
158
150
  raise Gem::Exception, "Failed to parse gem specification out of gem file"
159
151
  end
160
152
  rescue ArgumentError