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
@@ -1,4 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
  class Gem::Package::Source # :nodoc:
3
3
  end
4
-
@@ -50,7 +50,7 @@ class Gem::Package::TarHeader
50
50
  :uid,
51
51
  :uname,
52
52
  :version,
53
- ]
53
+ ].freeze
54
54
 
55
55
  ##
56
56
  # Pack format for a tar header
@@ -107,8 +107,8 @@ class Gem::Package::TarHeader
107
107
 
108
108
  new :name => fields.shift,
109
109
  :mode => strict_oct(fields.shift),
110
- :uid => strict_oct(fields.shift),
111
- :gid => strict_oct(fields.shift),
110
+ :uid => oct_or_256based(fields.shift),
111
+ :gid => oct_or_256based(fields.shift),
112
112
  :size => strict_oct(fields.shift),
113
113
  :mtime => strict_oct(fields.shift),
114
114
  :checksum => strict_oct(fields.shift),
@@ -130,11 +130,20 @@ class Gem::Package::TarHeader
130
130
  raise ArgumentError, "#{str.inspect} is not an octal string"
131
131
  end
132
132
 
133
+ def self.oct_or_256based(str)
134
+ # \x80 flags a positive 256-based number
135
+ # \ff flags a negative 256-based number
136
+ # In case we have a match, parse it as a signed binary value
137
+ # in big-endian order, except that the high-order bit is ignored.
138
+ return str.unpack('N2').last if str =~ /\A[\x80\xff]/n
139
+ strict_oct(str)
140
+ end
141
+
133
142
  ##
134
143
  # Creates a new TarHeader using +vals+
135
144
 
136
145
  def initialize(vals)
137
- unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode] then
146
+ unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode]
138
147
  raise ArgumentError, ":name, :size, :prefix and :mode required"
139
148
  end
140
149
 
@@ -64,7 +64,7 @@ class Gem::Package::TarReader::Entry
64
64
  # Full name of the tar entry
65
65
 
66
66
  def full_name
67
- if @header.prefix != "" then
67
+ if @header.prefix != ""
68
68
  File.join @header.prefix, @header.name
69
69
  else
70
70
  @header.name
@@ -119,6 +119,12 @@ class Gem::Package::TarReader::Entry
119
119
  bytes_read
120
120
  end
121
121
 
122
+ def size
123
+ @header.size
124
+ end
125
+
126
+ alias length size
127
+
122
128
  ##
123
129
  # Reads +len+ bytes from the tar file entry, or the rest of the entry if
124
130
  # nil
@@ -137,7 +143,19 @@ class Gem::Package::TarReader::Entry
137
143
  ret
138
144
  end
139
145
 
140
- alias readpartial read # :nodoc:
146
+ def readpartial(maxlen = nil, outbuf = "".b)
147
+ check_closed
148
+
149
+ raise EOFError if @read >= @header.size
150
+
151
+ maxlen ||= @header.size - @read
152
+ max_read = [maxlen, @header.size - @read].min
153
+
154
+ @io.readpartial(max_read, outbuf)
155
+ @read += outbuf.size
156
+
157
+ outbuf
158
+ end
141
159
 
142
160
  ##
143
161
  # Rewinds to the beginning of the tar file entry
@@ -145,8 +163,6 @@ class Gem::Package::TarReader::Entry
145
163
  def rewind
146
164
  check_closed
147
165
 
148
- raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
149
-
150
166
  @io.pos = @orig_pos
151
167
  @read = 0
152
168
  end
@@ -92,11 +92,9 @@ class Gem::Package::TarReader
92
92
  # NOTE: Do not call #rewind during #each
93
93
 
94
94
  def rewind
95
- if @init_pos == 0 then
96
- raise Gem::Package::NonSeekableIO unless @io.respond_to? :rewind
95
+ if @init_pos == 0
97
96
  @io.rewind
98
97
  else
99
- raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
100
98
  @io.pos = @init_pos
101
99
  end
102
100
  end
@@ -106,7 +104,7 @@ class Gem::Package::TarReader
106
104
  # yields it. Rewinds the tar file to the beginning when the block
107
105
  # terminates.
108
106
 
109
- def seek name # :yields: entry
107
+ def seek(name) # :yields: entry
110
108
  found = find do |entry|
111
109
  entry.full_name == name
112
110
  end
@@ -52,7 +52,7 @@ class Gem::Package::TarTestCase < Gem::TestCase
52
52
  name = fields.shift
53
53
  length = fields.shift.to_i
54
54
 
55
- if name == "checksum" then
55
+ if name == "checksum"
56
56
  chksum_off = offset
57
57
  offset += length
58
58
  next
@@ -94,13 +94,7 @@ class Gem::Package::TarTestCase < Gem::TestCase
94
94
  ASCIIZ(dname, 155) # char prefix[155]; ASCII + (Z unless filled)
95
95
  ]
96
96
 
97
- format = "C100C8C8C8C12C12C8CC100C6C2C32C32C8C8C155"
98
- h = if RUBY_VERSION >= "1.9" then
99
- arr.join
100
- else
101
- arr = arr.join("").split(//).map{|x| x[0]}
102
- arr.pack format
103
- end
97
+ h = arr.join
104
98
  ret = h + "\0" * (512 - h.size)
105
99
  assert_equal(512, ret.size)
106
100
  ret
@@ -106,8 +106,6 @@ class Gem::Package::TarWriter
106
106
  def add_file(name, mode) # :yields: io
107
107
  check_closed
108
108
 
109
- raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
110
-
111
109
  name, prefix = split_name name
112
110
 
113
111
  init_pos = @io.pos
@@ -125,7 +123,7 @@ class Gem::Package::TarWriter
125
123
 
126
124
  header = Gem::Package::TarHeader.new :name => name, :mode => mode,
127
125
  :size => size, :prefix => prefix,
128
- :mtime => Time.now
126
+ :mtime => ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now
129
127
 
130
128
  @io.write header
131
129
  @io.pos = final_pos
@@ -141,11 +139,11 @@ class Gem::Package::TarWriter
141
139
  #
142
140
  # The created digest object is returned.
143
141
 
144
- def add_file_digest name, mode, digest_algorithms # :yields: io
142
+ def add_file_digest(name, mode, digest_algorithms) # :yields: io
145
143
  digests = digest_algorithms.map do |digest_algorithm|
146
144
  digest = digest_algorithm.new
147
145
  digest_name =
148
- if digest.respond_to? :name then
146
+ if digest.respond_to? :name
149
147
  digest.name
150
148
  else
151
149
  /::([^:]+)$/ =~ digest_algorithm.name
@@ -174,7 +172,7 @@ class Gem::Package::TarWriter
174
172
  #
175
173
  # Returns the digest.
176
174
 
177
- def add_file_signed name, mode, signer
175
+ def add_file_signed(name, mode, signer)
178
176
  digest_algorithms = [
179
177
  signer.digest_algorithm,
180
178
  Digest::SHA512,
@@ -186,7 +184,7 @@ class Gem::Package::TarWriter
186
184
 
187
185
  signature_digest = digests.values.compact.find do |digest|
188
186
  digest_name =
189
- if digest.respond_to? :name then
187
+ if digest.respond_to? :name
190
188
  digest.name
191
189
  else
192
190
  digest.class.name[/::([^:]+)\z/, 1]
@@ -197,7 +195,7 @@ class Gem::Package::TarWriter
197
195
 
198
196
  raise "no #{signer.digest_name} in #{digests.values.compact}" unless signature_digest
199
197
 
200
- if signer.key then
198
+ if signer.key
201
199
  signature = signer.sign signature_digest.digest
202
200
 
203
201
  add_file_simple "#{name}.sig", 0444, signature.length do |io|
@@ -219,7 +217,7 @@ class Gem::Package::TarWriter
219
217
 
220
218
  header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
221
219
  :size => size, :prefix => prefix,
222
- :mtime => Time.now).to_s
220
+ :mtime => ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now).to_s
223
221
 
224
222
  @io.write header
225
223
  os = BoundedStream.new @io, size
@@ -247,7 +245,7 @@ class Gem::Package::TarWriter
247
245
  :size => 0, :typeflag => "2",
248
246
  :linkname => target,
249
247
  :prefix => prefix,
250
- :mtime => Time.now).to_s
248
+ :mtime => ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now).to_s
251
249
 
252
250
  @io.write header
253
251
 
@@ -300,7 +298,7 @@ class Gem::Package::TarWriter
300
298
  header = Gem::Package::TarHeader.new :name => name, :mode => mode,
301
299
  :typeflag => "5", :size => 0,
302
300
  :prefix => prefix,
303
- :mtime => Time.now
301
+ :mtime => ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now
304
302
 
305
303
  @io.write header
306
304
 
@@ -311,12 +309,12 @@ class Gem::Package::TarWriter
311
309
  # Splits +name+ into a name and prefix that can fit in the TarHeader
312
310
 
313
311
  def split_name(name) # :nodoc:
314
- if name.bytesize > 256 then
312
+ if name.bytesize > 256
315
313
  raise Gem::Package::TooLongFileName.new("File \"#{name}\" has a too long path (should be 256 or less)")
316
314
  end
317
315
 
318
316
  prefix = ''
319
- if name.bytesize > 100 then
317
+ if name.bytesize > 100
320
318
  parts = name.split('/', -1) # parts are never empty here
321
319
  name = parts.pop # initially empty for names with a trailing slash ("foo/.../bar/")
322
320
  prefix = parts.join('/') # if empty, then it's impossible to split (parts is empty too)
@@ -325,11 +323,11 @@ class Gem::Package::TarWriter
325
323
  prefix = parts.join('/')
326
324
  end
327
325
 
328
- if name.bytesize > 100 or prefix.empty? then
326
+ if name.bytesize > 100 or prefix.empty?
329
327
  raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
330
328
  end
331
329
 
332
- if prefix.bytesize > 155 then
330
+ if prefix.bytesize > 155
333
331
  raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long base path (should be 155 or less)")
334
332
  end
335
333
  end
@@ -55,7 +55,7 @@ class Gem::Package
55
55
  class FormatError < Error
56
56
  attr_reader :path
57
57
 
58
- def initialize message, source = nil
58
+ def initialize(message, source = nil)
59
59
  if source
60
60
  @path = source.path
61
61
 
@@ -68,7 +68,7 @@ class Gem::Package
68
68
  end
69
69
 
70
70
  class PathError < Error
71
- def initialize destination, destination_dir
71
+ def initialize(destination, destination_dir)
72
72
  super "installing into parent path %s of %s is not allowed" %
73
73
  [destination, destination_dir]
74
74
  end
@@ -107,12 +107,24 @@ class Gem::Package
107
107
 
108
108
  attr_writer :spec
109
109
 
110
- def self.build spec, skip_validation=false
111
- gem_file = spec.file_name
110
+ ##
111
+ # Permission for directories
112
+ attr_accessor :dir_mode
113
+
114
+ ##
115
+ # Permission for program files
116
+ attr_accessor :prog_mode
117
+
118
+ ##
119
+ # Permission for other files
120
+ attr_accessor :data_mode
121
+
122
+ def self.build(spec, skip_validation = false, strict_validation = false, file_name = nil)
123
+ gem_file = file_name || spec.file_name
112
124
 
113
125
  package = new gem_file
114
126
  package.spec = spec
115
- package.build skip_validation
127
+ package.build skip_validation, strict_validation
116
128
 
117
129
  gem_file
118
130
  end
@@ -124,7 +136,7 @@ class Gem::Package
124
136
  # If +gem+ is an existing file in the old format a Gem::Package::Old will be
125
137
  # returned.
126
138
 
127
- def self.new gem, security_policy = nil
139
+ def self.new(gem, security_policy = nil)
128
140
  gem = if gem.is_a?(Gem::Package::Source)
129
141
  gem
130
142
  elsif gem.respond_to? :read
@@ -145,10 +157,10 @@ class Gem::Package
145
157
  ##
146
158
  # Creates a new package that will read or write to the file +gem+.
147
159
 
148
- def initialize gem, security_policy # :notnew:
160
+ def initialize(gem, security_policy) # :notnew:
149
161
  @gem = gem
150
162
 
151
- @build_time = Time.now
163
+ @build_time = ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now
152
164
  @checksums = {}
153
165
  @contents = nil
154
166
  @digests = Hash.new { |h, algorithm| h[algorithm] = {} }
@@ -162,14 +174,14 @@ class Gem::Package
162
174
  ##
163
175
  # Copies this package to +path+ (if possible)
164
176
 
165
- def copy_to path
177
+ def copy_to(path)
166
178
  FileUtils.cp @gem.path, path unless File.exist? path
167
179
  end
168
180
 
169
181
  ##
170
182
  # Adds a checksum for each entry in the gem to checksums.yaml.gz.
171
183
 
172
- def add_checksums tar
184
+ def add_checksums(tar)
173
185
  Gem.load_yaml
174
186
 
175
187
  checksums_by_algorithm = Hash.new { |h, algorithm| h[algorithm] = {} }
@@ -191,7 +203,7 @@ class Gem::Package
191
203
  # Adds the files listed in the packages's Gem::Specification to data.tar.gz
192
204
  # and adds this file to the +tar+.
193
205
 
194
- def add_contents tar # :nodoc:
206
+ def add_contents(tar) # :nodoc:
195
207
  digests = tar.add_file_signed 'data.tar.gz', 0444, @signer do |io|
196
208
  gzip_to io do |gz_io|
197
209
  Gem::Package::TarWriter.new gz_io do |data_tar|
@@ -206,13 +218,18 @@ class Gem::Package
206
218
  ##
207
219
  # Adds files included the package's Gem::Specification to the +tar+ file
208
220
 
209
- def add_files tar # :nodoc:
221
+ def add_files(tar) # :nodoc:
210
222
  @spec.files.each do |file|
211
223
  stat = File.lstat file
212
224
 
213
225
  if stat.symlink?
214
- relative_dir = File.dirname(file).sub("#{Dir.pwd}/", '')
215
- target_path = File.join(relative_dir, File.readlink(file))
226
+ target_path = File.readlink(file)
227
+
228
+ unless target_path.start_with? '.'
229
+ relative_dir = File.dirname(file).sub("#{Dir.pwd}/", '')
230
+ target_path = File.join(relative_dir, target_path)
231
+ end
232
+
216
233
  tar.add_symlink file, target_path, stat.mode
217
234
  end
218
235
 
@@ -229,7 +246,7 @@ class Gem::Package
229
246
  ##
230
247
  # Adds the package's Gem::Specification to the +tar+ file
231
248
 
232
- def add_metadata tar # :nodoc:
249
+ def add_metadata(tar) # :nodoc:
233
250
  digests = tar.add_file_signed 'metadata.gz', 0444, @signer do |io|
234
251
  gzip_to io do |gz_io|
235
252
  gz_io.write @spec.to_yaml
@@ -242,14 +259,20 @@ class Gem::Package
242
259
  ##
243
260
  # Builds this package based on the specification set by #spec=
244
261
 
245
- def build skip_validation = false
262
+ def build(skip_validation = false, strict_validation = false)
263
+ raise ArgumentError, "skip_validation = true and strict_validation = true are incompatible" if skip_validation && strict_validation
264
+
246
265
  Gem.load_yaml
247
266
  require 'rubygems/security'
248
267
 
249
268
  @spec.mark_version
250
- @spec.validate unless skip_validation
269
+ @spec.validate true, strict_validation unless skip_validation
251
270
 
252
- setup_signer
271
+ setup_signer(
272
+ signer_options: {
273
+ expiration_length_days: Gem.configuration.cert_expiration_length_days
274
+ }
275
+ )
253
276
 
254
277
  @gem.with_write_io do |gem_io|
255
278
  Gem::Package::TarWriter.new gem_io do |gem|
@@ -263,7 +286,7 @@ class Gem::Package
263
286
  Successfully built RubyGem
264
287
  Name: #{@spec.name}
265
288
  Version: #{@spec.version}
266
- File: #{File.basename @spec.cache_file}
289
+ File: #{File.basename @gem.path}
267
290
  EOM
268
291
  ensure
269
292
  @signer = nil
@@ -300,8 +323,8 @@ EOM
300
323
  # Creates a digest of the TarEntry +entry+ from the digest algorithm set by
301
324
  # the security policy.
302
325
 
303
- def digest entry # :nodoc:
304
- algorithms = if @checksums then
326
+ def digest(entry) # :nodoc:
327
+ algorithms = if @checksums
305
328
  @checksums.keys
306
329
  else
307
330
  [Gem::Security::DIGEST_NAME].compact
@@ -309,7 +332,7 @@ EOM
309
332
 
310
333
  algorithms.each do |algorithm|
311
334
  digester =
312
- if defined?(OpenSSL::Digest) then
335
+ if defined?(OpenSSL::Digest)
313
336
  OpenSSL::Digest.new algorithm
314
337
  else
315
338
  Digest.const_get(algorithm).new
@@ -331,10 +354,10 @@ EOM
331
354
  # If +pattern+ is specified, only entries matching that glob will be
332
355
  # extracted.
333
356
 
334
- def extract_files destination_dir, pattern = "*"
357
+ def extract_files(destination_dir, pattern = "*")
335
358
  verify unless @spec
336
359
 
337
- FileUtils.mkdir_p destination_dir
360
+ FileUtils.mkdir_p destination_dir, :mode => dir_mode && 0755
338
361
 
339
362
  @gem.with_read_io do |io|
340
363
  reader = Gem::Package::TarReader.new io
@@ -360,7 +383,8 @@ EOM
360
383
  # If +pattern+ is specified, only entries matching that glob will be
361
384
  # extracted.
362
385
 
363
- def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc:
386
+ def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
387
+ directories = [] if dir_mode
364
388
  open_tar_gz io do |tar|
365
389
  tar.each do |entry|
366
390
  next unless File.fnmatch pattern, entry.full_name, File::FNM_DOTMATCH
@@ -370,19 +394,20 @@ EOM
370
394
  FileUtils.rm_rf destination
371
395
 
372
396
  mkdir_options = {}
373
- mkdir_options[:mode] = entry.header.mode if entry.directory?
397
+ mkdir_options[:mode] = dir_mode ? 0755 : (entry.header.mode if entry.directory?)
374
398
  mkdir =
375
- if entry.directory? then
399
+ if entry.directory?
376
400
  destination
377
401
  else
378
402
  File.dirname destination
379
403
  end
404
+ directories << mkdir if directories
380
405
 
381
406
  mkdir_p_safe mkdir, mkdir_options, destination_dir, entry.full_name
382
407
 
383
408
  File.open destination, 'wb' do |out|
384
409
  out.write entry.read
385
- FileUtils.chmod entry.header.mode, destination
410
+ FileUtils.chmod file_mode(entry.header.mode), destination
386
411
  end if entry.file?
387
412
 
388
413
  File.symlink(entry.header.linkname, destination) if entry.symlink?
@@ -390,6 +415,15 @@ EOM
390
415
  verbose destination
391
416
  end
392
417
  end
418
+
419
+ if directories
420
+ directories.uniq!
421
+ File.chmod(dir_mode, *directories)
422
+ end
423
+ end
424
+
425
+ def file_mode(mode) # :nodoc:
426
+ ((mode & 0111).zero? ? data_mode : prog_mode) || mode
393
427
  end
394
428
 
395
429
  ##
@@ -398,7 +432,7 @@ EOM
398
432
  # Also sets the gzip modification time to the package build time to ease
399
433
  # testing.
400
434
 
401
- def gzip_to io # :yields: gz_io
435
+ def gzip_to(io) # :yields: gz_io
402
436
  gz_io = Zlib::GzipWriter.new io, Zlib::BEST_COMPRESSION
403
437
  gz_io.mtime = @build_time
404
438
 
@@ -412,15 +446,12 @@ EOM
412
446
  #
413
447
  # If +filename+ is not inside +destination_dir+ an exception is raised.
414
448
 
415
- def install_location filename, destination_dir # :nodoc:
449
+ def install_location(filename, destination_dir) # :nodoc:
416
450
  raise Gem::Package::PathError.new(filename, destination_dir) if
417
451
  filename.start_with? '/'
418
452
 
419
- destination_dir = realpath destination_dir
420
- destination_dir = File.expand_path destination_dir
421
-
422
- destination = File.join destination_dir, filename
423
- destination = File.expand_path destination
453
+ destination_dir = File.expand_path(File.realpath(destination_dir))
454
+ destination = File.expand_path(File.join(destination_dir, filename))
424
455
 
425
456
  raise Gem::Package::PathError.new(destination, destination_dir) unless
426
457
  destination.start_with? destination_dir + '/'
@@ -447,11 +478,11 @@ EOM
447
478
  end
448
479
  end
449
480
 
450
- def mkdir_p_safe mkdir, mkdir_options, destination_dir, file_name
451
- destination_dir = realpath File.expand_path(destination_dir)
481
+ def mkdir_p_safe(mkdir, mkdir_options, destination_dir, file_name)
482
+ destination_dir = File.realpath(File.expand_path(destination_dir))
452
483
  parts = mkdir.split(File::SEPARATOR)
453
484
  parts.reduce do |path, basename|
454
- path = realpath path unless path == ""
485
+ path = File.realpath(path) unless path == ""
455
486
  path = File.expand_path(path + File::SEPARATOR + basename)
456
487
  lstat = File.lstat path rescue nil
457
488
  if !lstat || !lstat.directory?
@@ -466,15 +497,14 @@ EOM
466
497
  ##
467
498
  # Loads a Gem::Specification from the TarEntry +entry+
468
499
 
469
- def load_spec entry # :nodoc:
500
+ def load_spec(entry) # :nodoc:
470
501
  case entry.full_name
471
502
  when 'metadata' then
472
503
  @spec = Gem::Specification.from_yaml entry.read
473
504
  when 'metadata.gz' then
474
505
  args = [entry]
475
506
  args << { :external_encoding => Encoding::UTF_8 } if
476
- Object.const_defined?(:Encoding) &&
477
- Zlib::GzipReader.method(:wrap).arity != 1
507
+ Zlib::GzipReader.method(:wrap).arity != 1
478
508
 
479
509
  Zlib::GzipReader.wrap(*args) do |gzio|
480
510
  @spec = Gem::Specification.from_yaml gzio.read
@@ -485,7 +515,7 @@ EOM
485
515
  ##
486
516
  # Opens +io+ as a gzipped tar archive
487
517
 
488
- def open_tar_gz io # :nodoc:
518
+ def open_tar_gz(io) # :nodoc:
489
519
  Zlib::GzipReader.wrap io do |gzio|
490
520
  tar = Gem::Package::TarReader.new gzio
491
521
 
@@ -496,7 +526,7 @@ EOM
496
526
  ##
497
527
  # Reads and loads checksums.yaml.gz from the tar file +gem+
498
528
 
499
- def read_checksums gem
529
+ def read_checksums(gem)
500
530
  Gem.load_yaml
501
531
 
502
532
  @checksums = gem.seek 'checksums.yaml.gz' do |entry|
@@ -510,10 +540,17 @@ EOM
510
540
  # Prepares the gem for signing and checksum generation. If a signing
511
541
  # certificate and key are not present only checksum generation is set up.
512
542
 
513
- def setup_signer
543
+ def setup_signer(signer_options: {})
514
544
  passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
515
- if @spec.signing_key then
516
- @signer = Gem::Security::Signer.new @spec.signing_key, @spec.cert_chain, passphrase
545
+ if @spec.signing_key
546
+ @signer =
547
+ Gem::Security::Signer.new(
548
+ @spec.signing_key,
549
+ @spec.cert_chain,
550
+ passphrase,
551
+ signer_options
552
+ )
553
+
517
554
  @spec.signing_key = nil
518
555
  @spec.cert_chain = @signer.cert_chain.map { |cert| cert.to_s }
519
556
  else
@@ -578,14 +615,14 @@ EOM
578
615
  # Verifies the +checksums+ against the +digests+. This check is not
579
616
  # cryptographically secure. Missing checksums are ignored.
580
617
 
581
- def verify_checksums digests, checksums # :nodoc:
618
+ def verify_checksums(digests, checksums) # :nodoc:
582
619
  return unless checksums
583
620
 
584
621
  checksums.sort.each do |algorithm, gem_digests|
585
622
  gem_digests.sort.each do |file_name, gem_hexdigest|
586
623
  computed_digest = digests[algorithm][file_name]
587
624
 
588
- unless computed_digest.hexdigest == gem_hexdigest then
625
+ unless computed_digest.hexdigest == gem_hexdigest
589
626
  raise Gem::Package::FormatError.new \
590
627
  "#{algorithm} checksum mismatch for #{file_name}", @gem
591
628
  end
@@ -596,7 +633,7 @@ EOM
596
633
  ##
597
634
  # Verifies +entry+ in a .gem file.
598
635
 
599
- def verify_entry entry
636
+ def verify_entry(entry)
600
637
  file_name = entry.full_name
601
638
  @files << file_name
602
639
 
@@ -623,16 +660,16 @@ EOM
623
660
  ##
624
661
  # Verifies the files of the +gem+
625
662
 
626
- def verify_files gem
663
+ def verify_files(gem)
627
664
  gem.each do |entry|
628
665
  verify_entry entry
629
666
  end
630
667
 
631
- unless @spec then
668
+ unless @spec
632
669
  raise Gem::Package::FormatError.new 'package metadata is missing', @gem
633
670
  end
634
671
 
635
- unless @files.include? 'data.tar.gz' then
672
+ unless @files.include? 'data.tar.gz'
636
673
  raise Gem::Package::FormatError.new \
637
674
  'package content (data.tar.gz) is missing', @gem
638
675
  end
@@ -645,7 +682,7 @@ EOM
645
682
  ##
646
683
  # Verifies that +entry+ is a valid gzipped file.
647
684
 
648
- def verify_gz entry # :nodoc:
685
+ def verify_gz(entry) # :nodoc:
649
686
  Zlib::GzipReader.wrap entry do |gzio|
650
687
  gzio.read 16384 until gzio.eof? # gzip checksum verification
651
688
  end
@@ -653,16 +690,6 @@ EOM
653
690
  raise Gem::Package::FormatError.new(e.message, entry.full_name)
654
691
  end
655
692
 
656
- if File.respond_to? :realpath
657
- def realpath file
658
- File.realpath file
659
- end
660
- else
661
- def realpath file
662
- file
663
- end
664
- end
665
-
666
693
  end
667
694
 
668
695
  require 'rubygems/package/digest_io'
@@ -126,4 +126,3 @@ class Gem::PackageTask < Rake::PackageTask
126
126
  end
127
127
 
128
128
  end
129
-